メモ用のブログ

技術系のメモとかを書いておきます

ビルドするときにエラーが出る(Localizable.stringあたり?)

iPhoneアプリの知識ゼロなので、根本的な原因はいまいち理解できていないですが…;;
今後も発生しそうなのでメモしておきます。

エラーが起こった状況

os:MacOSX 10.6.4
Xcode:バージョン3.2.5
iOS SDK:4.2
状況:ビルド時にエラー

エラーメッセージ

Command /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings failed with exit code 71  

解決策

ターミナルでrubyのパスを修正

$ mv /usr/bin/ruby_org /usr/bin/ruby


実は、デフォルトで入っているrubyではなくて、MacPortsでインストールしたrubyを使うため、オリジナルの物はリネームしていました。
なぜrubyのパスが必要なのかなどなど詳しい事は調査中です- -;
また、一度ビルド成功すると、元の設定(MacPortsでインストールしたrubyを使う設定)に戻しても大丈夫なようです。

2011/1/10追記

なぜrubyのパスが必要かわかりました><
ちゃんとエラーメッセージ読めばわかりました;;

エラーメッセージ

Command /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings failed with exit code 71  

copystringsをみてみると…

#!/usr/bin/ruby
#
#  copystrings [options] SRCFILE ... DSTDIR$
#
#  Copyright (c) 2008-2009 Apple Inc.  All rights reserved.
#
#  This script copies one or more localization .strings files from the provided
#  source file paths to the destination directory.  The destination files wil
#  have the same names as the source files.  The validity of each source file is
#  optionally checked before the file is copied.  Also, the encoding of each of
#  the files is converted to the specified output encoding (usually UTF-16) as
#  the file is copied.  The output encoding can be specified
#  as "binary" to get a binary format instead of a text file.
#

思いっきりruby呼んでますね…。このパスを自分の環境に合ったものに変えたらOKなのだと思います。

eclipseでエラーが消えない

すごくご無沙汰です。
色々ありましたがブログは更新できず…でした。
久々の更新です。
今後はもう少し色々書いていけたらな…と思っています。


さてさて、eclipseで作業をしていたところ、エラーが消えない事がありました。

エラーが起こった状況

os:WindowsXP
eclipse:3.6(Helios)
状況:エラーのあるファイルを削除した際に
プロジェクト名のところについたエラー印(赤い×)が
消えず、ビルドができなくなる

エラーメッセージ

Unparsed aapt error(s)! Check the console for output. 

解決策

プロジェクトのクリーンを実行

[プロジェクト]>[クリーン]

最初はわざわざプロジェクトをエクスポートして、再度インポート…とやっていたのですが、クリーンを実行すればエラーが消えました…。


しょうもなー!って感じですが、一応自分用にメモですw

xamppでVirtual Hostの設定をすると403エラー

ご無沙汰してしまいました…。
ちょっと違う仕事をしていたため、最近開発ができず…orz

xamppでちょっと手間取った事があるのでメモします。

エラーが起こった状況

os:WindowsXP
xampp:version 1.6.8
エラー内容:VirtualHostを設定したがエラーが出てアクセス出来ない。
エラーメッセージ
Access forbidden!

要求されたディレクトリへのアクセス権限がありません。
インデックスドキュメントが存在しないか、 
ディレクトリの読み込みが許可されていません。

サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。
Error 403
httpd.confの設定(抜粋)
<VirtualHost  *:80>
  DocumentRoot "C:/xampp/htdocs/v_dir"
</VirtualHost>

<VirtualHost *:8080>
  DocumentRoot "C:/xampp/htdocs/v_dir2"
</VirtualHost>

解決策

virtualhostを設定した際は、再度Directoryディレクティブの設定を行わないと行けないみたいです。
xampp1.7.3では設定しなくてもエラーはでなかったのですが…。

修正したhttpd.conf

(ローカルからのみアクセス可の設定)

<VirtualHost  *:80>
  DocumentRoot "C:/xampp/htdocs/v_dir"
</VirtualHost>

<VirtualHost *:8080>
  DocumentRoot "C:/xampp/htdocs/v_dir2"
</VirtualHost>

