#android #proguard #android-fragments #android-lvl #android-support-library
#Android #proguard #android-фрагменты #android-lvl #android-поддержка-библиотека
Вопрос:
Я пытаюсь использовать Proguard в своем приложении, которое в конечном итоге будет включать LVL и выставление счетов в приложении. Проблема, с которой я сталкиваюсь, заключается в том, что Proguard продолжает сбой моего приложения при запуске, и трудно понять, что не удается.
Я использую библиотеку совместимости с поддержкой Android версии 4, и, похоже, она уничтожает эту библиотеку, а также некоторые другие материалы.
Есть ли у кого-нибудь proguard.cfg, который для начала работает с базовой версией библиотеки совместимости v4?
В настоящее время я использую стандартный файл proguard.cfg, который не работает.
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
Ответ №1:
Этого недостаточно для создания рабочего приложения.. proguard, например, удалит все ваши фрагменты по умолчанию, и есть еще несколько подходящих. библиотеки, которые оно использует.
Я нашел следующие работы:
-dontwarn **CompatHoneycomb
-dontwarn **CompatHoneycombMR2
-dontwarn **CompatCreatorHoneycombMR2
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
Теоретически, если вы просто хотите использовать proguard в качестве обфускатора и не заинтересованы в других его «функциях», то
-dontshrink
-dontoptimize
Следует отключить его. Несмотря на это, тщательно протестируйте на реальном телефоне Android 1.6. Я этого не сделал и обнаружил слишком поздно, что proguard внес критические изменения в двоичный файл, которые проявились только в версии 1.6…
Ответ №2:
Чтобы Proguard работал с библиотекой совместимости v4, добавьте это в свой файл proguard.cfg:
-не предупреждайте ** CompatHoneycomb -сохранить класс android.support.v4.** { *; }