安卓实现代码混淆

现在强烈建议使用eclipse编程的小伙伴

赶紧换成Android Studio吧 不然你真的被甩出十万八千里了

下面我们开始介绍代码混淆 首先我们要知道为什么要混淆代码:
其实在项目中基本上所有项目都是开启混淆的
1:能提高代码的反编译难度
2:代码压缩及资源压缩的一个优化过程
3:还有有助于避免64k方法数的瓶颈
4:将类,类成员、方法重命名为无意义的简短名称,增加了逆向工程的难度
5:还可以有效减少APK的大小

本人今天详细介绍如何进行混淆和混淆需要注意的事项:

我们在自己动的项目中:可以找到
buildTypes {
release {
//这句话的意思呢就是如果咱们设置为 ture的话就是开启混淆 如果是false就不开启混淆
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’

//这句话的 主要 是设置混淆过程中压缩资源文件 因为这句话只有开启混淆后才会有效
//打开资源压缩。
// shrinkResources true
} }

那我们还有需要进行一步 就是配置我们所需要混淆的地方 和不需要混淆的地方:

在我们的项目中 src下会有一个proguard-rules.pro这个文件 我们打开这个文件在这里进行我们的混淆配置

#指定压缩级别
-optimizationpasses 5

#不跳过非公共的库的类成员
-dontskipnonpubliclibraryclassmembers

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

#把混淆类中的方法名也混淆了
-useuniqueclassmembernames

#优化时允许访问并修改有修饰符的类和类的成员 
-allowaccessmodification

#将文件来源重命名为“SourceFile”字符串
-renamesourcefileattribute SourceFile
#保留行号
-keepattributes SourceFile,LineNumberTable

#保持所有实现 Serializable 接口的类成员
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

#Fragment不需要在AndroidManifest.xml中注册,需要额外保护下
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment

# 保持测试相关的代码
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**

真正通用的、需要添加的就是上面这些,除此之外,需要每个项目根据自身的需求添加一些混淆规则:
第三方库所需的混淆规则。正规的第三方库一般都会在接入文档中写好所需混淆规则,使用时注意添加。
在运行时动态改变的代码,例如反射。比较典型的例子就是会与 json 相互转换的实体类。假如项目命名规范要求实体类都要放在model包下的话,可以添加类似这样的代码把所有实体类都保持住:-keep public class .Model. {*;}
JNI中调用的类。
WebView中JavaScript调用的方法
Layout布局使用的View构造函数、android:onClick等。

我们在配置完这些以后就可以打包一下APK了:
我们在打包完事后:可以app包名下面看到紧跟着的build文件将其打开找到outputs文件 打包完成后会在下面生成
dump.txt
描述APK文件中所有类的内部结构
mapping.txt
提供混淆前后类、方法、类成员等的对照表
seeds.txt
列出没有被混淆的类和成员
usage.txt
列出被移除的代码
这几个文件 我们可以根据seeds.text文件检查未被混淆的类和成员中是否已包含所有期望保留的,
再根据 usage.txt 文件查看是否有被误移除的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值