Tacknのつぶやき このページをアンテナに追加 RSSフィード

2012年04月10日

外部jarを使ったandroidプロジェクトが起動しなくなった解決法

この本で勉強中

この教本はEclipseをメインに書かれているのですが私はNetBeans7.1.1で勉強をしていました。

順番に例題を打ち込み動作を見ながら勉強をしていたのですが9-3 Twitterクライアントの例題だけは先行して動かしていました。

しかしそれが突如として動かなくなりました。

この例題はsignpost-commonshttp4-1.2.1.1.jarsignpost-core-1.2.1.1.jarという外部jarを利用したプログラムです。


oauth-signpost

http://code.google.com/p/oauth-signpost/


この例題は事前にNetBeansでは動いていましたが、時期としてはADTのバージョンが上がる前でした。

Twitterクライアントの例題を元に発展させようと考えて居たので久しぶりにリコンパイルすると動きません。ソースは触っていません。

試しに教本の通りEclipseでもやはりjava.lang.NoClassDefFoundErrorの結果が発生してしまいました。

途方に暮れていたところ糸口が見つかりました。

解決策

出来上がったapkファイルをZIP解凍して見るとdexサイズがとても小さいくなっていました。

教本ではlibフォルダを作りそこにsignpost-commonshttp4-1.2.1.1.jar

signpost-core-1.2.1.1.jarを配置しJava Build Pathを通す事になっていました。

どうやらADTで変更があったようでlibではなくlibsに変更になったようです。*1

Eclipselibフォルダをlibsに変更した所classes.dexのサイズが13KBから56KBになりjava.lang.NoClassDefFoundErrorも発生しなくなり正常に起動しました。

ADTのVer.UPによってフォルダが変わったのが原因だったようです。

変更前

f:id:Tackn1977:20120410070502p:image

変更後

f:id:Tackn1977:20120410070501p:image

Android Dependenciesに含まれているかどうかがdexファイルに含まれるかどうかの分かれ目のようです。

問題としてはNetBeansで同様の変更を行った結果 java.lang.VerifyErrorという別のエラーが出てしまったのですよね。

とりあえずEclipseで動くことは分ったのでNetBeansでも動くはず。道が見えてきました。

プロジェクトの再作成をしてみて様子を見たいと思います。

ADT18にアップして再起動したら問題無く実機もエミュレータも動きました


以下追記

ADT18

ADT-18.0.0.zipが出ていたので追加でダウンロード

2012/4にアップデートさらにアップデートが入った様子。

Eclipsejarライブラリを使う場合Libsフォルダに入れるだけでビルドパスの追加は必要が無いようです。

f:id:Tackn1977:20120410091018p:image

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Tackn1977/20120410/1334009456
リンク元