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

深入探索 Android 包瘦身(上)

Proguard 的作用 在 Android SDK 里面集成了一个工具 — Proguard,它是一个免费的 Java 类文件 压缩、优化、混淆、预先校验 的工具。...最后,在注释 4处,我们可以配置混淆文件的位置,其中 proguard-android.txt 为 sdk 默认的混淆配置,它的位置位于 android-sdk/tools/proguard/proguard-android.txt...R8 优化 R8 官方文档(目前已经开源) R8Proguard 压缩与优化部分的替代品,并且它仍然使用与 Proguard 一样的 keep 规则。...例如,R8 本身集成在 ProGuard V6.1.1 版本中,在压缩 apk 的大小方面,与 ProGuard 的 8.5% 相比,使用 R8 apk 尺寸减小了约 10%。...并且,随着 Kotlin 现在成为 Android 的第一语言,R8 进行了 ProGuard 尚未提供的一些 Kotlin 的特定的优化。 从表面上看,ProGuardR8 非常相似。

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

混淆技术 发布于 2023年05月30

ProGuard已经被整合在Android的官方开发工具集SDK中,因此你无需单独安装。 DexGuard:这是由ProGuard的开发者创建的一个商业混淆工具,专门针对Android应用进行优化。...与ProGuard相比,DexGuard提供了更强大和多样的混淆选项,包括字符串加密、类加密、资源混淆等。 R8:这是Google开发的一个新的混淆工具,目标是取代ProGuard。...R8被设计为比ProGuard更快,同时生成更小的APK文件。从Android Gradle Plugin 3.4.0开始,R8已经成为默认的代码混淆和压缩工具。...ProGuard 使用 ProGuard 来混淆Android应用一般需要以下几个步骤: 启用ProGuard:在Android项目中,找到build.gradle文件,然后在android节中,找到buildTypes...code/simplification/variable -optimizationpasses 5 -allowaccessmodification 构建你应用:当启用ProGuard并配置好了规则之后

32330

ProGuard 在 Android 上的使用姿势

尽管有很多其他工具供开发者们使用,但是 ProGuard 作为 Android Gradle 构建过程的一部分,已经打包在 SDK 中。 当我们构建应用时,使用 ProGuard 有很多好处。...ProGuard 和 混淆后的堆栈 我之前提及到,在构建过程中 ProGuard 会在处理类文件输出映射关系和日志文件。当您需要保留构建产物,您应当保存好这些文件和 APK 在一起。...此外,现在花费时间去配置您的应用意味着当实验性的 ProGuard 替代者 R8 就绪,您已经准备好了。因为 R8 也是用现有的 ProGuard 规则文件来工作的。...除了让您的代码更小巧之外, ProGuardR8 可以选择优化您的代码让它运行得更快,当然这又是另一篇文章的话题了…… ---- ¹ proguard-android.txt 文件之前是在 SDK...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版的 SDK Tools 和 Android Gradle 插件版本2.2.0+上,可以在构建

2.5K40

Kotlin Vocabulary | 枚举和 R8 编译器

学习或使用一门新的编程语言,了解这门语言所提供的功能,以及了解这些功能是否有相关联的开销,都是十分重要的环节。...不过,您也可以选择继续使用第三个编译器 —— R8。 3. R8 (可选,但推荐使用) R8 以前是用来优化和缩减应用体积的,它基本上就是 ProGuard 的一个替代方案。...R8 不是默认开启的,如果您希望使用它 (例如您想要这里讨论到的那些优化时),就需要启用它。...有趣的地方在于引入了 R8 之后,我们能对其中的一些开销做些什么。 枚举本身不包含任何隐藏开销。使用 Kotlin ,也仅仅是将其转换为 Java 编程语言中的枚举而已,并没有多大开销。...但当您配合枚举使用 when 语句,就会引入额外的开销。

99050

微信Android增量Proguard方案

