ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Android アプリ開発で jar ファイル中のクラスが見つけられず “Caused by: java.lang.NoClassDefFoundError” というエラーが発生する

Android アプリ開発における jar ファイルの扱い

Java では、ライブラリは jar ファイルとして固められていることが多い。 当然ながら Android アプリ開発でも jar ファイルを扱う。

Android アプリ開発のための Eclipse ADT plug-in の Android SDK Tools 17 以降では、jar ファイルを libs ディレクトリの中に入れると、特にビルドパスなどを変更しなくても自動的にアプリの依存ライブラリに含まれるようになったらしい。 便利な世の中だ。

“Caused by: java.lang.NoClassDefFoundError” というエラーが発生する

というわけでさっそく自作の jar ファイルを libs ディレクトリに入れてみたのだけど、何故か実行時に下記のようなエラーが発生して、アプリが強制終了してしまった。

Caused by: java.lang.NoClassDefFoundError: info.vividcode.utils.XXXX

ビルド時にはエラーは出ていないのに実行時にクラス定義が見つけられていないので、何か設定が間違ってるのかと思ったが、「Android SDK Tools 17 以降では libs ディレクトリに jar ファイルを入れるだけで良い」 という情報ばかりで、その通りにやってるのになぜかうまくいかなかった。

下記は Android SDK Tools 17 に更新したら jar ファイルが見つからなくなってしまったという話の記事。

Java SE 7 向けにビルドされていたのがよくなかった

結局、結論としては Java SE 7 向けにコンパイルして jar ファイルを作っていたのがよくなかった模様。 JDK 6 で Java SE 6 向けにビルドし直したら問題なく使えるようになった。 おそらく JDK 7 を使っても Java SE 6 向けにビルドすれば Android アプリで使えると思う。

ビルド時にエラーが出なくて原因に行きつくのが難しかった。