首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ProGuardAndroid 使用姿势

减少体积好处有很多,比如增加用户黏性和满意度,提升下载速度,减少安装时间,以便在终端设备连接用户,尤其是在新兴市场。...如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多优化效果: 在一些版本 Android 设备,DEX 代码会在安装或者运行时被编译成机器码。...ProGuard 除了可以大幅减少代码空间之外,还可以让所有的标识符(和成员)都使用更短名字,如 a.A 和 a.a.B。这个过程就是混淆。...当您只从 XML 资源引用您代码会时(通常使用底层反射),这个情况也会发生。 在一次 Android 典型构建过程,AAPT(处理资源工具)会生成一个额外 ProGuard 规则文件。...当 ProGuard 移除过少 所有应用都可以使用 Android 内置 ProGuard 一些安全默认规则,如保留 View getter 和 setter 方法,因为他们通常会被反射来访问

2.5K40

Android 代码混淆机制

Android 代码混淆机制 由于Android项目是基于java语言,而java属于高层抽象语言,易于反编译,其编译程序包包含了大量源代码变量、函数名、数据结构等信息,根据其编译打包APK...(混淆后生产映射文件 map 名 -> 转化映射 -optimizations !...2.保留了所有的Native变量名及名,所有中部分设定了固定参数格式构造函数,枚举等等。(详细信息请参考\examples例子及注释) 3.需要序列化和反序列化不能被混淆。...(注:Java反射用到也不能被混淆) 4.保持R文件不被混淆,否则,你反射获取不到资源id。...还有一种情况是可以正常打包出APK文件,但是不一定能运行,能运行也会在某一步出错,这种情况一般是因为把代码不可混淆字段或文件给混淆了比如引入jar和so文件等,导致程序功能变化。

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

一篇文章带你领略Android混淆魅力

以上代码 proguard-android.txt 表示 Android 系统为我们提供默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...资源压缩能够帮助我们移除项目及依赖仓库使用资源,有效地降低了apk大小。...4.2 被反射元素 被反射使用、变量、方法、名等不应该被混淆处理。...原因在于:代码混淆过程,被反射使用元素会被重命名,然而反射依旧是按照先前名称去寻找元素,所以会经常发生 NoSuchMethodException 和 NoSuchFiledException 问题...:1107) 1.通过 retrace 脚本工具 首先我们要进入到 Android SDK 路径 /tools/proguard/bin 目录,这里 Mac 系统为例,可以看到如下内容: ?

92120

Android开发:请你吃一顿史上最全Android混淆大餐

好处有哪些?具体效果如何?别急,下面我们来一一探索它"独特"魅力。 混淆简介 代码混淆(Obfuscated code)是将程序代码某种规则转换为难以阅读和理解代码一种行为。...以上代码 proguard-android.txt 表示 Android 系统为我们提供默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...资源压缩能够帮助我们移除项目及依赖仓库使用资源,有效地降低了apk大小。...被反射元素 被反射使用、变量、方法、名等不应该被混淆处理。...原因在于:代码混淆过程,被反射使用元素会被重命名,然而反射依旧是按照先前名称去寻找元素,所以会经常发生 NoSuchMethodException 和 NoSuchFiledException 问题

3.7K30

android开发笔记之 Android代码混淆打包

三, 是我们java 元素名称是在配置文件配置好。 所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆。...proguard 问题和风险 代码混淆虽然有混淆优化好处,但是它往往也会带来如下几点问题 1,混淆错误,用到第三方库时候,必须告诉 proguard 不要检查,否则proguard...本地方法,不能修改本地方法名 annotations 注释 数据库驱动 有些resource 文件 用到反射地方 如何实施 现在系统已经配置为混淆时候会保留...} 使用给定文件关键字作为要混淆方法名称 -overloadaggressively 混淆时应用侵入式重载 -useuniqueclassmembernames 确定统一混淆成员名称来增加混淆...-flattenpackagehierarchy {package_name} 重新包装所有重命名并放在给定单一 -repackageclass {package_name} 重新包装所有重命名文件中放在给定单一

70220

Android 混淆从入门到精通

