2016-10-14 28 views
6

我在我的应用程序使用的几个库,后minifyEnabledtrue,它不能生成APK。经过一番研究后,我找到了规则,并将它们逐个添加到.pro文件中。在android中设置proguard规则,它只是加密代码?

这里是库列表

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:+' 

对于JAR,它是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的又在哪里?

是可能的,不要为您在项目中使用的每个库逐一添加规则。尝试在您的proguard-rules.pro文件中添加以下内容。

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

的想法是简单地把一个否定器就在你proguard-rules.pro使用正则表达式。

但是,什么是使用ProGuard如果你不混淆你的代码点。混淆后,您可能希望保持项目中的某些类不变。你只需要像其他库一样保持它们。例如 -

// I want to keep the classes in the `Models` package to remain unchanged 
-keep class com.example.myproject.Models.** { *; } 
-keepclassmembers class com.example.myproject.Model.** { *; } 

无论如何,它不是很难添加规则逐一你就会有更多的控制权,而混淆。这是我的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和更少的方法计数方面,shirnking提供了实实在在的好处。

3

您可以只是不添加任何proguard的规则,但如果应用程序或其库的某一部分使用反射,泛型,依赖注入或任何形式的软/间接引用,应用程序会崩溃。所以最好的选择是构建应用程序一次,测试所有的应用程序,并检查是否有事情发生。如果是这样,请为每个库添加proguard引用。如果库没有任何推荐的配置,请从字典中的logcat中检查受影响的类(outputs/proguard)。