ADT 22にアップグレードした後、ライブラリがAPKに追加されない


238

いくつかのライブラリプロジェクトを参照しているかなり大きなAndroidアプリプロジェクトがあります。日食ADTプラグインを最新バージョン(v22)にアップグレードするまで、すべてが順調でした。もちろんSDKもアップグレードしました。Eclipseでコンパイルエラーは表示されませんが、電話でプロジェクトを実行すると、NoClassDefFoundErrorが発生します。

java.lang.NoClassDefFoundError: org.acra.ACRA
....

アルカライブラリは、参照されたライブラリプロジェクト(libsフォルダー内)の1つに含まれており、パッケージエクスプローラーの「Android Private Libraries」で確認できます。プロジェクトは、ADTをアップグレードしなかった他のすべてのコンピュータで正常に実行されます。

私はすでに次のものを含むものをすべて試しました:

  • Android SDKを再インストールします
  • 新しいADTバンドルをダウンロードする
  • すべてのコードを削除してgitからもう一度取得します
  • 問題のライブラリをアプリプロジェクトにコピーする
  • このライブラリを使用するコードをコメント化します-次のライブラリでも同じエラーが発生します

すべて成功せず、ここで本当に必死になっています。

誰かがその問題を解決する方法についてのヒントを教えてくれたら本当に嬉しいです。

回答:


337

彼のadt-dev投稿からのボストンのストリートの引用:

アップグレード時に、新しい「Android Private Libraries」の「注文とエクスポート」が常にチェックされるとは限りません。そして、android-support-v4.jarはこの「Android Private Libraries」セクションにあります。

これを修正するには、「注文とエクスポート」に移動し、「Android Private Libraries」を確認します。次に、更新/クリーンアップ/再構築します。

ライブラリプロジェクトに対してこの「修正」を行った後、依存するプロジェクトをすぐに閉じて再度開く必要がある場合があります。これは、この「修正」がすぐに表示されない場合があるためです。

これを試してみてください。運が良ければ問題は解決します。

ここに画像の説明を入力してください


32
CommonsWareは、常に最初のパイオニアの1人です。どうもありがとうございました。:)
ポールウェイン

1
非常に新しいADTバージョンは新しい驚きです;)新しいビルドシステムが改善されることを願っています。CommonsWareに感謝
lujop

3
私だけですか、またはすべての開発者(Eclipseとライブラリを使用する開発者)がすべてのライブラリプロジェクトにアクセスし、「Android Private Libraries」をエクスポート済みとしてマークするのは間違っているように聞こえますか?そもそも、Googleが最初にこの新しい「機能」を追加するつもりだったのではないでしょうか。おそらく、ライブラリをエクスポート済みとしてマークすることは想定されていません。たぶん、不足しているjarファイルを「libs」フォルダに直接追加することになっています。例:これにより、私のライブラリプロジェクトは最新のandroid-support-v4.jar [v13]を使用できますが、ABSは内部でandroid-support-v4-12.jarを使用します。
スウビー、2013年

2
@swooby:「すべての開発者(Eclipseとライブラリを使用する開発者)がすべてのライブラリプロジェクトに参加し、「Android Private Libraries」をエクスポート済みとしてマークするのは間違っているのでしょうか?-それがバグである限り、それは「間違った」ものであり、ツールを書いた人々によって認められています。「たぶん、欠落しているjarファイルを直接「libs」フォルダーに追加することになっているのかもしれません-ああ、あなたも過去1年と同じようにそれを行う必要があります。ただし、このチェックボックスをオンにする必要があります。
CommonsWare 2013年

9
@Phillip:AFAIK、それはすべてのプロジェクトです。より正確には、すべてがに含まれているプロジェクトlibs/だと思いますが、libs/数か月後に何かを追加してこれを忘れた場合に備えて、すべてをチェックすることもできます。
CommonsWare 2013年

10

Android Private Librariesを確認するだけでは不十分で、Android SDK ManagerにAndroid SDK Build-toolsもインストールする必要がありました。


これが必要であることを確認できませんが、SimonSaysがインストールする前に発生したエラーを回避できませんでした。上で説明したように、エクスポートチェックボックスの適切な設定のみが必要な場合がありますが、ビルドツールのインストールの過程で行ったことを触れておかなければなりません。
strangeluck

これでうまくいきます。Eclipseの設定を変更するだけでは不十分です。AndroidSDKマネージャーにインストールされているビルドツールをチェックアウトする必要がある場合があります。
スティーブンス

4

私も同じ問題を抱えていましadt22.0.1。そして、上記の解決策はどれもうまくいきませんでした。さらに、外部ライブラリプロジェクトを作業プロジェクトに追加するときは、常に作業プロジェクトのgenフォルダを確認し、R外部ライブラリプロジェクトが(パッケージ名とともに)存在する場合は、外部ライブラリプロジェクトのみをエクスポートします。そして私のgenフォルダーにpackagenameは外部ライブラリは表示されませんでした。

project.propertiesファイルを確認したところ、外部ライブラリリンクが存在していませんでしたandroid.library.reference.1=。そのため、から追加したにもかかわらず、手動で外部ライブラリ参照をそこに追加しましたproject->properties->Java Build Path->Projects->Add。手動で編集すると、project.propertiesすべての作業が完了しました。

ここに画像の説明を入力してください


1
設定するguiの場所がでandroid.library.reference.nなく java build path、むしろproject-> properties-> Android-> Library-> Add...だったので、それは起こったと思います。ガッチャ
n611x007 14

4

私は同様の問題に遭遇し、約3時間を費やしましたが、ここで提案された決定のどれも役に立たなかった...最後に問題の原因を発見しました:プロジェクトファイルとproject.propertiesは読み取り専用でした。Eclipseは、GUIでライブラリーの依存関係を変更しても、黙って無視しています。


3

私も同じ問題を抱えていました。それは日食プロジェクトのためでした。それを解決するために、Eclipseで新しいプロジェクトを作成し、既存のプロジェクトクラスとリソースをそれにコピーしてから、Eclipseを再度起動し、カスタムインクルードを追加しました。


1
面倒すぎて、CommonsWareのソリューションは私にとってうまくいきました。
Bilthon 2013年

2

私は同様の問題を抱えていて、私の答えはCommonsWareのものとは少し異なります。これが私のスクリーンショットです:

ここに画像の説明を入力してください

libsをチェックした後、私のビルドは再び動作し始めました。


2
私はこの解決策に注意します。Android Dependencies置き換えられAndroid Private Libraries、レガシーな理由でまだ残っているだけかもしれません。いつでも削除できると思います。
SimonSays 2013年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.