大致构建流程如下: 图1  上图可以看出每个Plugin都有可能并发Compile,执行到Boot Plugin则需要串行Compile,最终经过Proguard、Dex等构建流程输出Apk, 而每个任务都会有相应的...的Reference不完备,就很容易出现Warning导致Proguard失效,即便Proguard成功,也未必跟上次构建结果保持一致; 采用R8,但R8 的耗时优化也达不到我们预期目标,它不允许您停用或启用离散优化...图5 Proguard + D8 图6 R8R8出现之前,Proguard基本上配合Dx/D8使用,生成更小更快的Java字节码,然后交给Dx/D8生成Dalvik字节码【图5】,其中D8 比...而 R8 【图6】是 D8 的衍生产品,旨在集成 ProGuard 和 D8 的功能,目前仍在优化中,逐渐成熟,具体查看QuardSquare官网[1]了解更多。...对于微信,我们仍然使用Proguard,主要原因如下: Proguard优化项跟R8相似,R8在这方面没有明显的优势; Build Time R8 不比 Proguard快多少,在图1基础上采用R8方案则会快

2.2K20

Android Studio 3.2 都有哪些更新?这些关键点不要错过

Kotlin 更新 - Android Studio 3.2 捆绑了 Kotlin 1.2.61,支持 Kotlin 友好的 Android 9 Pie SDK。...R8 优化器 - 从 Android Studio 3.2 开始,我们将逐渐使用 R8 替代 ProGuard 来优化和缩减 Java 语言字节码。...R8 仍处于实验阶段,因此我们尚不推荐您使用 R8 发布您的应用,但现在很适合向 Android Studio 团队提交早期反馈,以便我们在 R8 正式取代 ProGuard 前进行调整。...类似地,现在您还可以通过在您的运行配置里启用 “启动开始记录方法跟踪” 选项,在应用启动自动开始记录 CPU 活动。...要使用上述的 Android 模拟器特性,请确保您正在运行通过 Android Studio SDK 管理器下载的最新版 Android 模拟器 v28.0.7 或更高版本。

2K20

「玲珑宝塔」优化 Apk 包大小

1.3 开启压缩、混淆(减少 2.4 MB) 根据 Google 官网解释,当我们使用 Android Gradle 3.4.0 或者更高版本,默认会启用 R8 编译器进行压缩、混淆以及优化,主要项以及作用如下...例如,如果 R8 检测到从未采用过给定 if/else 语句的 else {} 分支,R8 便会移除 else {} 分支的代码。 这里需要注意一下: 默认情况下并不启用压缩、混淆和代码优化功能。...,否则会增加编译时间,一般在发布正式包打开即可。...R8 每次运行时都会创建一个 mapping.txt 文件,其中列出了混淆过的类、方法和字段名称与原始名称的映射关系。此映射文件还包含用于将行号映射回原始源文件行号的信息。...R8 将此文件保存在 /build/outputs/mapping// 目录中。 ? 线上版本肯定要进行混淆,那么针对线上版本报出的异常,我们又该如何处理呢?

81720

【解决问题的思路】its super classes have no public methods with the @Subscribe annotation

本文介绍了出现这个问题的原因,以及出现问题我的建议和我的思路,着急的可以直接看解决方案。...随后去EventBus官网寻找答案,果然issues第一页就有相同的问题,作者团队是这么回复的: Check your R8 / ProGuard rules....proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' }...反射 (Reflection) 会导致 R8 在跟踪代码无法识别到代码的入口点。...方案一 关闭R8压缩 minifyEnabled false 但是这样会使得你的应用增大不少,比如你使用了某个第三方库,应用中只使用了其中很小一部分,但打包所有库代码都会保留在应用中。

1.2K10

Android微信客户端是如何支持R8构建的?

一些keep规则导致包大小无法达到最优; 随着AGP的升级,将默认采用Google的R8来构建以获取更优的Apk性能; ---- R8的优势 相对于ProguardR8的优势在于: 能力支持:R8对Kotlin...有更好的支持; 构建耗时:虽然我们有增量Proguard编译,但在全量构建时间R8Proguard更短,开启优化只需要15min左右,比Proguard缩短至少一半的构建时间; 开启R8优化,使得将应用程序减少了至少...使用Proguard构建 说明: Proguard生成优化的java字节码,包括提供混淆代码能力; 在打Patch apk,利用Proguard的ApplyMapping能力保证前后构建的代码混淆结果一致...在优化行信息R8 现在可以使用基于指令偏移量的行表来对共享调试信息对象中的信息进行编码。...原因是R8在method mapping未考虑到两处条件下的判断处理: 针对这两种情况,我们分别做了兼容处理,解决了assignName被reservedName覆盖导致的问题,核心代码如下: if

