18

Amazon IAP が統合された基本的な ProGuard をセットアップしようとしています。しかし、APK をエクスポートしようとすると、次のエラーが発生しました。

[2012-06-17 10:59:44 - sc] Proguard returned with error code 1. See console
[2012-06-17 10:59:44 - sc] Unexpected error while performing partial evaluation:
[2012-06-17 10:59:44 - sc]   Class       = [com/amazon/inapp/purchasing/KiwiResponseHandler$PurchaseResponseHandlerRunnable]
[2012-06-17 10:59:44 - sc]   Method      = [run()V]
[2012-06-17 10:59:44 - sc]   Exception   = [java.lang.IllegalArgumentException] (Can't find common super class of [java/lang/String] (with 4 known super classes) and [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes))
[2012-06-17 10:59:44 - sc] java.lang.IllegalArgumentException: Can't find common super class of [java/lang/String] (with 4 known super classes) and [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes)
[2012-06-17 10:59:44 - sc]  at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:344)
[2012-06-17 10:59:44 - sc]  at proguard.evaluation.value.IdentifiedReferenceValue.generalize(IdentifiedReferenceValue.java:65)
[2012-06-17 10:59:44 - sc]  at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:481)
...

デフォルトの ProGuard 構成ファイルがあり、次のものを既に追加しています。

 -dontwarn com.amazon.**
 -keep class com.amazon.** {*;}
 -keepattributes *Annotation*

それに行。何がうまくいかなかったのですか?

4

3 に答える 3

16

Amazonの推奨構成には怪しいものがあります。

1)-dontwarnいくつかの Amazon 固有のライブラリが存在しないが、proguard が上記のスタックトレースを引き起こす可能性のある有線最適化を試みるように参照される、より深い根本的な問題を隠しています。

2)-dontoptimizeすべての最適化を無効にしていますが、これは明らかに間違っています。なぜなら、この問題を引き起こしているのはおそらく 1 つの特定の最適化だけであり、proguards の最適化により、アプリとそのライブラリから大量の未使用のコードが削除されているため、合計が縮小されているためです。デックスサイズ。

1)を修正することが本当の解決策だと思います。これは最終的に、Amazon のシステム ライブラリをデバイスから抽出し
、アプリのビルド中に (提供されたライブラリとして) 存在させることで実現できます。

2) については、次を試すことができます。

-dontwarn com.amazon.**
-keep class com.amazon.** {
    *;
}

-optimizations !code/allocation/variable

これで問題は解決しました。

于 2014-09-30T09:17:51.630 に答える
0

さらに、最適化パスの数を1に減らすか、proguardの最適化ステップをスキップする必要があります。

-optimizationpasses 1

また

-最適化しない

于 2012-06-20T05:32:27.757 に答える