Android Studio实现代码混淆 配置详解

1.参考资料 https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html 官方文档及网上博客 最近的项目总结

2. Android Studio(以后简称AS)  下默认有proguard-project.txt ,为混淆的配置文件 配置路径在该工程下的gradel中。实际为一个  proguard 

3混淆对象  proguard默认是所有文件均进行混淆

在下列情况一般不进行混淆 :

a 四大组件、support包(一般v4、v7) 

b 资源文件、r文件

c js调用

d 反射和调用反射的类

e jni调用

f so库、jar包(一般来说已经进行了混淆) 

4.基本语法 由于网上资料均 省略这一部分 本文给出重要部分:

a. 通配符 与Java类似  *-》代表匹配所有字符   **表示该包类所有类及其子路径的类

b. 如果保持一个类不混淆-keep  class 类名 {*;}  类名是全名(包含包名)   

c. 保持一个类的子类不被混淆   -keep * extends 类名 { *;} 跟java很像是不是?

e. 保持一个类的单个方法不变 -keepclassmembers class 类名 {可含有通配符的方法名}

f. 保持含有某个方法的类不被混淆 -keepclasseswithmembers class 类名 {可含有通配符的方法名}

详见https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/usage.html

5 其他

 a.optimize是否采用算法进行压缩

  b. shrink是否删除unused(未使用文件)这个要小心如反射等

  c-libraryjars为导入的jar包、so库 (只是导入) gradel有些已经配置 就会报一个 ....twice 的错

 d 关闭混淆 dontobfuscate


ps :开启混淆 在build.gradel 中开启:buildTypes --》release--》 minifyEnabled true





Android Studio实现代码混淆

时间: 2015-07-22 13:04:29      阅读: 35743      评论: 0      收藏: 0       [点我收藏+]

标签:android-studio

1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txt

buildTypes {
  release {
    signingConfig signingConfigs.release
    minifyEnabled true
    proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro
  }
}

2,在proguard-rules.pro中加入以下代码,基本可以涵盖所有

-optimizationpasses 5          # 指定代码的压缩级别
-dontusemixedcaseclassnames   # 是否使用大小写混合
-dontpreverify           # 混淆时是否做预校验
-verbose                # 混淆时是否记录日志

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法

-keep public class * extends android.app.Activity      # 保持哪些类不被混淆
-keep public class * extends android.app.Application   # 保持哪些类不被混淆
-keep public class * extends android.app.Service       # 保持哪些类不被混淆
-keep public class * extends android.content.BroadcastReceiver  # 保持哪些类不被混淆
-keep public class * extends android.content.ContentProvider    # 保持哪些类不被混淆
-keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆
-keep public class * extends android.preference.Preference        # 保持哪些类不被混淆
-keep public class com.android.vending.licensing.ILicensingService    # 保持哪些类不被混淆

-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
    native ;
}
-keepclasseswithmembers class * {   # 保持自定义控件类不被混淆
    public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {# 保持自定义控件类不被混淆
    public (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆   
    public void *(android.view.View);
}
-keepclassmembers enum * {     # 保持枚举 enum 类不被混淆    
    public static **[] values();    
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆  
    public static final android.os.Parcelable$Creator *;
}

3,通过 Android Studio进行 混淆代码时,默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加,否则会出现“ java.io.IOException: The same input jar is specified twice” 错误。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android Studio实现代码混淆

标签:android-studio

原文:http://blog.csdn.net/bjstyle/article/details/47001277





你可能感兴趣的:(Android开发)