5

ADT 20に更新した後、Androidプロジェクトを正常にエクスポートできなくなりました。私は得る:

Proguard returned with error code 1. See console

コンソールでは、大量のcan't find referenced class警告が表示され、場合によってはcan't find superclass or interface警告が表示されます。警告の最後に、次のようなメッセージが表示されます。

    You should check if you need to specify additional program jars.
Warning: there were 199 unresolved references to classes or interfaces.
    You may need to specify additional library jars (using '-libraryjars').
java.io.IOException: Please correct the above warnings first.
 at proguard.Initializer.execute(Initializer.java:321)
 at proguard.ProGuard.initialize(ProGuard.java:211)
 at proguard.ProGuard.execute(ProGuard.java:86)
 at proguard.ProGuard.main(ProGuard.java:492)

ビルドしようとするたびに、異なる数の警告が表示されます(一貫性はあまりありません)。また、エクスポート前にクリーンアップを実行すると、警告なしでエクスポートが完了しますが、結果として得られるAPKは、起動時にが原因でクラッシュすることがよくありClassNotFoundExceptionます。

Myには、AndroidサポートライブラリとActionBarSherlockproguard-project.txtに必要なルールが含まれています。-keep class

ADT 20より前にこのプロジェクトをビルドするのに問題はありませんでした。最後のリリース(リリースしたときに明らかに正常にビルドされました)をビルドしようとしましたが、同じプロガード警告が表示され、エクスポートに失敗しました。

他の多くのSOの質問が示唆するように、ルールを追加-libraryjarsしたり、ルールを追加したりしましたが、役に立ちませんでした。-dontwarn正常にビルドされることもありますが、作成されたAPKは起動時にクラッシュします。

助言がありますか?

4

3 に答える 3

5

AAPTには、処理のみを行うバグがあります

<fragment android:name"..." />

だがしかし

<fragment class="..." />

AAPTを修正しますが、それまでの間、他の属性を使用でき、機能します。

于 2012-07-18T23:47:11.073 に答える
4

ADT 20では、aaptの機能(-Gフラグを参照)を使用して、コードで使用されるカスタムビューのキープルールを含むプロガードファイルを作成できます。

古いproguard構成ファイルは、すべてのビューを保持していました。互換性ライブラリなどのライブラリプロジェクトを使用した場合、使用可能なコードのごく一部しか使用していない可能性があり、これには不要なものが多数含まれる可能性があります。一般的なキープルールを削除し、アプリケーションに基づいて新しいキープファイルを追加すると、未使用のものを大量に削除できるため、.apksが小さくなります。

これがうまくいかない可能性のある領域の1つは、Tools 20に更新し(新しい小さいproguard-android.txtファイルがあるため)、引き続きADT18を使用する場合です。ADT20は追加されないため、必ず使用してください。 project.properties設定で指定されたproguardファイルだけですが、生成されたproguardファイルには、aapt-Gからのkeepファイルもリストされています。antビルドも-G機能を使用すると思います。

(注-これに関するフォローアップについては、 http: //code.google.com/p/android/issues/detail?id = 35107を参照してください)

于 2012-07-17T22:41:26.633 に答える
0

報告によると、ADTのEclipseプラグインの最近の更新に問題があり、すべてのソースコードが適切に再コンパイルされません。その場合、ProGuardは(ライブラリクラスではなく)プログラムクラスに関する警告を出力します。エクスポート(および結果のアプリケーション)がProGuardなしで機能するかどうかを確認する必要があります。Antビルドが機能するかどうかも確認する必要があります(「antリリース」)。その場合、それは回避策になる可能性があります。

于 2012-07-14T22:48:28.167 に答える