说在前面 这里我们直接用Android Studio来说明如何进行混淆Android Studio自身集成Java语言ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单,只需要在工程应用目录...ProGuard作用 压缩(Shrinking):默认开启,用以减小应用体积,移除未被使用和成员,并且会在优化动作执行之后再次执行(因为优化可能会再次暴露一些未被使用和成员)。...原则,代码混淆越乱越无规律越好,但有些地方我们是要避免混淆,否则程序运行就会出错,所以就有了下面我们要教大家如何让自己部分代码避免混淆从而防止出错。....* 一颗星表示只是保持该包下名,而子包下名还是会被混淆;两颗星表示把本和所含子包下名都保持;用以上方法保持,你会发现名虽然未混淆,但里面的具体方法和变量命名还是变了,这时如果既想保持名...native ; } 反射用到混淆(否则反射可能出现问题); AndroidMainfest混淆,所以四大组件和Application子类和Framework

1.4K90

Android 代码混淆规则

Proguard作用 Android混淆”可以分为两部分,一部分是 Java 代码优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,将移除项目及依赖未被使用资源(资源压缩严格意义混淆没啥关系...原则,代码混淆越乱越无规律越好,但有些地方我们是要避免混淆,否则程序运行就会出错。...2.2 资源压缩 资源压缩将移除项目及依赖未被使用资源,这在减少 apk 体积上会有不错效果,一般建议开启。...隔开) tools:shrinkMode 开启严格模式 当代码通过 Resources.getIdentifier() 用动态字符串来获取使用资源时,普通资源引用检查就可能会有问题。...例如,如下代码会导致所有“img_”开头资源都被标记为已使用

2.4K10

读懂 Android 代码混淆

哪些不应该混淆 反射使用元素 如果一些被混淆使用元素(属性,方法,,名等)进行了混淆,可能会出现问题,如NoSuchFiledException或者NoSuchMethodException等...如何解决 将序列化和反序列化排除混淆 使用@SerializedName注解字段 @SerializedName(parameter)通过注解属性实现了 序列化结果,指定该属性key为parameter...四大组件不建议混淆 Android四大组件我们都很常用,这些组件不能被混淆原因为 四大组件声明必须在manifest中注册,如果混淆名更改,而混淆名没有在manifest注册,是不符合Android...外部程序可能使用组件字符串名,如果类名混淆,可能导致出现异常 注解不能混淆 注解在Android平台中使用越来越多,常用有ButterKnife和Otto.很多场景下注解被用作在运行时反射确定一些元素特征....详解Java注解 其他不该混淆 jni调用java方法 javanative方法 js调用java方法 第三方库不建议混淆 其他和反射相关一些情况 stacktrace恢复 Proguard

1.5K20

Android混淆你了解多少?

好处有哪些?具体效果如何?别急,下面我们来一一探索它"独特"魅力。 ##1混淆简介 代码混淆(Obfuscated code)是将程序代码某种规则转换为难以阅读和理解代码一种行为。...以上代码 proguard-android.txt 表示 Android 系统为我们提供默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...资源压缩能够帮助我们移除项目及依赖仓库使用资源,有效地降低了apk大小。...被反射元素 被反射使用、变量、方法、名等不应该被混淆处理。...原因在于:代码混淆过程,被反射使用元素会被重命名,然而反射依旧是按照先前名称去寻找元素,所以会经常发生 NoSuchMethodException 和 NoSuchFiledException 问题

1.7K00

Android 安装优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

开启 Proguard , 在编译时 , 会自动进行如下一系列优化 : 压缩 Shrink : 检查 并 删除 没有使用 , 字段 , 方法 , 属性 ; 这里要注意 , 如果通过反射使用一个时..., 可能会在该步骤被删除 ; 这里需要配置混淆文件 , 保留反射使用 ; 优化 Optimize : 优化字节码 , 移除无用指令 ; 混淆 Obfuscate : 混淆 Java...层代码 , 使用无意义标识符替代 Java 名 , 变量名 , 方法名 等名称 ; 预检 Preveirfy : 预检 Java 平台上预处理代码 ; 开启 ProGuard 配置...; 遇到某个编译遇到警告退出 , -dontwarn 配置该不要爆出警告 ; 遇到没有找到 , 使用 -keep 不要混淆该类 ; 常用混淆配置 : " -dontwarn " : 不要报出警告信息...| 将混淆报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆报错信息 | Proguard

3.5K20

Android-Proguard(混淆)

