2013-07-02 3 views
3

Я хочу обфускать мой .apk, и у меня возникают проблемы с Proguard. Использование Eclipse Я включил этот:Android Proguard ExceptionInInitializerError и RuntimeException

# 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:

  • андроид-поддержка-v4.jar
  • девять-старый андроид-lib.jar
  • gson-2.2.2.jar
  • Обще-ю-2.4.jar

Я предполагаю, что у меня возникают проблемы с 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, которая работает правильно?
Спасибо за ваше время.

+0

Я использую ... Тип Тип = новый TypeToken >>() {} .getType(); .. который дает мне этот список, но я получаю объект Station null, что мне делать –

ответ

7

Guess это 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

+0

Я использую ... Тип type = new TypeToken >>() {} .getType(); .., который дает мне этот список, но я получаю объект Station null, что я должен делать –

+0

Создайте новую тему с вашим вопросом и некоторые примеры кода и вывод ошибок, чтобы мы могли предоставить вам качественную помощь. – GuilhE

+0

да, я создал один http://stackoverflow.com/questions/35539960/how-to-get-release-build-apk-file-using-proguard, видимо, я не могу получить объяснение о том, что происходит не так и как его исправить –

1

конфигурации Proguard, как показано на примере Google gson Proguard.

google gson proguard configuration link

##---------------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 ---------- 
Смежные вопросы