1.9K160

R8在Android手Q中的应用

R8是Android中替换Proguard新一代的混淆工具,同时它整合了class转Dex功能,将混淆和Dex功能集中到了一个工具中,对混淆耗时以及包大小有明显优化。...R8作为一个新工具,鲁棒性不如proguard,在面对手Q这个庞然大物,出现了一些问题,本文主要分享一下R8在手Q应用遇到的问题,供后面有需要的同学参考。...一 、 背景Android Gradle 插件 3.4.0 或更高版本构建APP,系统已经默认使用R8作为混淆和Dex的工具,但和公司内部大型APP交流后,目前使用R8的团队还比较少。...R8的整体流程如下图所示:图片1、R8的输入包括Proguard配置、mainDex配置和 App中所有class文件,通过JarClassFileReader$CreateDexClassVisitor...同时在代码复杂度角度,R8proguard和DX工具的代码要复杂不少,刚开始看的时候一头雾水,经过了一段时间的分析和探索,初步掌握了一些分析方法和思路,能定位和解决一些实际问题,但离理解全部流程、甚至提升

2.1K30

Flutter App混淆加固、保护与优化原理

2.2、混淆Android原生代码 要对Android原生代码进行混淆,请在android/app/build.gradle文件中启用ProGuardR8。...'), 'proguard-rules.pro' } } 此外,确保在proguard-rules.pro文件中添加必要的混淆规则,例如保留与MethodChannel相关的原生代码: -keep class...五、常见问题与解决方案 以下是一些在混淆和优化Flutter应用程序过程中可能遇到的常见问题及其解决方案: Flutter与原生平台通信失效:请确保在proguard-rules.pro文件中添加与MethodChannel...保留JSON对应的Java Bean对象:在proguard-rules.pro文件中保留与JSON相关的Java Bean对象,使用-keep指令来保留这些类。...请记住,在实施这些技术始终关注可能遇到的问题,并及时寻找解决方案。 ​

80910

Flutter App混淆加固、保护与优化原理

2.2、混淆Android原生代码 要对Android原生代码进行混淆,请在android/app/build.gradle文件中启用ProGuardR8。...'), 'proguard-rules.pro' } } 此外,确保在proguard-rules.pro文件中添加必要的混淆规则,例如保留与MethodChannel相关的原生代码: -keep class...五、常见问题与解决方案 以下是一些在混淆和优化Flutter应用程序过程中可能遇到的常见问题及其解决方案: Flutter与原生平台通信失效:请确保在proguard-rules.pro文件中添加与MethodChannel...保留JSON对应的Java Bean对象:在proguard-rules.pro文件中保留与JSON相关的Java Bean对象,使用-keep指令来保留这些类。...请记住,在实施这些技术始终关注可能遇到的问题,并及时寻找解决方案。 ​

35310

第八章 自定义Android Gradle工程

已经为我们提供了一个默认的debug签名证书,我们可以直接使用,但是发布的时候,release模式构建,我们要配置使用自己生成的签名证书。...现在我们启用了混淆,但是Android Gradle还不知道按何种规则进行混淆,不知道要保留哪些类不混淆,要做到这些就需要我们的Proguard配置文件了,现在我们为我们的混淆指定配置文件。...安装目录中,Android为我们提供的默认Proguard混淆配置文件,路径是Android SDK安装目录下的tools/proguard文件夹中,我们看下该方法的原型 从实现中看,我们只需传递一个文件名给这个方法...Android SDK默认为我们提供了两个Proguard配置文件,他们分别是proguard-android.txt和proguard-android-optimize.txt,一个是没有优化的,一个是优化的...>域对象,其配置的渠道本质上就是一个ProductFlavor,和defaultConfig是一样的,所以每个渠道也可以单独的启用和配置Proguard混淆。

56510
领券