# 追加
<Directory "C:/xampp/htdocs/v_dir">
Options Indexes -FollowSymLinks 
Order deny,allow
Deny from all
Allow from localhost
</Directory>

<Directory "C:/xampp/htdocs/v_dir2">
Options Indexes -FollowSymLinks 
Order deny,allow
Deny from all
Allow from localhost
</Directory> 

これで問題なくアクセスできるようになりました。
あとxamppの最新版だとPHP切り替えができない等色々ありましたが、それは別記事でまとめたいと思います。

CygwinでUnable to access jarfile

Cygwinからjava -jarコマンドを実行しようとするとUnable to access jarfileというエラーが出たので原因を調べました。

エラーが起こった状況

$java -jar ./rhino/js.jar test.js
Unable to access jarfile

rhinoを入れてみたのですが、実行できず…。なぜ??と思い調べてみると、意外な落とし穴でしたorz

解決策

実はjavaコマンドはcygwin内部のコマンドではなく、windows用のjava.exeを呼び出しているのです。
そのため、jarファイルの指定はwindowsのパスの形式で記述しなければいけません。

正しい記述↓

$java -jar C:\Cygwin\home\(user)\rhino\js.jar test.js

これで正しく実行することができました。
(*(user)はホームディレクトリの名前です)

eclipseでAndroid SDKのソースコードを見る

デバッグ中にAPIソースコードをみたくなる事ありますよね。そこでeclipseからAndroid SDKソースコードを見る方法を調べました。

環境

1.gitをインストール

Git(ギット)とは,ソフトウエアのリビジョンおよびソースコードを管理するために使われるオープンソースの分散型バージョン管理システムです。
(中略)
話題の携帯機器向けOS「Android」のソースコードもGitを使って管理されていたりします。

http://itpro.nikkeibp.co.jp/article/Keyword/20090508/329716/

このgitを使ってソースコードをダウンロードします。
調べてみるとWindowsでgitを使うにはCygwinを入れてアレコレする方法が出てきたのですが、ちょっと面倒だなーと思いさらに調べると、便利ツールがありました。

msysgit-http://code.google.com/p/msysgit/

Windowsからgitを使うためのソフトウェアで、インストーラーでサクっとインストールできます。
ここではGit-1.7.0.2-preview20100309.exeをダウンロードしてインストールします。
後でコマンドラインから呼び出すのでパスを通しておいてください。

私の環境では下記をPATHに追加しました。

C:\msysgit\msysgit\cmd

2.ソースを取得

まず、作業用のディレクトリを作成します。
ここでは下記のようにしました。

C:\android\mydroid

mydroidにgitで取得したソースコードをダウンロードしてきます。

コマンドプロンプトを起動してC:\android\mydroidに移動します。
そして下記コマンドを実行します。

git clone git://android.git.kernel.org/platform/frameworks/base.git

しばし待つ(環境によってはかなり時間がかかるかもしれません)とソースコードが取得できます。

3.eclipseでソースを見れるように設定

私の環境は下記のようなディレクトリ構成です。
androidのバージョン毎にディレクトリが分かれています。

C:\android
 |__android-sdk-windows
 |__add-ons
(略)
 |__platforms
    |__android-2    ←------Android1.1
    |__android-3    ←------Android1.5
    |__android-4    ←------Android1.6
    |__android-5    ←------Android2.0
    |__android-6    ←------Android2.0.1
    |__android-7    ←------Android2.1-update1
    |__android-8    ←------Android2.2

プロジェクトでターゲットに設定したバージョンのディレクトリ内にソースコードを配置することで、eclipseからソースが見れるようになります。

例)Android1.6(android-4)にソースコードを配置する場合
1.ソース配置用ディレクトsourcesを作成
(ディレクトリ名を間違えないよう注意)

C:\android\android-sdk-windows\platforms\android-4\sources

2.sourcesディレクトリにgitで取得したソースのうちmydroid\base\core\java以下をコピー
3.core配下に無いソースで必要なものがあればmydroid\baseから同様にコピー
4.eclipseを再起動

4.Android SDKのソースを見てみる

4.1.適当なプロジェクトを開く(該当するバージョンのディレクトリにソースコードを配置しておくこと)。

