Я хочу запутать мой .apk, и у меня возникают проблемы с Proguard. Использование eclipse я включил это:
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
Я использую 4 внешних libs:
Наверное, у меня проблемы с gson:
private static Type MY_DATA_TYPE = new TypeToken<Pair<Map<Point, Void>, Integer>>() {}.getType();
Каждый раз, когда я его использую:
FATAL EXCEPTION: main java.lang.ExceptionInInitializerError at com.myapp.MyActivity.onCreate(Unknown Source) ... Caused by: java.lang.RuntimeException: Missing type parameter. at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(Unknown Source) at com.google.gson.reflect.TypeToken.<init>(Unknown Source)
Я использую эти параметры, но я думаю, что это не поможет:
-keepattributes Exceptions, InnerClasses, *Annotation*, EnclosingMethod -dontskipnonpubliclibraryclassmembers -libraryjars .../libs/android-support-v4.jar -libraryjars .../libs/nine-old-android-lib.jar -libraryjars .../libs/gson-2.2.2.jar -libraryjars .../libs/commons-io-2.4.jar -keep class java.** { *; } -keep class android.** { *; } -keep class org.** { *; } -keep class com.google.** { *; } -keep class com.facebook.** { *; } -keep class com.nineoldandroids.** { *; }
Как я могу решить эту проблему и создать запутанный .apk, который работает правильно?
Спасибо за ваше время.
Угадайте, что это проблема «gson», вот решение:
-keepattributes Signature -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.examples.android.model.** { *; }
Благодаря https://groups.google.com/forum/#!topic/google-gson/6XuHfOoZIKo
Конфигурация Proguard, как показано в примере google gson proguard.
Ссылка на конфигурацию google gson proguard
##---------------Begin: proguard configuration for Gson ---------- # Gson uses generic type information stored in a class file when working with fields. Proguard # removes such information by default, so configure it to keep all of it. -keepattributes Signature # For using GSON @Expose annotation -keepattributes *Annotation* # Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { *; } # Prevent proguard from stripping interface information from TypeAdapterFactory, # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer ##---------------End: proguard configuration for Gson ----------