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

ProGuard Android 的使用姿势

减少包体积的好处有很多,比如增加用户黏性和满意度,提升下载速度,减少安装时间,以便在终端设备连接用户,尤其新兴市场。...如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多的优化效果: 一些版本Android 设备DEX 代码会在安装或者运行时被编译成机器码。...每个 Android 应用都应该使用代码压缩?我认为是的! 但是您激动的跳起来之前,请先继续阅读下去。当您开启 ProGuard 时,某些非常微妙的情况下会让您的应用崩溃。...您在 Google Play 控制台发布混淆后的生产 APK时,记得为每个版本上传对应的映射文件。...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版的 SDK Tools 和 Android Gradle 插件版本2.2.0+,可以构建时从

2.5K40

深入探索 Android 包瘦身(

此外, 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 秒左右的时间。

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

Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 )

文章目录 一、判定是否第一次启动 二、递归删除文件操作 三、解压 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 加密 ( 支持多 DEXAndroid 工程结构

1.1K00

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

简介 | 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 文件 , 解压后 , 将所有的

32300

学(kao)习(bei)官方关于64k异常处理 ^_^

注:如果项目配置时所面向的 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 变体将是最终测试和发布版本

93720

Android热修复学习之旅——HotFix完全解析

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

93820

Android Instant App(安卓即时应用程序)中启用 ProGuard (混淆)

我建议处理 ProGuard(混淆)错误前熟读 Android Studio 文档,ProGuard (混淆)手册 以及我的一篇文章 。...为你所有的即时应用功能启用 ProGuard(混淆) 可安装的应用程序版本构建过程中,ProGuard(混淆)只运行一次:使用 com.android.application 插件的模块中。...首先,准备好一个调试版本(或者没有启用 ProGuard(混淆)的调试版本)。...更好的方法完整的,可安装的应用程序中重新使用 ProGuard(混淆)映射文件,但设置和维护起来很困难。更简单的方法简单地禁用非基本特征中的混淆。...你可以 GitHub 看看最新的一些使用 ProGuard(混淆)配置的即时应用示例 来和你的相比较,或者练习本文中介绍的相关示例项目的方法。

2.5K30

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

} } 混淆配置文件说明 : 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

3.5K20

如何在10分钟内让Android应用大小减少 60%?

五、图片相关 Android 5.0及以上的版本可以通过tintcolor实现只提供一张按钮的图片,程序中实现按钮反选效果,前提图片的内容一样,只是正反选按钮的颜色不一样。...六、混淆 1 构建多个版本 gradle中的buildTypes中增加不同的构建类型,使用applicationSuffix和versionNameSuffix可以生成多个版本同一设备运行 创建...添加@Keep可原样保留整个类。方法或字段添加它可完整保留方法/字段(及其名称)以及类名称。请注意,只有使用注解支持库时,才能使用此注解。...请注意,您每次使用 ProGuard 创建发布构建时都会覆盖mapping.txt文件,因此您每次发布版本时都必须小心地保存一个副本。...每次添加库的时候,需要及时进行make a release build DexGuard时Proguard同一个团队开发的软件, 优化代码,分离dex文件从而解决65k方法限制的文件 关于proguard-android.txt

81520

如何在10分钟内让Android应用大小减少 60%?

五、图片相关 Android 5.0及以上的版本可以通过tintcolor实现只提供一张按钮的图片,程序中实现按钮反选效果,前提图片的内容一样,只是正反选按钮的颜色不一样。...六、混淆 1 构建多个版本 gradle中的buildTypes中增加不同的构建类型,使用applicationSuffix和versionNameSuffix可以生成多个版本同一设备运行 创建...添加@Keep可原样保留整个类。方法或字段添加它可完整保留方法/字段(及其名称)以及类名称。请注意,只有使用注解支持库时,才能使用此注解。...请注意,您每次使用 ProGuard 创建发布构建时都会覆盖mapping.txt文件,因此您每次发布版本时都必须小心地保存一个副本。...每次添加库的时候,需要及时进行make a release build DexGuard时Proguard同一个团队开发的软件, 优化代码,分离dex文件从而解决65k方法限制的文件 关于proguard-android.txt

1.6K10

Android Study 之学(kao)习(bei)官方关于64k异常处理 ^_^

较新版本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 设备上进行测试。

79410

dex分包遇上NoClassDefFoundError & ClassNotFoundException

简介 本文记录的:国庆节前夕,解决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抓取的自定义日志内容

2.3K90

Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留移除资源配置 | 资源压缩效果 )

/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 混淆 |

1.2K40

dex分包遇上NoClassDefFoundError&ClassNotFoundException

简介 本文记录的:国庆节前夕,解决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抓取的自定义日志内容

57020

Android App瘦身实战

classes文件Java Class,被DEX编译后可供Dalvik/ART虚拟机所理解的文件格式 resources.arsc 编译后的二进制资源文件 AndroidManifest.xml Android...'), 'proguard-rules.pro' } } } Android构建工具通过ResourceUsageAnalyzer来检查哪些资源无用的...资源压缩工具只是把无用资源替换成预定义较小的版本,那我们如何删除这些无用资源呢?通常的做法结合资源压缩工具的输出日志,找到这些资源并把它们进行删除。...true来开启资源压缩,资源压缩工具会把无用的资源替换成预定义的版本而不是移除,如果采用人工移除的方式会带来后期的维护成本,这里笔者采用了一种比较取巧的方式,Android构建工具执行package...删除资源包中对应的资源文件。 重复资源优化 产生重复资源的原因不同的人,开发的时候没有注意资源的可重用,对于人数比较少,规范到位可以避免的,但是对于业务比较多,就会造成资源的重复。

1.6K80

提高APP安全性的必备加固手段——深度解析代码混淆技术

使用方式: 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 文件加固则是防御反编译的一种实现方式。

25820

Android性能优化(十)之App瘦身攻略

} ... } 其中,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的优化可能作用不会很明显。

1.6K30

Android插件化基础3----Android的编译打包流程详解

这个文件很重要,里面有我们的四大组件和申请的权限 classes.dex: 它是Android平台上的可执行文件,Android虚拟机Dalvik支持的字节码文件格式GoogleAndroid平台上使用自己的...设备安装,签名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

1.9K22

Android 构建过程分析

下一步要进行的通过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为混淆配置文件

3.1K40

微信Android增量Proguard方案

图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保留

2.2K20
领券