Android菜鸟练习第三十课 代码混淆

混淆代码的作用:毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有app都应该开启混淆,首先,这里说的混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程。一卡ProGuard混淆流程将主项目以及依赖库中未被使用的类、类成员、方法、属性移除,这有助于规避64K方法数的平静;同事,将类、类成员、方法重命名为无意义的剪短名称,增加了逆向工程的难度。而依靠Gradle的Android插件,我们将移除未被使用的资源,可以有效减少apk安装包的大小

混淆代码步骤如下:

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

buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
第二步 在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 <methods>;  
}  
-keepclasseswithmembers class * {   # 保持自定义控件类不被混淆  
    public <init>(android.content.Context, android.util.AttributeSet);  
}  
-keepclasseswithmembers class * {# 保持自定义控件类不被混淆  
    public <init>(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 *;  
}  

第三步 通过Android Studio进行混淆代码时,默认已将lib目录中的jar都已经添加到打包的脚本中,所以不需要再次手动添加,否则会出现"java.io.IOException:The same input jar is specified twice"错误 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值