2012-06-17 5 views
16

Estoy tratando de configurar un soporte básico con amazon iap integrado. Sin embargo, cuando estoy tratando de exportar mi apk, tengo los siguientes errores:¿Cómo configurar Proguard para 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) 
... 

tengo el archivo de configuración por defecto Proguard, y ya he añadido el:

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

líneas a la misma. ¿Alguna sugerencia de lo que salió mal?

+0

¿Has echado un vistazo a esta página? http://www.amazonappstoredev.com/2012/04/code-obfuscation-for-the-amazon-in-app-purchasing-api.html – Austin

+0

¿Alguna vez encontró una solución para esto? –

+0

pregunta y respuesta similar: http://stackoverflow.com/questions/26061795/do-not-optimize-a-special-path-path-with-proguard?lq=1 – nather

Respuesta

0

Además, también deberá reducir el número de pases de optimización a 1, o omitir el paso de optimización de proguard.

-optimizationpasses 1

o

-dontoptimize

+3

ProGuard básicamente hace dos cosas (ofuscar y optimizar) . Su solución es desactivar uno de ellos. No estoy seguro de que sea aceptable para las personas que se esfuerzan por habilitar ProGuard en primer lugar. –

+0

Esto no es verdad. Logré que Proguard trabajara con Amazon IAP con -optimizationpasses 5. – greg7gkb

+0

@ greg7gkb: hola, ¿podría decirme cuál era la versión de proguard en su aplicación? – Ruzanna

14

por Amazon's SDK Docs, aquí están las líneas que debe incluir:

La prevención de la ofuscación de Compras In-App API

Al incorporar la API de compras en la aplicación en su biblioteca, deberá especificar clases para 'mantener' y no ofuscar. Agregue las siguientes líneas en cualquier lugar de su archivo proguard.cfg.

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

Además, también deberá saltear el paso de optimización de Proguard.

-dontoptimize 

Nota: Asegúrese de eliminar cualquier otra bandera que se ocupan de la optimización, o cualquier bandera que puede entrar en conflicto con los valores anteriores.

+0

Seguro que es bueno tener ese enlace a la "fuente primaria". – nmr

+0

Si solo uso el archivo predeterminado proguard-android.txt puedo hacer que mi código funcione con la optimización habilitada. Sin embargo, si uso proguard-android-optimize.txt, debo omitir la optimización. Y el resultado final es el mismo, es decir. APK es del mismo tamaño. – slott

10

Hay algunas cosas sospechosas con la configuración recomendada de Amazon.

1) -dontwarn está ocultando un problema subyacente más profundo, donde algunas bibliotecas específicas de Amazon no están presentes, pero se hace referencia para que proguard pruebe alguna optimización con cable que probablemente provoque el stacktrace mencionado anteriormente.

2) -dontoptimize está deshabilitando todas las optimizaciones, lo cual es legítimamente incorrecto, porque probablemente sea solo una optimización específica la que esté causando este problema, y ​​las optimizaciones están eliminando una gran cantidad de código muerto y no usado de su aplicación y sus bibliotecas. por lo que reduce el tamaño total de dex.

Supongo que arreglar 1) es la solución real. Esto podría lograrse eventualmente extrayendo las libs del sistema Amazons desde un dispositivo y hacerlas presentes (como una lib proporcionada) mientras construyes la aplicación
.

Para 2), puede intentar:

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

-optimizations !code/allocation/variable 

que resolvió el problema para mí.

+0

Esta es la mejor respuesta. Gracias por la parte '-optimizations! Code/allocation/variable', me ahorró mucho tiempo. – Steffen

+1

Bueno, yo mismo dediqué un tiempo a eso, así que eso fue lo menos que pude hacer para restablecer el equilibrio del "tiempo pasado en encubrimientos estúpidos". – joecks

+2

Estoy hablando con Amazon sobre algunas cosas en este momento. Esto se planteará como una preocupación en mi próximo correo electrónico. –

Cuestiones relacionadas