電子書籍の厳選無料作品が豊富!

こんにちは。
質問させてください。

現在外部ライブラリを利用して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が生成されているのは確認しております。

よろしくおねがいします。

A 回答 (2件)

コードがないので状況がいまいちわからないところがあるのですが、com.app.HogeFuga.R$layoutというのを見ると、com.app.HogeFugaパッケージにRクラスがある、といっているように見えます。

これは正しいですか? HogeFugaはクラス名で、パッケージはcom.appのようにも思えるのですが……。すなわち、com.app.R$layoutであるべきのような気もしますが、このあたりのパッケージの整合性はとれているのでしょうか。

具体的なコードを見てないので、はずしてたらすみません。
    • good
    • 0

>ライブラリファイルをlibsにコピーし


というところが引っかかっています。

NoClassDefFoundErrorは、JARファイルがCLASSPATHに指定したディレクトリにない場合に発生するエラーです。CLASSPATHに指定されているディレクトリにHogeFuga.jarがないのではないか、と考えます。

以下、ご参考になります。
http://www.atmarkit.co.jp/fjava/rensai3/code_deb …
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

ありがとうございました!

お礼日時:2012/12/26 21:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!