Приложение Proguard для Android для поддержки совместимости с LVL и фрагментами

#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.** { *; }