减少包体积的好处有很多,比如增加用户黏性和满意度,提升下载速度,减少安装时间,以便在终端设备上连接用户,尤其是在新兴市场。...如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多的优化效果: 在一些版本的 Android 设备上,DEX 代码会在安装或者运行时被编译成机器码。...每个 Android 应用都应该使用代码压缩吗?我认为是的! 但是在您激动的跳起来之前,请先继续阅读下去。当您开启 ProGuard 时,在某些非常微妙的情况下会让您的应用崩溃。...您在 Google Play 控制台发布混淆后的生产 APK时,记得为每个版本上传对应的映射文件。...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版的 SDK Tools 和 Android Gradle 插件版本2.2.0+上,可以在构建时从
此外,在 Android Studio 3.1 或之后的版本都会默认采用 D8 作为 Dex 的编译器,并且,在2019年10月,被认作为混淆的替代品的 R8 就已经默认集成进 Android Gradle...但是,R8 在 inline 内联容器类中更有效,并且在删除未使用的类,字段和方法上则更具侵略性。...例如,R8 本身集成在 ProGuard V6.1.1 版本中,在压缩 apk 的大小方面,与 ProGuard 的 8.5% 相比,使用 R8 apk 尺寸减小了约 10%。...ProGuard 在删除所有跟踪(包括组成日志消息的字符串操作)方面更有效。 2)、ProGuard 中应用的模式匹配算法可以识别和替换短指令序列,从而提高代码效率并为更多优化打开了机会。...上生成一个 ODEX 的耗时大约在 10 秒以上,在 Android 8.0 使用 speed 模式也需要 1 秒左右的时间。
文章目录 一、判定是否是第一次启动 二、递归删除文件操作 三、解压 Zip 文件操作 四、解压操作相关代码 参考博客 : 【Android 安全】DEX 加密 ( 常用 Android 反编译工具 |...混淆配置 ) 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 ) 【Android 安全】DEX 加密 ( Proguard keep 用法 | Proguard...MultiDex 配置 | PathClassLoader 类加载源码分析 | DexPathList ) 【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android...8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 ) 【Android 安全】DEX 加密 ( DEX 加密使用到的相关工具 | dx 工具 | zipalign 对齐工具...开发 | multiple-dex-core 依赖库开发 | 配置元数据 | 获取 apk 文件并准备相关目录 ) 在 【Android 安全】DEX 加密 ( 支持多 DEX 的 Android 工程结构
简介 | Proguard 相关网址 | Proguard 混淆配置 ) 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 ) 【Android 安全...】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 ) 【Android 安全】DEX...【Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否是第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 ) 在 【Android...) 博客中讲解了 multiple-dex-core 依赖库开发 , 每次启动都要解密与加载 dex 文件 , 在该博客中讲解到了 获取 apk 文件 , 并准备解压目录 ; 在 【Android 安全...dex 文件加载操作 ; 一、dex 文件准备 ---- 上一篇博客讲解的是 apk 文件解压 , 继续后面的步骤 ; 如果本次是第一次启动 , 则需要 解压 apk 文件 , 解压后 , 将所有的
注:如果项目配置时所面向的 Dalvik 可执行文件分包使用的是 minSdkVersion 20 或更低版本,并且将其部署到运行 Android 4.4(API 级别 20)或更低版本的目标设备上,则...可执行文件分包的应用可能无法在运行的平台版本早于 Android 4.0(API 级别 14)的设备上启动。...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前的 Android 版本上,应用仍有可能遭遇这一限制。...这些设置的好处是,可以进行快速的增量式构建,因为只有修改过的模块的 DEX 文件才会在后续构建期间重新计算并重新打包。但是,这些构建的 APK 只能用于在 Android 5.0 设备上进行测试。...在所示配置内,prodRelease 变体将是最终测试和发布版本。
Android dex分包原理介绍 QQ空间热修复方案基于Android dex分包基础之上,简单概述android dex分包的原理就是:就是把多个dex文件塞入到app的classloader之中,...但是android dex拆包方案中的类是没有重复的,如果classes.dex和classes1.dex中有重复的类,当classes.dex和classes1.dex中都具有同一个类的时候,那么classloader...理论上,如果在不同的dex中有相同的类存在,那么会优先选择排在前面的dex文件的类 所以,QQ空间正是基于ClassLoader的这个原理,把有问题的类打包到一个dex(patch.dex)中去...注意:AntilazyLoad.class这个类是独立在hack.dex中。...('proguard-android.txt'), 'proguard-rules.pro' } } applicationVariants.all { variant -> variant.dex.dependsOn
我建议在处理 ProGuard(混淆)错误前熟读 Android Studio 文档,ProGuard (混淆)手册 以及我的上一篇文章 。...为你所有的即时应用功能启用 ProGuard(混淆) 在可安装的应用程序版本构建过程中,ProGuard(混淆)只运行一次:在使用 com.android.application 插件的模块中。...首先,准备好一个调试版本(或者没有启用 ProGuard(混淆)的调试版本)。...更好的方法是在完整的,可安装的应用程序中重新使用 ProGuard(混淆)映射文件,但设置和维护起来很困难。更简单的方法是简单地禁用非基本特征中的混淆。...你可以在 GitHub 上看看最新的一些使用 ProGuard(混淆)配置的即时应用示例 来和你的相比较,或者练习本文中介绍的相关示例项目的方法。
} } 混淆配置文件说明 : 在 proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro...’ 中 , 配置了两个文件, 其中 proguard-android-optimize.txt 是默认的混淆配置文件 , 由系统自动生成 ; proguard-rules.pro 是用户自己配置的混淆配置文件...安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 ) 【Android 安全】DEX...加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息...| retrace.bat 命令执行目录 | 暴露更少信息 ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt
五、图片相关 在Android 5.0及以上的版本可以通过tintcolor实现只提供一张按钮的图片,在程序中实现按钮反选效果,前提是图片的内容一样,只是正反选按钮的颜色不一样。...六、混淆 1 构建多个版本 在gradle中的buildTypes中增加不同的构建类型,使用applicationSuffix和versionNameSuffix可以生成多个版本在同一设备上运行 创建...在类上添加@Keep可原样保留整个类。在方法或字段上添加它可完整保留方法/字段(及其名称)以及类名称。请注意,只有在使用注解支持库时,才能使用此注解。...请注意,您每次使用 ProGuard 创建发布构建时都会覆盖mapping.txt文件,因此您每次发布新版本时都必须小心地保存一个副本。...在每次添加库的时候,需要及时进行make a release build DexGuard时Proguard同一个团队开发的软件, 优化代码,分离dex文件从而解决65k方法限制的文件 关于proguard-android.txt
较新版本的 Android 构建系统虽然显示的错误不同,但指示的是同一问题: ? 这些错误状况都会显示下面这个数字:65536。...注:如果项目配置时所面向的 Dalvik 可执行文件分包使用的是 minSdkVersion 20 或更低版本,并且将其部署到运行 Android 4.4(API 级别 20)或更低版本的目标设备上,则...可执行文件分包的应用可能无法在运行的平台版本早于 Android 4.0(API 级别 14)的设备上启动。...尽管 Android 4.0(API 级别 14)提高了分配限制,但在 Android 5.0(API 级别 21)之前的 Android 版本上,应用仍有可能遭遇这一限制。...这些设置的好处是,可以进行快速的增量式构建,因为只有修改过的模块的 DEX 文件才会在后续构建期间重新计算并重新打包。但是,这些构建的 APK 只能用于在 Android 5.0 设备上进行测试。
简介 本文记录的是:国庆节前夕,解决Crash率高达9.08%问题成功避免加班拿3倍工资的故事 PS: 除了在时间上两者相遇外,本文中提到的两个(top1&top2)crash问题与dex分包并没有关系...恰好该灰度版本有新加入的dex分包功能,于是dex分包合情合理的成了头号怀疑对象,但是Check分包方案后有如下疑问: Crash栈中的BaseActivity和SpaceCleanActivity在主...dex中 这两个Crash在测试中不可复现 按常理,在主dex中的类,并不会出现NoClassDefFoundError/ClassNotFoundException这种Crash,不过谨慎起见我们还是对分包方案进行了一翻研究...Crash,我们尝试先针对android 3.0以上用户灰度一个不带分包方案的版本, 2015-09-29: 发现不带dex分包方案的灰度版本中依然出现之前的 TOP1&TOP2 Crash ----...重新审视问题,搜集更多线索 经过新版本的灰度结果,发现TOP1&TOP2的Crash与分包毫无关系,之前一直研究的方向是错误的,所以我们把再次关注问题本身,深入研究问题,查找到了更多的线索 Bugly抓取的自定义日志内容
/studio/build/shrink-code 资源压缩 的前提是 代码压缩 必须开启 , 否则资源压缩无效 ; 代码压缩就是 混淆操作 , 参考 【Android 安装包优化】开启 ProGuard...; 资源压缩配置是在 build.gradle 构建脚本中的 " android / buildTypes " 下的 debug / release 下配置 shrinkResources true.../studio/build/shrink-code 参考之前的博客资源 : 【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames...混淆效果 ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密...( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 ) 【Android 安全】DEX 加密 ( Proguard 混淆 |
classes文件是Java Class,被DEX编译后可供Dalvik/ART虚拟机所理解的文件格式 resources.arsc 编译后的二进制资源文件 AndroidManifest.xml Android...'), 'proguard-rules.pro' } } } Android构建工具是通过ResourceUsageAnalyzer来检查哪些资源是无用的...资源压缩工具只是把无用资源替换成预定义较小的版本,那我们如何删除这些无用资源呢?通常的做法是结合资源压缩工具的输出日志,找到这些资源并把它们进行删除。...true来开启资源压缩,资源压缩工具会把无用的资源替换成预定义的版本而不是移除,如果采用人工移除的方式会带来后期的维护成本,这里笔者采用了一种比较取巧的方式,在Android构建工具执行package...删除资源包中对应的资源文件。 重复资源优化 产生重复资源的原因是不同的人,在开发的时候没有注意资源的可重用,对于人数比较少,规范到位是可以避免的,但是对于业务比较多,就会造成资源的重复。
使用方式:在 build.gradle 文件中配置 proguard-rules.pro 文件,然后在项目构建时执行混淆。...数字签名: 对 APK 进行数字签名可以保证应用程序的完整性,防止未经授权的人发布修改后的 APK 文件。使用方式:生成数字签名并对 APK 进行签名,在发布应用程序时验证签名信息。...iOS APP加固代码实现 以下是使用 ProGuard 工具对 iOSAPP 进行代码混淆的示例: 在项目 build.gradle 文件中添加以下代码: buildTypes { release...在构建 release 版本时,自动启用混淆并将混淆后的 APK 文件输出到 app/build/outputs/apk/release 文件夹中。...防反编译,dex加固实战代码分析 防止反编译是 iOSAPP 加固中的一项重要工作,而 dex 文件加固则是防御反编译的一种实现方式。
} ... } 其中,proguard-android.txt是获取默认ProGuard设置,proguard-rules.pro文件用于添加自定义ProGuard规则。...4.1 移除无用的资源文件 移除无用资源文件要比移除无用代码容易,在Android Studio的任何文件中右击,选择清除无用资源即可删除没有用到的资源文件。 ?...5、 Apk瘦身之So瘦身 So(shared object,共享库)是机器可以直接运行的二进制代码,是Android上的动态链接库,类似于Windows上的dll。...Android SDK的打包工具apkbuilder采用的是Deflate算法将Android App的代码、资源等文件进行压缩,压缩成Zip格式,然后签名发布。...一点经验:对Apk进行瘦身,瘦身So以及资源文件是见效最快的操作。瘦身So以及删除不用的图片、压缩图片之后,Apk会缩减很大的比例;而针对Dex的优化可能作用不会很明显。
这个文件很重要,里面有我们的四大组件和申请的权限 classes.dex: 它是Android平台上的可执行文件,Android虚拟机Dalvik支持的字节码文件格式Google在Android平台上使用自己的...设备上安装,签名apk文件有两种情况: 在调用应用程序时,也就是我们通常称为的debug模式的签名,平时开发的时候,在编译调试程序时会自己使用一个debug.keystore对apk进行签名 正式发布时对应用程序打包进行签名...实际上aapt工具还生成一个文件resources.arsc,相当于一个资源索引表,或者你理解成一个map也行,map的key是资源ID,value是资源在apk文件中的路径。...是一个开源项目在SourceForge上进行维护,地址在http://ProGuard.sourceforge.net。...针对第三方jar包的解决方案 我们在Android项目中不可避免要使用很多第三方提供的SDK,一般而言,这些SDK是经过ProGuard混淆的,而我们所需要做的就是避免这些SDK的类和方法在我们APP
下一步要进行的是通过javac命令将java源码编译成.class字节码,用以编译的classpath包含以下内容: android.jar,具体版本由targetSdkVersion指定; build.gradle...中添加的第三方依赖; 编译后可对代码进行混淆处理,主要包括删除无用类、字节码优化、重命名等操作,只需在build.gradle中配置混淆规则即可 buildTypes { release {...proguardFile 'proguard/proguard-rules.pro' } } 生成dex 如果项目涉及分dex,那在调用dx命令前,需要做一些准备的工作,把编译后的class...若有额外的类需要被加入到主dex中,可以新建一个文件并以proguard的语法指定,然后在build.gradle中把此文件配置到multiDexKeepProguard中去。...实际上是调用了proguard,只是要比常规的proguard简单一些,不执行混淆、优化跟预检几个步骤,只需要shrink即可,以allclasses.jar为输入、manifest_keep.txt为混淆配置文件
图5 Proguard + D8 图6 R8 在R8出现之前,Proguard基本上配合Dx/D8使用,生成更小更快的Java字节码,然后交给Dx/D8生成Dalvik字节码【图5】,其中D8 比...对于微信,我们仍然使用Proguard,主要原因如下: Proguard优化项跟R8相似,R8在这方面没有明显的优势; Build Time R8 不比 Proguard快多少,在图1基础上采用R8方案则会快...10分钟左右,由于两者优化目的不同,R8也包括的Dalvik字节码方面的内容,后续有可能增加耗时,其他原因上述也提到; Android微信针对dex的部分有自己的优化工作,主要目的是减少dex数量,对Tinker...Patch大小也有一定帮助,有了自己的Dex优化,在将来的一段时间内我们仍然使用Proguard,这是主要原因; 下面重点介绍增量混淆核心工作: 增量混淆 先来看一下Proguard的大致输入输出流程...: 图7 Proguard输出两个产出文件 usage.txt 和 mapping.txt【图7】,usage.txt 是将无用Class、Field和Method进行删除,mapping.txt保留
领取专属 10元无门槛券
手把手带您无忧上云