Как настроить proguard для amazon iap?

Я пытаюсь создать базовую proguard с интегрированным amazon iap. Однако, когда я пытаюсь экспортировать 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*

. Любое предположение, что пошло не так?

Ответы

Ответ 1

Per Amazon SDK Docs, вот строки, которые вы должны включить:

Предотвращение обфускации API закупок приложений

Когда вы включаете API-интерфейс покупки приложений в свою библиотеку, вам нужно будет указать классы на "держать" и не запутывать. Добавьте следующие строки в файл proguard.cfg.

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

Кроме того, вам также нужно будет пропустить шаг оптимизации Proguard.

-dontoptimize

Примечание. Обязательно удалите любые другие флаги, связанные с оптимизацией, или любой флаг, который может конфликтовать с указанными выше параметрами.

Ответ 2

Есть несколько рыбных вещей с рекомендуемой конфигурацией Amazon.

1) -dontwarn скрывает более глубокую проблему, в которой некоторые конкретные библиотеки Amazon отсутствуют, но на них ссылаются так, что proguard попытается провести некоторую проводную оптимизацию, которая, вероятно, приведет к вышеупомянутой stacktrace.

2) -dontoptimize отключает все оптимизации, что является defenitivly неправильным, потому что это, скорее всего, только одна конкретная оптимизация, которая вызывает эту проблему, а оптимизация proguards удаляет много мертвого и неиспользуемого кода из вашего приложения и его библиотек, поэтому он уменьшает общий размер dex.

Я полагаю, что исправление 1) является реальным решением. Это может быть в конечном итоге достигнуто путем извлечения системных библиотек Amazons с устройства и их представления (как предоставленного lib) при построении приложение.

Для 2) вы можете попробовать:

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

-optimizations !code/allocation/variable

который решил проблему для меня.

Ответ 3

Кроме того, вам также нужно будет уменьшить количество проходов оптимизации до 1 или пропустить шаг оптимизации proguard.

-optimizationpasses 1

или

-dontoptimize