2017-02-14 154 views
1

有没有一种方法可以跳过混淆Volley和Gson的程序,包括使用它们的类?Gson和Volley的Proguard问题

我的build.gradle文件:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 
    useLibrary 'org.apache.http.legacy' 

    defaultConfig { 
     applicationId "com.myawesomeapp" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.0' 
    compile 'com.android.support:design:23.1.0' 
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' 
    compile 'com.google.android.gms:play-services-appindexing:8.1.0' 
} 

这里Proguard的配置:

# Add project specific ProGuard rules here. 
# By default, the flags in this file are appended to flags specified 
# in /home/starsilver/Android/Sdk/tools/proguard/proguard-android.txt 
# You can edit the include path and order by changing the proguardFiles 
# directive in build.gradle. 
# 
# For more details, see 
# http://developer.android.com/guide/developing/tools/proguard.html 

# Add any project specific keep options here: 

# If your project uses WebView with JS, uncomment the following 
# and specify the fully qualified class name to the JavaScript interface 
# class: 
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { 
# public *; 
#} 

-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 

-keep class com.android.volley.** { *; } 
-keep class org.apache.commons.logging.** 

-keepattributes *Annotation* 

-dontwarn org.apache.** 

-dontwarn com.itextpdf** 

错误返回乱射:

Warning: com.android.volley.toolbox.Volley: can't find referenced class android.net.http.AndroidHttpClient 
Warning: com.android.volley.toolbox.Volley: can't find referenced class android.net.http.AndroidHttpClient 

注:

  • 应用工作良好,没有proguard的。

  • 签名APK使用ProGuard但类生成用乱射+ GSON仍然没有工作

回答

0

你要修改的ProGuard。

对于GSON使用Gson github config

-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 

对于凌空使用本:

-keep class com.android.volley.** { *; } 
-keep class org.apache.commons.logging.** 

-keepattributes *Annotation* 

-dontwarn org.apache.** 

Volley seems not working after ProGuard obfuscate

+0

谢谢你的回答,但类仍然没有工作!没有使用Proguard的工作,只要我使用它并混淆了应用程序,这个类不起作用。 –

+0

你可以将你的proguard配置包含到问题中吗? – Stefan

+0

我做了那个先生,谢谢。 –