大家看到了,有两个混淆文件,proguard-android.txt和proguard-rules.pro,proguard-rules.pro是我们需要自己编写混淆文件,proguard-android.txt...  } #在方法加入参数,限制特定构造方法 -keep class com.xzt.demotwo.MainActivity{ public (String); } #要保留一个内部类及其内容不被混淆需要用...自定义View默认也不会被混淆;所以像网上贴很多排除自定义View,或四大组件被混淆规则在Android Studio是无需加入; 4,与服务端交互时,使用GSON、fastjson等框架解析服务端数据时...,所写JSON对象混淆,否则无法将JSON解析成对应对象; 5,使用第三方开源库或者引用其他第三方SDK时,如果有特别要求,也需要在混淆文件中加入对应混淆规则; 6,有用到WebView...$Creator *;} 8,使用enum类型时需要注意避免以下两个方法混淆,因为enum特殊性,以下两个方法会被反射调用。

1.3K40

android代码混淆

缺省情况下,proguard混淆所有代码,但是下面几种情况是不能改变java 元素名称,否则就会这样就会导致程序出错。 一, 我们用到反射地方。...所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆。...proguard 问题和风险 代码混淆虽然有混淆优化好处,但是它往往也会带来如下几点问题 1,混淆错误,用到第三方库时候,必须告诉 proguard 不要检查,否则proguard 会报错。...本地方法,不能修改本地方法名 annotations 注释 数据库驱动 有些resource 文件 用到反射地方 如何实施 现在系统已经配置为混淆时候会保留 Android系统组件...    确定统一混淆成员名称来增加混淆 -flattenpackagehierarchy {package_name}    重新包装所有重命名并放在给定单一 -repackageclass

1.5K80

Android 混淆那些事儿

混淆不仅能将代码名、字段、方法名变为无意义名称,保护代码,也由于移除无用、方法,并使用简短名称对、字段、方法进行重命名缩小了程序size。...我们来看一下Proguard几个步骤如何处理Entry Points。 在压缩阶段,Proguard从上述Entry Points开始遍历搜索哪些成员被使用。...(‘proguard-android.txt’) 方法可从 Android SDK tools/proguard/ 文件夹获取默认 ProGuard 设置。....** 本和所包含子包下名都保持 -keep class com.lily.test.* 保持该包下名 -keep class com.lily.test.** {*;} 保持和子名和里面的内容均不被混淆...下面是自定义混淆文件一个范例,四大组件,native方法,反射用到,一些引入第三方库等都不能进行混淆: # 代码混淆压缩比,在0~7之间 -optimizationpasses 5# 混合时不使用大小写混合

3.1K50

Android 实现代码混淆实例

作用: proguard是一个集文件压缩,优化,混淆和校验等功能工具 检测并删除无用,变量,方法和属性 优化字节码并删除无用指令 通过将名,变量名和方法名重命名为无意义名称实现混淆效果 还校验处理代码...当然也可以是继承XXX所有名不混淆 -keepclasseswithmembers class XXXX 保留名和成员名,当然也可以是特定方法 5、哪些不混淆 反射使用元素 与网络请求相关实体...使用注解元素 四大组件 WebView与JS交互 枚举 等 6、混淆文件编写 按照以上规则和基本语句,我们将混淆文件分为两个区域: 定制化区域:分为实体、第三方、js相关、反射相关,...第三方 需到项目的build.gradle文件中找到所有添依赖,然后去官网或者github找到对应混淆代码,添加到我们自己混淆文件。...{ <methods ; } 反射相关 没有可跳过 -keep class 你所在.** { *; } ok,这样就可以了,其实混淆很简单!

92741

Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 反射获取系统 Element[] dexElements )

