android混淆操作及相关问题

    在project.properties文件中有这样一段话:

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt


   把#号去掉,打开文件,在sdk根目录中找到proguard-android.txt文件拷贝到工程根目录上。


把上面那段话缩减成:

proguard.config=proguard-android.txt

这样混淆配置就完成了。


    如果工程中有第三方jar包(如有米,友盟之类的),混淆后生成apk会报错,因为它们已经混淆过了。需要在proguard-android.txt中加入以下信息。

-dontwarn net.youmi.android.** //不要警告我和有米相关的一些信息, .**表示后面是一个包
-dontwarn net.youmi.android.*.*  //*.*表示是所有的包
-keep class net.youmi.android.**{ //保留有米相关的class
	*;
}

    混淆时,什么报错,就把什么保存下来。


    打包apk后,在工程目录的proguard目录中有混淆的配置信息

    在mapping.txt中,一看就明白。因为混淆后会把方法明变短,所以apk体积会变小。

    四大组件不会被混淆(在清单文件AndroidManifest.xml中出现的不会被混淆)。


注意:混淆成功后的 apk不一定能用。

    如果项目里有一些特殊逻辑,可能会出问题。比如代码里用到了反射数据库的逻辑,根据业务bean反射数据库,因为混淆后bean里的字段会改变,

则业务bean不能被混淆。


Android下的默认混淆配置文件:proguard-android.txt

-dontusemixedcaseclassnames //不要使用混合大小写的类名
java严格区分大小写,windows下不区分
-dontskipnonpubliclibraryclasses //不要跳过非公有的函数库里的字节码
-verbose //混淆后打印日志输出,proguard里的四个文件就用这个控件的
       mapping.txt是混淆排错的依据。很重要,不要弄丢,更不要泄露。


-dontoptimize
-dontpreverify
     对混淆代码的优化,如果不加,就会把相同的静态字符串合并,或者删除工程中没有用到的方法。但工程中有的方法是回调函数,不应该被删除。

所以默认用这两句话。


-keepattributes *Annotation* //保留代码中的注解
    如果没有,工程可能会出错。比如用了xUtils的注解获取id,如果去掉,会出错。

-keepclasseswithmembernames class * {
    native <methods>;
} //保留jni的native方法映射

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}//保留枚举类型

-keepclassmembers class **.R$* {
    public static <fields>;
}//保留进程间通信的.R文件


以上的文件都不用改。根据项目需要在后面加东西,比如bean文件 MobileInfo 需要保留,则在后面写上

-keep class com.haha.bean.MobileInfo // -keep class 全类名
 

    要保留jar包则参照

-dontwarn net.youmi.android.** //不要警告我和有米相关的一些信息, .**表示后面是一个包
-dontwarn net.youmi.android.*.*  //*.*表示是所有的包
-keep class net.youmi.android.**{ //保留有米相关的class
    *;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值