2012年4月23日月曜日

ADTのバージョンを上げるとNoClassDefFoundError

AdMobライブラリのバージョンが上がっていたのと、jsonicのバージョンも上がっていたので
最新化しとこうと思って久々にEclipseを立ち上げた。

すると、ADTのバージョンも上がっていたのでまずはADTをバージョンアップ。


Android SDKマネージャーからバージョンアップ。

AdMobライブラリとjsonicライブラリを取得して差し替え。

さて、動かしてみるかと、AdMobのクラスで"NoClassDefFoundError"が発生する。
むむむ、AdMobライブラリで何かしくじったかなあと思い、古いライブラリを参照するように
しても同様のエラーが;
"AdMob NoClassDefFoundError"とかでググってみても情報は見つからない。
古いのに戻しても発生するので、いろいろ調べてみたところ、ようやく見つけた。

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

なんか、ADT17.0.0でおかしくなっているらしい。

プロジェクト内のライブラリファイルの置き場所が"lib"から"libs"に変わっているとのこと。

でも、僕のアプリはプロジェクトフォルダ外の外部jarを参照している。。。。この方法じゃないらしい><
よくよく見てみたら、追記されてるところに答えがあった。

Hi,
Just to add to the solution:
If you have references to jars that are not in the ‘libs’ folder, for example if you use ‘classpath variable’, you can resolve the NoClassDefFoundError issue with the new ADT 17 by exporting the references.
To export the references: simply go to “Properties > Java Build Path > Order and Export”, and check all the references you want exported.
Cheers,
DroidUX Team
Order and Exportのところで外部参照のjarのチェックがすべて外れてた・・・
チェックを入れることでいけるようになりました(^^)

外国人が作ったものって、前回からの互換性を考えずにがっつり変えてくることが多い気がする。。。