2016-10-14 5 views
6

私のアプリケーションにはいくつかのライブラリがあり、minifyEnabledtrueの後にはAPKを生成できません。いくつかの研究の後で、私は規則を見つけて.proファイルに1つずつ追加します。ここで アンドロイドのproguardルールを設定すると、コードを暗号化できますか?

はJARのライブラリリスト

compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:23.1.0' 
compile 'com.squareup.picasso:picasso:2.3.2' 
compile 'com.nineoldandroids:library:2.4.0' 
compile 'com.daimajia.slider:library:[email protected]' 
compile 'org.apache.httpcomponents:httpmime:4.3.5'//Volley 
compile 'org.apache.httpcomponents:httpcore:4.2.4'//Volley 
compile 'com.mcxiaoke.volley:library:1.0.17'//Volley 
compile 'com.github.bumptech.glide:glide:3.6.1'//Gradle 
compile 'com.baoyz.swipemenulistview:library:1.3.0'//Swipe Menu li stview 
compile 'org.lucasr.twowayview:twowayview:0.1.4' //horizontal listview 
compile 'com.android.support:recyclerview-v7:+' 

あり、それは私はそれはいくつかのライブラリとして、ライブラリのいずれかによって、ルール1を追加しないようにすることができるだろう、要するにPayPalAndroidSDK-2.9.11.jar

ですそれらのためのproguardを設定する方法について言及していないようですか?コードを最適化する代わりに暗号化して、便利なコードをストライプ化できますか?

ありがとうございます。私は疑問に思う

+1

Proguardはコードを暗号化しません**。暗号化機能はありません。 –

+1

ご迷惑をおかけして申し訳ありませんが、暗号化コードの代わりにコードを難読化する必要があります – user782104

+2

https://github.com/yongjhih/android-proguardsやhttps://github.com/krschultz/android-proguard-snippetsを使用することはどうですか? –

答えて

8

は、それはいくつかのライブラリは、彼らのためにどのようにセットアップ ProGuardのについて言及していないようだと、ルール ライブラリの一つ一つを追加しないようにすることができますか?

はい可能ですが、プロジェクトで使用したライブラリごとにルールを1つずつ追加することはできません。 proguard-rules.proファイルに次を追加してみてください。

-keep class !com.example.myproject.** { *; } 

あなたのproguard-rules.proで使用する正規表現をネゲーターに置きます。

しかし、コードを難読化していない場合は、プロガードの使用のポイントは何ですか。難読化した後、プロジェクトのクラスの一部を変更しないでください。他のライブラリと同じように保つ必要があります。たとえば、 -

とにかく、難読化しながら、より多くのコントロールを持つように、そのルールを1つずつ追加するのは難しくありません。ここに私のproguard-rules.proがあります。あなたはそれを見ることができます。

-useuniqueclassmembernames 
-allowaccessmodification 
-keep class com.google.** { *; } 
-keep class com.journeyapps.** { *; } 
-keep class com.makeramen.** { *; } 
-keep class com.github.** { *; } 
-keep class org.apache.** { *; } 
-keep class com.flipboard.** { *; } 
-keep class com.android.** { *; } 
-keep class com.mikepenz.** { *; } 
-keep class junit.** { *; } 
-keep class org.mockito.** { *; } 
-keep class android.support.v7.widget.SearchView { *; } 
-keep class com.example.myproject.Models.** { *; } 
-keepclassmembers class com.example.myproject.Model.** { *; } 

-keepattributes Signature 
-keepattributes *Annotation* 

-dontwarn com.google.** 
-dontwarn org.apache.** 
-dontwarn android.support.** 
-dontwarn org.junit.** 
-dontwarn org.mockito.** 
-dontwarn com.makeramen.** 

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** v(...); 
    public static *** w(...); 
    public static *** i(...); 
    public static *** e(...); 
} 
1

最小化せずに難読化したい場合は、-dontshrinkオプションを使用できます。 @Reaz Murshedが彼の答えで行った議論のように、各ライブラリのためにproguardを正しく設定することは貴重な時間です。時には迷惑な作業になることもありますが、シャルニングは小規模なAPKでメリットをもたらし、メソッド数を削減します。

3

プロガードルールを追加しないでください。アプリやそのライブラリの一部がリフレクション、ジェネリックス、依存性注入、または任意の形式のソフト/間接参照を使用すると、アプリがクラッシュします。だから一番良い選択肢は、アプリを一度構築し、それをすべてテストし、何かがkaboomになったかどうかを確認することです。存在する場合は、各ライブラリのプロガード参照を追加します。ライブラリに推奨されていない設定がある場合は、問題のクラスを辞書のlogcatから調べます(outputs/proguard)。

関連する問題