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

使用 R8 压缩您的应用

本文我们将对 R8 的特性进行一个简要的介绍,并介绍可预期的代码缩减程度以及如何在 R8 中启用这些功能。...不过,大多数应用都会使用 Jetpack、OkHttp、Guava、Gson 和 Google Play 服务 等第三方库,并且用 Kotlin 编写的应用始终包含 Kotlin 标准库。...当您使用这其中的某个第三方库时,您的应用中通常只使用其中很小一部分。若不压缩,所有库代码都会保留在您的应用中。...第三方库可能附带了它们自己的规则,但是切记,有些库不一定是为 Android 编写的,抑或是未考虑缩减问题,因此它们可能需要其他配置。...最后,在配置项目时,请确保将 proguard-rules.pro 文件添加到 build.gradle 配置中: android { buildTypes { release {

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

    ProGuard 在 Android 上的使用姿势

    当一些类和方法会被动态访问到时(如使用反射),在某些情况下,ProGuard 在构建调用图时不能正确的决定他们的「生死」,导致这些代码被错误的移除掉。...这些警告的一个原因就是,您的构建路径中没有加入需要依赖的 JARs,如使用了 provided (仅编译时)依赖。而有时候,在 Android 上这些代码的依赖在运行时并不会被真正的调用。...因为我们知道这些注解类在运行时不会被使用,我们可以通过在 ProGuard 配置中添加 -dontwarn 规则来安全地忽略掉这些警告,如 在 OkHttp 文档中加入这些规则: -dontwarn...不过有个更好的方法,第三方库的维护者们如果发布的库是 AAR ,那么可以指定规则打包在 AAR 中并会在应用构建时自动暴露给构建系统,通过添加下面几行代码到库模块的 build.gradle 文件中:...文件中的规则将会在应用构建时附加到应用主 ProGuard 配置并被使用。

    2.6K40

    配置Android项目 - 一些重要的事情

    Studio中创建一个新的Android项目时,它已经生成了gitignore文件,但通常它不包含所有必要的规则。...通常我在那里放一些自定义的gradle脚本文件,proguard和静态代码分析工具的规则,如pmd,findbugs,lint。 在模板项目中查看 tools文件夹。...用于调试构建的Proguard规则必须具有以下行以强制proguard忽略警告,跳过代码混淆和优化: ? 对于发布版本,设置proguard规则将会更加困难,因为几乎每个库都有自己的特定规则。...幸运的是,有一个开源代码库 —  android-proguard-snippets,它包含所有主要库的proguard规则。 ?...我建议你只在调试的时候打开它并且使用detectAll方法来检测所有类型的问题。 ? 这里是当你忘记关闭SQLiteCursor的日志的例子: ? 在模板代码中查看StrictMode。

    66820

    Android-Proguard(混淆)

    build.gradle文件中设置minifyEnabled为true,然后可以到proguard-rules.pro文件中加入我们的混淆规则即可。...大家看到了,有两个混淆文件,proguard-android.txt和proguard-rules.pro,proguard-rules.pro是我们需要自己编写的混淆文件,proguard-android.txt...#匹配所有方法     }  你还可以在或前面加上private 、public、native等来进一步指定不被混淆的内容,如 -keep class com.xzt.demotwo...自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的; 4,与服务端交互时,使用GSON、fastjson等框架解析服务端数据时...,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象; 5,使用第三方开源库或者引用其他第三方的SDK包时,如果有特别要求,也需要在混淆文件中加入对应的混淆规则; 6,有用到WebView的

    1.4K40

    Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡

    Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡实战操作去除权限要在 Cocos2d-x 开发的游戏中去掉...在 proguard-rules.pro 文件中添加相应的规则来混淆和去除不必要的权限。...检查 Android.mk 文件:如果你使用 Cocos2d-x,可以检查 Android.mk 文件,确保没有包含不需要的模块或库。重新打包 APK:保存所有更改后,重新打包你的 APK 文件。...可以使用 Cocos2d-x 提供的打包工具或自定义脚本来完成这一步。详细解释具体详细去除方法,要使用 ProGuard 强制去掉不需要的权限,可以通过 ProGuard 的配置文件来实现。...添加规则来去掉不需要的权限: ProGuard 本身并不能直接去掉权限,但你可以确保不需要的代码和类不会被打包到 APK 中,从而避免其使用相关权限。

    7000

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

    Minecraft Minecraft Java版本身作为一个使用Java编写的收费游戏,自然是需要使用混淆技术来保护源码程序的。...在Android开发中,开发者通常也会采用混淆工具在构建安卓程序时对源码进行混淆。 在Android开发中,最常用的混淆工具是ProGuard。...ProGuard 使用 ProGuard 来混淆Android应用一般需要以下几个步骤: 启用ProGuard:在Android项目中,找到build.gradle文件,然后在android节中,找到buildTypes...这些规则是在proguard-rules.pro文件中定义的,这个文件通常位于应用模块的根目录中。在这个文件中,可以添加一些保留规则,告诉ProGuard不要混淆某些类、方法或者变量。...制作和发布恶意软件:有些人可能会使用反混淆工具来修改原始应用,添加恶意代码,如病毒、木马或间谍软件,然后将它们发布到互联网上。 虽然反混淆是一种技术手段,但如何使用它取决于个人的道德和法律责任。

    45030

    Android 代码混淆规则

    如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。 2....Proguard作用 Android中的“混淆”可以分为两部分,一部分是 Java 代码的优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,将移除项目及依赖的库中未被使用的资源(资源压缩严格意义上跟混淆没啥关系...2.2 资源压缩 资源压缩将移除项目及依赖的库中未被使用的资源,这在减少 apk 包体积上会有不错的效果,一般建议开启。...Proguard使用 7.1 开启混淆 在项目的可执行工程Module中打开build.gradle文件进行编辑: android { .........这里面是一些比较常规的不能被混淆的代码规则。 proguard-rules.pro:针对自己的项目需要特别定义的混淆规则,它位于项目每个Module的根目录下面,里面的内容需要我们自己编写。

    2.6K10

    iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用

    (通过这种方式创建的工程在文件结构方面可能和直接使用eclipse或android-studio创建的工程有略微差别,但是影响不大)在android 2.3之后,sdk中就已经集成了混淆器proguard...这样代码混淆功能就开启了,在打签名包时,项目会自动进行代码混淆。...对于eclipse工程来说,代码混淆的规则,在 proguard-project.txt 文件中,我们需要根据规则去选择哪些代码需要混淆,哪些代码(一般我们引用的第三发jar包,如果已经被混淆过,就不能再混淆...编写proguard-project.txt文件的规则,后面介绍咯。...不过我们使用代码混淆的时候可能还有一些坑,例如工程中引用了很多外部的库,导致代码中函数数量超过了65535,混淆的时候可能会出错。此时需要分文件混淆,也就是把所有的代码分成两个部分来进行混淆。

    19810

    从0系统学Android--1.3创建你的第一个 Android 项目

    APP 目录下进行分析 build 编译时自动生成的文件 libs 使用了第三方 jar ,存放目录 androidTest 编写 Android Test 测试用例的,可以对项目进行一些自动化测试 Java...Activity 在不同系统版本中增加的新特性和功能可以在比较旧的系统上仍然使用(兼容到 Android 2.1)。...界面是不在 Activity 中直接编写的。而是在布局文件中编写界面。...proguardFiles 用于指定混淆使用的规则文件,这里指定了两个文件,一个是 proguard-android.txt ,这个在 Android SDK 下面,是所有项目通用的混淆规则,第二个是...proguard-rules.pro 在当前根目录下,里面编写当前项目的混淆规则,通过 Android Studio 直接运行的都是测试安装文件。

    57420

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

    https://github.com/greenrobot/EventBus#r8-proguard 检查你的压缩/混淆规则。...第三方库也可能用到反射,并且由于第三方库实际上是您的应用的一部分,您 (作为应用开发者) 将负责这些库以及您自己的代码中使用的反射。...第三方库可能附带了它们自己的规则,但是切记,有些库不一定是为 Android 编写的,抑或是未考虑缩减问题,因此它们可能需要其他配置。 解决方案 明白了前因后果之后,解决方案就应然而生了。...方案一 关闭R8压缩 minifyEnabled false 但是这样会使得你的应用增大不少,比如你使用了某个第三方库时,应用中只使用了其中很小一部分,但打包时所有库代码都会保留在应用中。...,并没有发现什么问题 在EventBus的issues中看看是否有同样的问题,果然是有的,并知道了是R8压缩导致的 去google官网查看R8相关介绍,并知道了原因,且提供了解决方案 举一反三,也适用其他的问题

    1.4K10

    Android代码混淆之混淆规则

    ProGuard默认会对第三方库也进行混淆的,而第三方库有的已经混淆过了,有的使用了Java反射技术,所以我们在进行代码混淆的时候要排除这些第三方库。...排除对第三方库的混淆需要在混淆规则文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中将含有混淆规则的文件名配置进去就行了...)中添加如下规则: 1.如果使用了Gson之类的工具要使JavaBean类即实体类不被混淆。...4.对第三方库中的类不进行混淆 a.混淆时保护引用的第三方jar包 如:-libraryjars libs/baidumapapi_v3_2_0.jar #保护引用的第三方jar包不被混淆 注意:在使用...b.混淆时保护第三方jar包中的类不被混淆 如:-keep class com.baidu.** { *; } #让ProGuard不要警告找不到com.baidu.

    1.5K20

    Android组件化架构

    组件化中流行的数据库有Jetpack套件中的Room。它通过注解的形式完成数据库的创建、增删改查等操作。使用简单、高效。...在组件化开发中,我们将normal级别的权限放在CommonModule中,在每个module中分别申请dangerous级别的权限,这样的好处是当添加或移除某个模块时移除dangerous级别权限,做到最大程度的解耦...的规则路径 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro...' } } 每个module在创建之后,都会自带一个proguard-rules.pro的自定义混淆文件,每个module可以有自己的混淆规则。...方案:将固定的第三方库混淆放到CommonModule中,每个module独有的引用库混淆放在各自的的proguard-rules.pro中,最后在App 的proguard-rules.pro中放入Android

    1.2K10

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

    以上代码中的 proguard-android.txt 表示 Android 系统为我们提供的默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义的混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...如: -keep class twitter4j.** { *; } -dontwarn twitter4j.** 其他的命令用法可参考 Android 系统提供的默认混淆规则: #混淆时不生成大小写混合的类名...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...此外,我们每次使用 ProGuard 创建发布构建时都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本时都必须小心地保存一个副本。...哈哈,就不卖关子了,其实很简单,只要生成一套自己的 txt 格式的混淆字典,然后在混淆规则 Proguard-rules.pro 中应用一下即可: ?

    97320

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

    使用方式:在 build.gradle 文件中配置 proguard-rules.pro 文件,然后在项目构建时执行混淆。...使用方式:通过工具将 APK 文件与壳程序整合在一起,然后进行签名和打包。 数据加密: 将部分敏感数据进行加密处理,如字符串、文件、库等,以避免数据泄露。...'), 'proguard-rules.pro'         // 默认的 ProGuard 文件和自定义的规则文件     } } 在项目根目录中创建一个 proguard-rules.pro 文件...// 不略过非公共库类 -verbose // 输出详细信息 ​ # 第三方库混淆规则 ​ # 自定义混淆规则 在 proguard-rules.pro 文件中添加自定义的混淆规则。...在使用加固技术时,需要注意以下几点: 加固技术不能完全杜绝破解行为,只能增加攻击者的难度,在应用程序开发过程中需从多个方面提高应用程序的安全性。

    46720

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

    以上代码中的 proguard-android.txt 表示 Android 系统为我们提供的默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义的混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...其他命令 dontwarn -dontwarn 命令一般在我们引入新的 library 时会使用到,常用于处理 library 中无法解决的警告。...如: -keep class twitter4j.** { *; } -dontwarn twitter4j.** 其他的命令用法可参考 Android 系统提供的默认混淆规则: #混淆时不生成大小写混合的类名...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...此外,我们每次使用 ProGuard 创建发布构建时都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本时都必须小心地保存一个副本。

    5.2K30

    深入探索 Android 包瘦身(上)

    使用如下规则可以关闭混淆: -dontobfuscate 关闭混淆 Proguard 的优化细节 Proguard 中所做的优化包括 内联、修饰符、合并类和方法等 30 多种优化项,在特定的情况下,它尽可能地做了相应的优化...例如,R8 本身集成在 ProGuard V6.1.1 版本中,在压缩 apk 的大小方面,与 ProGuard 的 8.5% 相比,使用 R8 apk 尺寸减小了约 10%。...在优化遍历的顺序中,尤其是数学运算和字符串运算可从中受益。 3、最后,ProGuard 具有独特的能力来优化使用 GSON 库将对象序列化或反序列化为 JSON 的代码。...很多库的代码结构都设计的比较好,比如 Fresco,它将图片加载的各个功能,如 webp、gif 功能进行了剥离,它们都处于单个的库当中。...最后,还有一些 代码编写方面的优化,如可以在开发过程 尽量减少 enum 的使用,每减少一个 enum 可以减少大约 1.0 到 1.4 KB 的大小。

    2.1K30

    Android混淆你了解多少?

    不难看出,我们一般在打 release 包时才启用混淆,因为混淆会增加额外的编译时间,所以不建议在 debug 模式下启用。 此外,需要注意的是:只有在启用混淆的前提下开启资源压缩才会有效!...以上代码中的 proguard-android.txt 表示 Android 系统为我们提供的默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义的混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...如: 其他的命令用法可参考 Android 系统提供的默认混淆规则: #混淆时不生成大小写混合的类名 -dontusemixedcaseclassnames #不跳过非公共的库的类 -dontskipnonpubliclibraryclasses...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...StackSource 查找效率: # 保留源文件名和具体代码行号-keepattributes SourceFile,LineNumberTable 此外,我们每次使用 ProGuard 创建发布构建时都都会覆盖之前版本的

    1.9K01
    领券