別記事に書いたようにandroidの開発環境をADT r15 から r20 にアップデートしました。さっそく、既存のプロジェクトをエミュレータ上で実行させたら、VerifyError などというものが発生しました。プロジェクトの設定もソースコードも一切触ってないのに不思議です。
Logcatを見てみるとエラーの前に
VFY: unable to find class referenced in signature (Lorg/jsoup/nodes/Document;)
のようなワーニングが表示されています。外部ライブラリのクラス(JSoup)なので、何かありそうだと思い調べると、ADT r17 でライブラリの設定方法が変更になったようです。
対応の仕方は2通りほどあるようです。
- ライブラリを libs フォルダ配下に配置する
外部jarを使ったandroidプロジェクトが起動しなくなった解決法
How to fix the "NoClassDefFoundError" with ADT 17
Androidで外部JarがAPKファイルに取り込まれなくなった時の対処法
- ライブラリの位置はそのままで、プロジェクトの設定を変更する
Android SDK r17にアップデートしたらVerifyError
今までは、ライブラリを assetsフォルダの下に入れていました。前者の方法については、ADT 17のリリースノートでも触れられています( http://developer.android.com/intl/ja/tools/sdk/eclipse-adt.html )。
なので、今回は前者の方法をとり、jar ファイルはlibs の下に配置し、不必要なライブラリ設定は削除することにしました。
未解決の問題
実は、libs 配下にjarファイルを配置した場合、ソースコードやjavadocを参照できなくなるという問題があるようです。
- http://stackoverflow.com/questions/9873152/how-to-attach-javadoc-or-sources-to-jars-in-libs-folder
- ライブラリにソースとJavadocをアタッチ
- http://code.google.com/p/android/issues/detail?id=27490#c21
ADT 20 でこの問題は解決されているということなのですが、手元の環境で試したところ、どうもうまくいきません。同じように、3rd-partyライブラリでうまくいかない、としている人もいます。 http://code.google.com/p/android/issues/detail?id=27490#c37
結局、真の原因は不明のままですが、当面javadocの参照ができない状態で我慢することにします。