• 締切済み

R.layout.**でエラー

こんにちは。 質問させてください。 現在外部ライブラリを利用してAndroidアプリを開発しています。 ここでは仮にHogeFugaライブラリとします。 HogeFugaライブラリを$ant debugでビルドしてHogeFuga.jarを作りました。 そして自分の作成したActivityに以下のようなコードを追加しました public void startHogeFuga() {   Intent intent = new Intent(this,com.app.HogeFuga.class);   this.startActivity(intent); } ライブラリファイルをlibsにコピーし、これで$ant debugも通り実行可能にはなったのですが、startHogeFugaを呼び出すと java.lang.NoClassDefFoundError: com.app.HogeFuga.R$layout というエラーが出て落ちてしまいます。 元のコードのLayoutデータが見つからないようなエラーでしたので元のコードで落ちてる場所を特定して Log.d( "hogehoge", "layout.main is " + R.layout.main ); というコードを追加したところLog.dが出力されず上記エラーと同様のエラーが発生しました。 なんらかの原因でライブラリ側がR.layoutにアクセスできていないのが原因だと思うのですが原因はどんなことが考えられますでしょうか? 環境: Mac OSX :10.8.2 Build Target : 12 Terminal:iTerm2 備考: ライブラリ側にもR.javaが生成されているのは確認しております。 よろしくおねがいします。

みんなの回答

noname#177743
noname#177743
回答No.2

コードがないので状況がいまいちわからないところがあるのですが、com.app.HogeFuga.R$layoutというのを見ると、com.app.HogeFugaパッケージにRクラスがある、といっているように見えます。これは正しいですか? HogeFugaはクラス名で、パッケージはcom.appのようにも思えるのですが……。すなわち、com.app.R$layoutであるべきのような気もしますが、このあたりのパッケージの整合性はとれているのでしょうか。 具体的なコードを見てないので、はずしてたらすみません。

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

>ライブラリファイルをlibsにコピーし というところが引っかかっています。 NoClassDefFoundErrorは、JARファイルがCLASSPATHに指定したディレクトリにない場合に発生するエラーです。CLASSPATHに指定されているディレクトリにHogeFuga.jarがないのではないか、と考えます。 以下、ご参考になります。 http://www.atmarkit.co.jp/fjava/rensai3/code_debug06/debug06.html

0xEF
質問者

お礼

ありがとうございます。 CLASSPATHが通っているかどうかは確認していませんでしたが、他のjarライブラリは読み込まれていること、ライブラリ側のActivityのonCreateの中に入っていることからクラスパスの問題ではなさそうです。(ご指摘の箇所を確認しクラスパスを通してみましたが特に変化はありませんでした) onCreateの中でR.layoutにアクセスするところで落ちているようです。 もう少し調べてみたいとおもいます。 ありがとうございました!

関連するQ&A