4.2.パッケージエクスプローラからAndroidx.x(該当するバージョン)を選択。


4.3.見たいソースのパッケージを選択する。ここではandroid.appを選択。


4.4.見たいソース(.classが付いている)を選択。ここではActivity.classを選択。
ソースコードが表示される。


自分で書いたソースコード中で「宣言を開く」としてもソースを見ることができます。

補足

  • ソースコードをブラウザから直接見たい場合は下記URLからアクセスすると見れます。

見たいソースコードの"raw"をクリックしてください。
projects / platform/frameworks/base.git / tree
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/java/android/app;hb=HEAD

  • もし、ソースが見れないときは、sourceディレクトリ配下に該当するパッケージが配置されているか確認してください。もし無いようでしたら、おそらくmydroid\base配下にあると思うので、それをsourceディレクトリにコピーしてください。
  • 注意:gitでダウンロードしたソースはバージョンが最新のものだと思われます。そのため違うバージョンをターゲットにしたプロジェクトで見るとズレ等が起こる事があります。

参考URL

http://www.mori-soft.com/index.php?option=com_content&view=article&id=77:androideclipsesdk&catid=7:smartphone&Itemid=14

http://d.hatena.ne.jp/yhanada/20090731/1249045594

http://simultechnology.blendmix.jp/blog/archives/1042

http://magpad.jugem.jp/?eid=83

SQLiteに直接アクセスする

DBアクセスをするサンプルアプリを動かしていて、「本当にDBに書き込みできてるのかな??直接見てみたいなぁ」と思い、方法を調べてみました。

なかなか方法が見つからず、まさか無理なわけないよな…と思っていたら、公式の開発ガイドに載っていました…。
灯台下暗しもいいところですね…。
と、いうわけで、困ったらまずは開発ガイドやリファレンスを読みましょうという事で><

SQLiteのデータベースにアクセスする方法

(windowsの場合)
1.コマンドプロンプト起動
2.android SDKのtoolsの中にあるadbコマンド*1を使う
2.1.エミュレータの端末IDを取得

>adb devices
List of devices attached
emulator-5554   device    ←-----これが端末ID

2.2.エミュレータにシェルで接続

>adb -s emulator-5554 shell
#

2.3.接続したいデータベースを指定してSQLite3コマンドを実行
ここでは下記条件の場合になります

パッケージ名 アプリ名 DB名
jp.co.test.android SQLiteTest test.db
# sqlite3 /data/data/jp.co.test.android.SQLiteTest/databases/test.db
sqlite3 /data/data/jp.co.test.android.SQLiteTest/databases/test.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> .databases       ←-----目的のDBに接続できたか確認
.databases
seq  name             file

---  ---------------  ----------------------------------------------------------

0    main             /data/data/jp.co.test.android.SQLiteEx/databases/test.db
           ↑-----ここに指定したDB名が表示されていればOK

2.4.SQLを実行してみる

sqlite> select * from test;
select * from test;
0|2000|りんご
1|1000|みかん

(補足)
このままだとちょっと見づらいかなーと思うので、カラム名の表示をONにします。

sqlite> .header on
.header on
sqlite> select * from test;
select * from test;
id|price|name
0|2000|りんご
1|1000|みかん


おそらく実機にも同様の手順でDBにアクセスできるかと思います。

参考URL

  • Android Developers-開発ガイド-Android Debug Bridge-Issuing Shell Commands

http://developer.android.com/intl/ja/guide/developing/tools/adb.html#shellcommands

*1:toolsフォルダのパスを通していない時はtoolsフォルダに移動してからコマンドを実行する

アプリ実行時のエラー:emulator-5554 disconnected!

またもサンプルプログラムを動かしていたら次のようなエラーがでました。

emulator-5554 disconnected! Cancelling 
'net.npaka.surfaceviewex.SurfaceViewEx activity launch'!

原因はわからないのですが、下記方法で対処できました。

  1. 《実行》-《実行構成》を選択
  2. 実行構成ウィンドウの《共通》タブを開きます
  3. 画面下の「バックグラウンドでの起動」チェックボックスを外します

あとはエミュレータのリセットという方法もあるようですが、エミュレータが初期化されるので最終手段ということで…。