2012-06-17 11 views
16

Sto provando a configurare un proguard di base con amazon iap integrato. Tuttavia quando sto cercando di esportare il mio apk, ho ottenuto i seguenti errori:Come impostare proguard per Amazon iap?

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

ho il file di configurazione di default Proguard, e ho già aggiunto il:

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

linee ad esso. Qualche suggerimento cosa è andato storto?

+0

Hai controllato questa pagina? http://www.amazonappstoredev.com/2012/04/code-obfuscation-for-the-amazon-in-app-purchasing-api.html – Austin

+0

Hai mai trovato una soluzione a questo? –

+0

domande e risposte simili: http://stackoverflow.com/questions/26061795/do-not-optimize-a-specific-class-path-with-proguard?lq=1 – nather

risposta

0

Inoltre, è necessario ridurre il numero di passaggi di ottimizzazione a 1 o saltare il passaggio di ottimizzazione di proguard.

-optimizationpasses 1

o

-dontoptimize

+3

ProGuard fondamentalmente fa due cose (offuscare e ottimizzare) . La tua soluzione è disabilitarne uno. Non sono sicuro che sia accettabile per le persone che si sforzano di abilitare ProGuard in primo luogo. –

+0

Questo non è vero. Sono stato in grado di far funzionare proguard con Amazon IAP con -optimizationpasses 5. – greg7gkb

+0

@ greg7gkb: ciao, potresti dirmi qual è stata la versione di proguard nella tua applicazione? – Ruzanna

14

Per Amazon's SDK Docs, qui ci sono le linee che dovrebbero comprendere:

Prevenire Offuscamento di acquisto in-app API

Quando si incorpora l'API di acquisto in-app nella libreria, è necessario specificare le classi da "conservare" e non offuscare. Aggiungi le seguenti righe ovunque nel tuo file proguard.cfg.

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

Inoltre, è necessario saltare il passaggio di ottimizzazione di Proguard.

-dontoptimize 

Nota: assicurarsi di rimuovere eventuali altri flag relativi all'ottimizzazione o qualsiasi flag che potrebbe essere in conflitto con le impostazioni precedenti.

+0

È sicuramente utile avere il link alla "fonte primaria". – nmr

+0

Se utilizzo solo progear-android.txt predefinito, posso ottenere il mio codice lavorando con l'ottimizzazione abilitata. Comunque se uso proguard-android-optimize.txt devo saltare l'ottimizzazione. E il risultato finale è lo stesso vale a dire. L'APK ha le stesse dimensioni. – slott

10

C'è qualche cosa di pesce con la configurazione consigliata di Amazon.

1) -dontwarn nasconde un problema sottostante più profondo, in cui alcune librerie specifiche di Amazon non sono presenti, ma referenziate in modo che Proguard proverà dell'ottimizzazione cablata che probabilmente causa lo stacktrace sopra menzionato.

2) -dontoptimize sta disabilitando tutte le ottimizzazioni, il che è decisamente sbagliato, perché molto probabilmente è solo una ottimizzazione specifica che sta causando questo problema, e le ottimizzazioni proguards stanno rimuovendo un sacco di codice morto e inutilizzato dalla tua app e dalle sue librerie, quindi riduce la dimensione totale di dex.

Immagino che il fissaggio 1) sia la vera soluzione. Questo potrebbe essere alla fine ottenuto estraendo le librerie di sistema Amazons da un dispositivo e rendendole presenti (come una lib di fornitura) mentre si costruisce l'app
.

Per 2) si può provare:

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

-optimizations !code/allocation/variable 

che ha risolto il problema per me.

+0

Questa è la migliore risposta. Grazie per la parte '-optimizations! Code/allocation/variable', mi ha risparmiato un sacco di tempo. – Steffen

+1

beh io stesso ci ho passato un po 'di tempo, quindi questo è stato il minimo che ho potuto fare per ripristinare il mondo "tempo trascorso su stupidi insabbiamenti". – joecks

+2

Sto parlando ad Amazon di alcune cose al momento. Questo sarà sollevato come una preoccupazione nella mia prossima email. –

Problemi correlati