2012-06-17 4 views
16

Ich versuche, einen grundlegenden Fortschritt mit Amazon iap integriert. Aber wenn ich versuche, meine apk zu exportieren, habe ich die folgenden Fehler:Wie proguard für Amazon iap einrichten?

[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) 
... 

ich die Standard-proguard Konfigurationsdatei haben, und ich habe bereits zugegebene:

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

Linien zu. Irgendwelche Vorschläge, was schief gelaufen ist?

+0

Haben Sie diese Seite ausgecheckt? http://www.amazonappstoredev.com/2012/04/code-obfuscation-for-the-amazon-in-app-purchasing-api.html – Austin

+0

Haben Sie jemals eine Lösung gefunden? –

+0

ähnliche Frage und Antwort: http://stackoverflow.com/questions/26061795/do-not-optimize-a-specific-class-path-with-proguard?lq=1 – nather

Antwort

0

Darüber hinaus müssen Sie auch die Anzahl der Optimierungsdurchgänge auf 1 verringern oder den Optimierungsschritt des Proguard überspringen.

-optimizationpasses 1

oder

-dontoptimize

+3

ProGuard macht grundsätzlich zwei Dinge (verschleiern und optimieren) . Ihre Lösung besteht darin, einen von ihnen zu deaktivieren. Ich bin mir nicht sicher, ob das für Leute akzeptabel ist, die ProGuard erst einmal aktivieren wollen. –

+0

Dies ist nicht wahr. Ich konnte Progard mit Amazon IAP arbeiten mit -optimizationpasses 5. – greg7gkb

+0

@ greg7gkb: Hallo, können Sie mir bitte sagen, was war die Version von Proguard in Ihrer Anwendung? – Ruzanna

14

Per Amazon's SDK Docs, hier sind die Linien sollten Sie umfassen:

Verhindern Verschleierung von In-App-Kauf-API

Wenn Sie die In-App Purchasing API in Ihre Bibliothek integrieren, müssen Sie Klassen angeben, die beibehalten und nicht verdeckt werden sollen. Fügen Sie die folgenden Zeilen irgendwo in Ihrer proguard.cfg Datei hinzu.

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

Darüber hinaus müssen Sie Proguards Optimierungsschritt überspringen.

Hinweis: Stellen Sie sicher, dass alle anderen Flags, die sich mit der Optimierung befassen, oder alle Flags, die mit den obigen Einstellungen in Konflikt stehen könnten, entfernt werden.

+0

Es ist sicher schön, diesen Link zur "primären Quelle" zu haben. – nmr

+0

Wenn ich nur die Standardprogard-android.txt verwende, kann ich meinen Code mit optimierter Optimierung arbeiten lassen. Wenn ich jedoch proguard-android-optimize.txt verwende, muss ich die Optimierung überspringen. Und das Endergebnis ist das gleiche, dh. APK ist dieselbe Größe. – slott

10

Es gibt einige fischige Sachen mit der empfohlenen Konfiguration von Amazon.

1) -dontwarn versteckt ein tiefer liegendes Problem, wo einige Amazon spezifische Bibliotheken nicht vorhanden sind, aber referenziert, so dass Proguard einige verdrahtete Optimierung versuchen wird, die wahrscheinlich das oben erwähnte Stacktrace verursacht.

2) -dontoptimize deaktiviert alle Optimierungen, was definitiv falsch ist, weil es höchstwahrscheinlich nur eine spezifische Optimierung ist, die dieses Problem verursacht, und proguards Optimierungen entfernen viel toten und unbenutzten Code aus Ihrer App und ihren Bibliotheken, so verkleinert es die totale Dex-Größe.

Ich denke, die Fixierung 1) ist die echte Lösung. Dies könnte schließlich erreicht werden, indem Amazons System-Bibliotheken von einem Gerät extrahiert werden und diese (als bereitgestellte Bibliothek) beim Erstellen der App (
) zur Verfügung gestellt werden.

für 2) Sie können versuchen:

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

-optimizations !code/allocation/variable 

die für mich das Problem gelöst.

+0

Dies ist die beste Antwort. Danke für den "Optimierungen! Code/Zuweisung/Variable" Teil, es hat mir eine Menge Zeit erspart. – Steffen

+1

Nun, ich selbst habe einige Zeit damit verbracht, das war also das Mindeste, was ich tun konnte, um die Welt "Zeit, die mit blöden Vertuschungen verbracht wurde" auszugleichen. – joecks

+2

Ich rede mit Amazon über einige Dinge im Moment. Dies wird in meiner nächsten E-Mail als Problem erwähnt. –