Как настроить 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