android混淆技巧与反混淆,安卓混淆后反编译,详解Android代码混淆实战

android混淆技巧与反混淆,安卓混淆后反编译,详解Android代码混淆实战 本文主要介绍实战中Android代码混乱的详细解释边肖认为这很好现在分享给大家,给大家一个参考来和边肖一起看看吧 什么是代码混淆: Android SDK自带混淆工具Proguard它位于SDK根目录\tools\proguard下如果开启混淆,默认情况下,Proguard会对所有代码进行混淆,包括第三方包,但有些代码或第三方包是不能混淆的,这就需要我们手动编写混淆规则,保留不能混淆的部分 为什么要混淆: java的优化字节码 减小apk文件的大小将会删除混淆过程中未使用的类和成员 代码安全,它使得类、函数和变量的名字随机变成了无意义的代码名如:a、b、c.诸如此类防止app被反编译,能够轻松理解代码 怎样使用混淆 在app下的build.gradle添加混淆 构建类型{ 发布{ //打开混淆,删除无用代码 minifyEnabled true //打开删除无用资源 shrinkResources true proguardFiles getDefaultProguardFile(' proguard-Android . txt '),' proguard-rules.pro ' } 调试{ //在调试环境中使用模糊处理,以便于调试 签名配置签名配置. debug minifyEnabled false proguardFiles getDefaultProguardFile(' proguard-Android . txt '),' proguard-rules.pro ' 清单占位符=[ //UAT测试环境 GETUI _ APP _ ID:' fzi 793 fjp 9654 lfedpcr 29 ', GETUI _ APP _ KEY:' yrvmzt 4 KTP 65 hqatzbcj 79 ', GETUI _ APP _ SECRET:' alf 186 Rb 617 uj 7 jennub 89 ' ] } } } 在调试环境中使用签名文件可以方便地调试混乱的代码 混淆文件 proguard-rules.pro 常规混淆配置(应用常规) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #代码混淆压缩比,0到7之间,默认值为5,一般不修改 -优化通过5次 #混合时不要使用大小写混合,混合类名小写 -dontusemixedcaseclassnames #指定不忽略非公共库的类 -dontskipnoppubliclibraryclasses #这句话可以混淆我们的项目,生成映射文件 #包含类名和混淆类名之间的映射关系 -冗长 #指定不忽略非公共库的类成员 -dontskipnoppubliclibraryclassmembers #没有预验证,预验证是proguard的四个步骤之一Android不需要preverify去掉这一步会加速混乱 -不要预验证 -不要优化 #在混淆的情况下是否登录 -冗长 -忽略警告 #保持注释不混乱 -keep attributes *批注* #避免混淆泛型 -keepattributes签名 -keepattributes异常,内部类 -don tnote com . Google . vending . licensing . ilicensingservice -don tnote com . Android . vending . licensing . ilicensingservice #抛出异常时保留代码行号 -keepattributes源文件,行号表 -keepattributes已弃用,合成,封闭方法 #在引发异常时重命名文件名 -renamesourcefileattribute源文件 #指定用于模糊处理的算法,以下参数是过滤器 #这个滤镜是Google推荐的算法,一般不变 -优化!编码/简化/转换!field/*,类别/合并/* 需要保留的APP公共部分(通用) 四个主要组成部分和子类; 自定义应用程序; 以下继承了support的子类 r以下资源 本地方法 活动中参数是视图的方法 列举 自定义视图 序列化(可打包、可序列化) 具有回调函数(on*监听器,On事件) 网络视图 ############################################# # # Android开发中需要保留的一些公共部分 # ############################################# #保留我们使用的四个组件、自定义应用程序等这些类不混淆 #因为这些子类都可以从外部调用 -保持公共类*扩展android.app.Activity -保留公共类*扩展android.app.Application -保留公共类*扩展android.app.Service -保持公共类*扩展安卓内容广播收音机 -保持公共类*扩展安卓内容内容提供商 -保持公开课*扩展安卓app后援backupagenthelper -保持公共类*扩展安卓.偏好.偏好 -保持公共类*扩展android.view.View #-保留公共类com安卓售货许可伊利森服务公司 # 保留支持下的所有类及其内部类 ——保持类安卓支持* * { *;} # 保留继承的 -保持公共类*扩展android.support.v4.** -保持公共类*扩展android.support.v7.** -保持公共类*扩展android.support.annotation.** # 保留稀有下面的资源 ——保持阶级**R $ * { *} # 保留本地当地的方法不被混淆 -使用membernames class * { 本机方法; } # 保留在活动中的方法参数是视角的方法, # 这样以来我们在布局中写的onClick就不会被影响 -keepclassmembers类*扩展android.app.Activity{ public void *(安卓查看查看); } # 保留枚举类不被混淆 -保留类成员枚举* { 公共静态* *[]values(); (Java的公共静态* *值郎字符串); } # 保留我们自定义控件(继承自查看)不被混淆 -保持公共类*扩展android.view.View{ * * * get *(); void set *(* * *); 公共init(安卓内容语境); 公共初始化(Android内容语境,安卓utilattributeset); 公共初始化(Android内容context,android.util.AttributeSet,int); } # 保留可包装的序列化类不被混淆 -继续上课*实现android.os.Parcelable { 公共静态最终安卓OSparcelable $ Creator *; } # 保留可序列化序列化的类不被混淆 -keepclassmembers类*实现java.io.Serializable { 静态最终长serialVersionUID 私有静态最终Javaioobjectstreamfield[]serialPersistentFields; !静电!瞬态场; !私有字段; !私有方法; 私有void writeObject(Javaio对象输出流); 私有void读取对象(Javaioobjectinputstream); Java郎对象写替换(); Java郎对象读取解析(); } # 对于带有回调函数的onXXEvent、* * On *侦听器的,不能被混淆 -保留类成员类* { void *(* * On * Event); void *(* * On * Listener); } #网络视图处理,项目中没有使用到网络视图忽略即可 -保留类成员类fqcn的JavaScript界面因为webview { public *; } -keepclassmembers类*扩展android.webkit.webViewClient { public void *(安卓WebKitwebview,java.lang.String,Android图形位图); 公共布尔*(安卓WebKitwebview,Java郎字符串); } -keepclassmembers类*扩展android.webkit.webViewClient { public void *(安卓WebKitwebview,jav郎字符串); 保留自己的项目部分代码不能被混淆(需要更具自己项目) 网络请求(如果混淆,就会发生字段的错乱,无法正常解析) 加密类 数据库实体类 工具类 项目中应用到的第三方工具类(如okhttp,eventbus,rxjava等),需要根据具体的工具介绍进行操作 保留解放运动和编制引用的第三方冲突包不被混淆的方法: java -keep类包名** { *;} 如:保留引用的科大讯飞的第三方冲突包不被混淆 Java-keep类com科大讯飞* * { *;} #网络请求等与外界通信不能混淆 -保持班级通讯xxxxx

。功能。* * .net. * * { *}

-保持班级通讯。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windowsandroid手机版下载,windowsandroid安装apk
  • windowsandroid手机版下载,windowsandroid安装apk,WindowsAndroid 安装教程详解
  • android调用webview方法,androidwebview是什么,Android 中 WebView 的基本用法详解
  • android传感器高级编程,Android传感器,Android编程之光线传感器用法详解
  • android.app.Dialog,android自定义dialog对话框,Android开发笔记之-Dialog的使用详解
  • android 图片视频轮播框架,androidlayout轮播图,Android实现炫酷轮播图效果
  • android里的viewpager,安卓自定义view流程,Android自定义引导玩转ViewPager的方法详解
  • android里的viewpager,android viewpager详解
  • android里的viewpager,android viewpager详解,Android自定义超级炫酷的ViewPage指示器
  • android调用webview方法,androidwebview是什么
  • android设置控件宽度,android获取屏幕宽度和高度
  • android设置控件宽度,android获取屏幕宽度和高度,Android中获取控件宽高的4种方法集合
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程,android蓝牙简单开发示例教程
  • android菜单栏,android菜单控件
  • 留言与评论(共有 条评论)
       
    验证码: