Приложение Proguard для Android для поддержки совместимости LVL и фрагментов - PullRequest
8 голосов
/ 23 мая 2011

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

Я использую библиотеку совместимости с поддержкой Android V4, и кажется, что эта библиотека также сдуваетнекоторые другие вещи.

У кого-нибудь есть proguard.cfg, который для начинающих работает с базовой версией библиотеки v4 compat?

В настоящее время я использую стандартный 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 *;
}

Ответы [ 2 ]

15 голосов
/ 07 августа 2011

Этого недостаточно для создания работающего приложения. Например, 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 ...

8 голосов
/ 25 мая 2011

Чтобы Proguard работал с библиотекой совместимости v4, добавьте это в ваш proguard.cfg:

-dontwarn **CompatHoneycomb
-keep class android.support.v4.** { *; }
...