简介 | Proguard 相关网址 | Proguard 混淆配置 ) 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 ) 【Android 安全...】DEX 加密 ( Proguard keep 用法 | Proguard 默认混淆结果 | 保留及成员混淆结果 | 保留注解以及被注解修饰/成员/方法 ) 【Android 安全】DEX 加密...( Proguard 混淆 | 混淆报错信息 | Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆报错信息转为原始报错信息... Element[] dexElements 数组 ; 四、反射获取系统 Element[] dexElements ---- 上述 DexPathList 对象 是 BaseDexClassLoader... 私有成员 , Element[] dexElements 数组 也是 DexPathList 私有成员 , 因此只能使用 反射 获取 Element[] dexElements 数组 ; 反射获取系统

32300

Android 代码混淆配置总结

二、官方默认混淆配置 其实在android Studio混淆,基本就是对Proguard-rules.pro文件操作。混淆过程也是有规律可循。...非public -verbose #打印混淆详细信息 -dontoptimize #不进行优化...混淆方法和通配符对照表 五、不能混淆情况总结 Java反射,为什么不能混淆呢?...因为代码混淆名、方法名、属性名都改变了,而反射它还是按照原来名字去反射,结果只射出一个程序崩溃 注解用了反射,所以不能混淆。...Activity不能混淆,因为AndroidManifest.xml文件是完整名字 自定义view也是带了名写在xml布局,不能混淆 六、混淆使用时常见问题 当项目中出现sonative代码找不到

2.2K10

Android 代码混淆 混淆方案

正规第三方库一般都会在接入文档写好所需混淆规则,使用时注意添加。 在运行时动态改变代码,例如反射。比较典型例子就是会与 json 相互转换实体。...WebViewJavaScript调用方法 Layout布局使用View构造函数、android:onClick等。 检查混淆结果 混淆必须进行检查,避免因混淆引入bug。...”可以分为两部分,一部分是Java 代码优化与混淆,依靠 proguard混淆器来实现;另一部分是资源压缩,将移除项目及依赖未被使用资源(资源压缩严格意义混淆没啥关系,但一般我们都会放一起用...分析和优化方法二进制代码;根据proguard-android-optimize.txt描述,优化可能会造成一些潜在风险,不能保证在所有版本Dalvik都正常运行。 混淆。...最后附上一个我在实际项目中混淆方案 proguard-android.txt文件内容 # 代码混淆压缩比,在0~7之间 -optimizationpasses 5 # 混合时不使用大小写混合,混合名为小写

2.4K30

Android 混淆打包

Proguard 作用: 压缩shrinks :检查并移除代码无用,字段,方法,属性。 优化optimizes:对字节码进行优化,移除无用指令。...混淆原则 jni方法不可混淆,因为需要与native方法保持一致; 反射用到混淆(否则反射可能出现问题); AndroidMainfest混淆,四大组件和Application子类和Framework...等框架时,所写JSON对象混淆,否则无法将JSON解析成对应对象; 使用第三方开源库或者引用其他第三方SDK时,需要在混淆文件中加入对应混淆规则; 有用到WEBViewJS调用也需要保证写接口方法不混淆...,混淆名称为小写 #告诉Proguard 不要跳过对非公开处理,默认是跳过 -dontskipnonpubliclibraryclasses #如果应用程序引入有jar,并且混淆jar里面的...,否则,你反射获取不到资源id -keep class **.R$* { *; } #以下针对App本身设置 #保护WebView对HTML页面的API不被混淆 -keep class **.Webview2JsInterface

1.4K30

Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 )

混淆大小写 : 不要使用混合大小写名进行混淆 , 混淆名称全部都是小写 , 增加阅读难度 # 不要使用混合大小写名进行混淆 , 混淆名称全部都是小写 , 增加阅读难度 -dontusemixedcaseclassnames...保留反射属性 : 保留一些反射中可能用到属性 # 保留一些反射中可能用到属性 -keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod...保留被注解声明 : 被 @android.support.annotation.Keep 注解修饰不被混淆 ; # 保留被 @android.support.annotation 注解声明.../usage.html # # 从 Gradle 插件 2.2 版本开始 , 该文件与插件一同发布, 在编译构建时取出 . # 不再维护 $ANDROID_HOME 文件 , 新 Gradle 插件版本将会忽略这些文件..." 文件 . # 不要进行优化 -dontoptimize # 不要使用混合大小写名进行混淆 , 混淆名称全部都是小写 , 增加阅读难度 -dontusemixedcaseclassnames

35300

Android Apk瘦身方案1——R.java文件常量内联

int 型常量值,那么如果我们编译打包时,将所有这些对 R 引用直接替换成常量值,效果也是一样,那么 R.java 在 apk 里就是冗余了。...,并不能直接删除替换,所以打包进 apk R 文件,理论除了 static final int[] 类型字段,其他都可以全部删除掉。...文件混淆 通常我们会采用 ProGuard 进行混淆,你会发现混淆也能删除很多 R$*.class,但是混淆会造成一个问题:混淆不能通过反射获取资源了。...现在很多应用或者SDK里都有通过反射调用来获取资源,比如大家最常用统计SDK友盟统计、友盟分享等,就要求 R 文件不能混淆掉,否则会报错,所以我们常用做法是开启混淆,但 keep 住 R 文件,在... R 常量字段,一旦参与编译,就再也没有利用价值(反射除外)。

80711
领券