Android 代码混淆、过滤与警告处理

来源:互联网 发布:朗读软件手机版 编辑:程序博客网 时间:2024/06/01 09:40

混淆配置中碰到的问题我整理在本博文评论部分,也希望大伙能帮忙补充

混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。同时混淆是不可逆的。

混淆配置

在不介绍eclipse工具中的混淆方法,仅涉及Android studio 中混淆配置。

build.gradle中的配置信息:其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替(比如eclipse常用的 proguard-project.txt)


你也可以通过界面进行配置工程右键菜单“open model setting”


混淆的结果展示



混淆配置文件proguard-rules.pro



在proguard-rules.pro中加入以下代码,基本可以涵盖所有。(注意:#younghare注释部分是我的xposed插件配置,你可以不需要这部分代码)

# Add project specific ProGuard rules here.

# By default, the flags in this file are appended to flags specified

# in D:\android_sdk\sdk/tools/proguard/proguard-android.txt

# You can edit the include path and order by changing the proguardFiles

# directive in build.gradle.

#

# For more details, see

# http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following

# and specify the fully qualified class name to the JavaScript interface

# class:

#-keepclassmembers class fqcn.of.javascript.interface.for.webview {

# public *;

#}

-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 # 保持哪些类不被混淆

-keep public class hd.com.xposeddemo.xposed.XMoudleWechatApp #youngcat (xposed插件入口模块)

-keep public class hd.com.xposeddemo.xposed.XMoudleMyself #youngcat (xposed插件入口模块)

-keep public class hd.com.xposeddemo.activity.CheckSetupActivity {*; } #younghare(类内不混淆,xposed自检模块入口

-keep class org.apache.commons.** {*; } #younghare

-keep class org.apache.mina.** {*; }#younghare

-keep class org.slf4j.** {*; }#younghare

-dontwarn org.dom4j.** #younghare (过滤警告信息)

-dontwarn org.apache.** #younghare

-dontwarn org.jdom2.** #younghare

-dontwarn org.jdom2.** #younghare

-dontwarn org.slf4j.** #younghare

-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 *;

}

studio中混淆代码时报错处理

Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForReleaseMinifyEnabled'.

> java.io.IOException: Please correct the above warnings first.

这个问题是在说你在混淆打包的时候有些类有可能找不着,所以会报错,和warning

解决的办法:

找到报warning的类都给他在你的proguard-rules.pro混淆器文件中

添加代码-dontwarn 包名+类名.**给取消掉warning就可以了,如果你不想那个类被混淆,那就添加代码:-keep class 包名+类名{*;}或者包名.**{*;}

-dontwarn org.dom4j.** -dontwarn org.bouncycastle.** -dontwarn org.apache.commons.logging.impl.** -keep class com.ObjBlockCipherParam{ *; } -keep class org.apache.commons.logging.impl.**{*;}



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


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为g9青春版耗电快怎么办 华为手机摄像头坏了怎么办 华为p10摄像头玻璃划痕怎么办? 华为g9手机音量小怎么办 华为7pius太卡怎么办 华为畅享7plus卡怎么办 华为p9屏幕进水变颜色怎么办? 玩王者荣耀卡退怎么办 华为手机忘记开机密码怎么办 华为p9密码忘了怎么办 华为p9解锁密码忘了怎么办 华为手机不支持联通4g怎么办 酷派手机自动下载软件怎么办 小米5a不能开机怎么办 华为手机的视频找不到了怎么办 华为p8内存文件打不开怎么办 华为荣耀9网速慢怎么办 荣耀9手机网速慢怎么办 联想台式机不支持xp驱动怎么办 一体机尾插坏了怎么办 华为手机触屏失灵怎么办 华为p8max手机老是卡怎么办 手机屏碎了数据怎么办 华为p9屏碎了怎么办 华为p7一l09卡顿怎么办 华为p7打不开机怎么办 华为8主板坏了怎么办 华为手机主板坏了怎么办 华为p9文字变英文了怎么办 华为p9plus电池不耐用怎么办 华为mate8手机音量小怎么办 同花顺自选股更新不显示怎么办 华为麦芒定频了怎么办 用线刷宝刷机失败开不了机怎么办 红米手机拨号后黑屏怎么办 sim卡丢了激活码怎么办 电信sim卡未激活怎么办 小米5c老是黑屏怎么办 小米4x黑屏了怎么办 金立s10经常卡屏怎么办 x9来电屏幕不亮怎么办