2016-09-16 5 views
2

私のアプリを逆コンパイルしたので、すべてのメンバークラスが読みやすく理解しやすいことに気付きました。アプリ、コードを読み取る。AndroidスタジオGradle Proguard - 3番目のライブラリではなく実際のアプリケーションコードのみを難読化します

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

ファイルproguard-myapp.txt私のプロジェクトに配置されています。

私がした最初のステップは、私のgraddleファイルを変更することでした。

私のプロジェクトは、以下を使用します。

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. は、それは私が実際に使用したファイルのみ、唯一の最適化/難読化するか、それが呼ばれるものは何でも可能ですアプリケーションでは、私は書いたものをそのまま残り、他のすべての図書館をそのまま残していますか?名前を変更したり、クラスとファイルを最適化したり、クラッシュ・サイクリング、admob、サポート・ライブラリを無視するだけですか?

2.Iは唯一のルールとして追加しようとしている:

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

コードはデコンパイルの罰金見えますが、アプリが正常に動作しません。

答えて

1

これは適切な答えとは思われないかもしれませんが、私のコンパイルされたアプリが動作しなかった理由がわかりました。

何が間違っているかを見つけようと多くの試みをした後、ついにそれが機能しました。 GSONこれはこの回答のようです。https://stackoverflow.com/a/30982197/379865は正常に動作するためにはクラスを保持する必要があります。 Gsonに関連するオブジェクトのためのクラスを維持した後、それは動作します。

関連する問題