2016-09-16 41 views
2

由於我反編譯了我的應用程序,我注意到所有成員,類都易於閱讀和理解,所以我的目標是讓反編譯的人更難該應用程序,閱讀代碼。Android Studio Gradle proguard - 僅模糊實際的應用程序代碼而不是第三個庫

第一步我所做的是改變我graddle文件:

release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-myapp.txt' 
     } 

文件proguard-myapp.txt位於我的項目。

我的項目使用以下:

dependencies { 
    compile 'com.android.support:support-v4:24.2.1' 
    compile 'com.android.support:design:24.2.1' 
    compile 'com.google.code.gson:gson:2.4' 
    compile 'com.android.support:appcompat-v7:24.2.1' 
    compile 'com.google.android.gms:play-services-ads:9.2.1' 
    compile 'com.github.lecho:hellocharts-library:[email protected]' 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
} 

我不停地打與ProGuard的規則,但我越考越失控。

我已經添加了以下規則:

-dontshrink 
-dontoptimize 

#charts 
-keep class lecho.lib.hellocharts.** { *; } 

#support library 
-dontwarn android.support.** 
-keep class android.support.** { *; } 

#ads 
-keep public class com.google.android.gms.ads.** { 
    public *; 
} 

-keep public class com.google.ads.** { 
    public *; 
} 

#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 



#Crashlytics 
-keep class com.crashlytics.** { *; } 
-dontwarn com.crashlytics.** 
-keep class io.fabric.sdk.** { *; } 

我的問題是:

  1. 是否有可能只是混淆/優化或不管它是所謂的,只是我實際使用的文件在應用程序中,我寫的那些,離開所有其他庫,因爲它們是?我的意思是,只有重命名,優化我的類和我的文件,忽略crashlytics,admob,支持庫?

2.我曾試圖加入,因爲只有規則:

-keep class !com.mypackage.**{*;} 

雖然代碼看起來在反編譯罰款,應用程序不能正常工作。

回答

1

這可能不是一個正確的答案,但我發現我編譯的應用程序無法正常工作的原因。

經過很多試圖找出錯誤的地方,我終於找到了工作。 GSON,因爲它似乎在這個答案https://stackoverflow.com/a/30982197/379865需要有這些類保持正常工作。 保留我的類與Gson相關的對象後,它的作品。

相關問題