首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ProGuardAndroid 上的使用姿势

虽然有些错误会在构建应用时发生,您能及时发现,但是也有些错误您只能在运行时发现,所以请确保您的应用经过彻底的测试。 如何使用 ProGuard?...当一些类和方法会被动态访问到时(如使用反射),在某些情况下,ProGuard 在构建调用图时不能正确的决定他们的「生死」,导致这些代码被错误的移除掉。...当 ProGuard 移除过少的类 所有应用都可以使用 Android 内置的 ProGuard 的一些安全的默认规则,如保留 View 的 getter 和 setter 方法,因为他们通常会被反射来访问...此外,现在花费时间去配置您的应用意味着当实验性的 ProGuard 替代者 R8 就绪时,您已经准备好了。因为 R8 也是用现有的 ProGuard 规则文件来工作的。...除了让您的代码更小巧之外, ProGuardR8 可以选择优化您的代码让它运行得更快,当然这又是另一篇文章的话题了…… ---- ¹ proguard-android.txt 文件之前是在 SDK

2.5K40

读懂 Android 中的代码混淆

'), 'proguard-rules.pro' proguard是什么 Java官网对Proguard的定义 ProGuard is a free Java class file shrinker,...e) { e.printStackTrace(); } MainActivity中反射获取的属性名称依然是BOOK_NAME,而对应的类已经没有了这个属性名,所以会抛出NoSuchFieldException...注意,如果上面的filedName使用字面量或者字符串常量,即使混淆也不会出现NoSuchFieldException异常。...外部程序可能使用组件的字符串类名,如果类名混淆,可能导致出现异常 注解不能混淆 注解在Android平台中使用的越来越多,常用的有ButterKnife和Otto.很多场景下注解被用作在运行时反射确定一些元素的特征....详解Java中的注解 其他不该混淆的 jni调用的java方法 java的native方法 js调用java的方法 第三方库不建议混淆 其他和反射相关的一些情况 stacktrace的恢复 Proguard

1.5K20

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

1.3 开启压缩、混淆(减少 2.4 MB) 根据 Google 官网解释,当我们使用 Android Gradle 3.4.0 或者更高版本时,默认会启用 R8 编译器进行压缩、混淆以及优化,主要项以及作用如下...四大组件不能混淆; 反射、注解、枚举不能混淆; JS、Native 调用的方法不能混淆; 基础 Bean 类以及序列化实体类不能混淆; 自定义控件不能混淆; 资源文件不能混淆(当然也有骚操作);...shrinkResources true // 开启混淆操作 minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt...shrinkResources false minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt...这块步骤如下: 导入 Mapping 文件 将混淆后错误日志拷贝黏贴到 Obfuscated stack trace 中 点击右下角的 ReTrace!

80320

Android编译优化:D8和R8

如果日常做Android开发的你不关注Google针对编译优化的话做的努力的话,会对D8和R8这两个名词会比较陌生。...编译更快、时间更短 DEX编译时占用内容更小 .dex文件更小 D8编译的.dex文件拥有相同或者更好的运行性能 如果你的工程已经使用Java 8尽可能开启D8编译,不然可能会出现编译错误。...R8 R8是用来替代Proguard的一个工具,是新一代的代码压缩工具。R8之前采用D8+Proguard的形式构建,R8则将混淆和D8工具进行整合,目的是加速构建时间和减少输出apk的大小。 ?...如果你不想开启R8,可以在gradle.properties里添加如下配置: android.enableR8=false 开启R8的好处 代码缩减: 规避64引用限制 资源缩减: 移除不使用的资源 混淆代码...Proguard Time ?

2.2K40

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

作者:chrispaul,来自微信客户端团队 背景 在之前的版本,微信Android一直采用Proguard构建Release包,主要原因在于: Proguard优化足够稳定 ApplyMapping也能保证正确性...一些keep规则导致包大小无法达到最优; 随着AGP的升级,将默认采用Google的R8来构建以获取更优的Apk性能; ---- R8的优势 相对于ProguardR8的优势在于: 能力支持:R8对Kotlin...有更好的支持; 构建耗时:虽然我们有增量Proguard编译,但在全量构建时间R8Proguard更短,开启优化只需要15min左右,比Proguard缩短至少一半的构建时间; 开启R8优化,使得将应用程序减少了至少...field/*规则,但R8并不理解这一行为,导致图中的NAME的access被优化成了public(如下图),导致业务通过getField反射获取字段出现错误的返回,解决的办法可以通过-allowaccessmodification...那么R8只会keep public类型的activity,非public默认混淆,这与proguard有所区别,解决办法较为简单可直接改为: -keep class * extends android.app.Activity

1.7K160

深入探索 Android 包瘦身(上)

最后,在注释 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 非常相似。...3、最后,ProGuard 具有独特的能力来优化使用 GSON 库将对象序列化或反序列化为 JSON 的代码。该库严重依赖反射,这很方便,但效率低下。

1.9K30

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

Android dex分包原理介绍 QQ空间热修复方案基于Android dex分包基础之上,简单概述android dex分包的原理就是:就是把多个dex文件塞入到app的classloader之中,...发布过程中发现BClass有编写错误,那么想要发布一个新的BClass类,那么你就要阻止AClass这个类打上CLASS_ISPREVERIFIED的标志。...所以总结下来,防止这个错误,只需要: 1、动态改变BaseDexClassLoader对象间接引用的dexElements;2、在app打包的时候,阻止相关类去打上CLASS_ISPREVERIFIED...buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt...('proguard-android.txt'), 'proguard-rules.pro' } } applicationVariants.all { variant -> variant.dex.dependsOn

93920

R8Android手Q中的应用

R8Android中替换Proguard新一代的混淆工具,同时它整合了class转Dex功能,将混淆和Dex功能集中到了一个工具中,对混淆耗时以及包大小有明显优化。...R8作为一个新工具,鲁棒性不如proguard,在面对手Q这个庞然大物时,出现了一些问题,本文主要分享一下R8在手Q应用遇到的问题,供后面有需要的同学参考。...一 、 背景Android Gradle 插件 3.4.0 或更高版本构建APP时,系统已经默认使用R8作为混淆和Dex的工具,但和公司内部大型APP交流后,目前使用R8的团队还比较少。...二、R8整体流程目前在手Q中使用的R8版本为2.1.75 ,官网的r8版本已经到了3.2.35, 因为AGP版本的限制(目前手Q版本为4.1.3),无法单独升级R8,否则会有错误,因此本文对R8的分析都是基于...R8的整体流程如下图所示:图片1、R8的输入包括Proguard配置、mainDex配置和 App中所有class文件,通过JarClassFileReader$CreateDexClassVisitor

2K30

Android 安全】Android 应用 APK 加固总结 ( 加固原理 | 应用加固完整的实现方案 | 源码资源 )

| apktool | dex2jar | enjarify | jd-gui | jadx ) 2、 ProGuard 混淆 ProGuard 混淆 : 【Android 安全】DEX 加密 ( Proguard...简介 | Proguard 相关网址 | Proguard 混淆配置 ) 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 ) 【Android 安全...】DEX 加密 ( Proguard keep 用法 | Proguard 默认混淆结果 | 保留类及成员混淆结果 | 保留注解以及被注解修饰的类/成员/方法 ) 【Android 安全】DEX 加密...( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 ) 【Android 安全】DEX 加密 ( Proguard...混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 |

6.9K61

Kotlin Vocabulary | 枚举和 R8 编译器

我会讨论一些和 when 语句相关的潜在开销,以及 Android R8 编译器是如何优化您的应用并减少这些开销的。 编译器 首先,我们讲一讲 D8 和 R8。...到了这一步,您已经有了能够运行在 Android 中的代码。不过,您也可以选择继续使用第三个编译器 —— R8。 3....R8 (可选,但推荐使用) R8 以前是用来优化和缩减应用体积的,它基本上就是 ProGuard 的一个替代方案。...getDefaultProguardFile( ‘proguard-android-optimize.txt’), ‘proguard-rules.pro...更多信息 更多 R8 相关信息,请查看以下资源: 官方文档 | D8 developer.android.google.cn/studio/comm… 官方文档 | 缩减、混淆、优化您的应用 developer.android.google.cn

97550

错误记录】反射内部类报错 ( Android 使用 Hook 时反射内部类报错 )

解决方案 一、报错信息 ---- 使用场景 : 需要 Hook 住 View 的 OnClickListener 点击方法 , 该监听器在 View 的内部类 ListenerInfo 中 , 需要先通过反射..., 得到 ListenerInfo 字节码对象 ; // 反射获取 OnClickListener 成员 // ① 先根据全类名获取 ListenerInfo 字节码 Class<?...:1816) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop...PID: 31301 SIG: 9 二、解决方案 ---- 在此记录下 , 这种低级错误以后少犯 , 内部类要使用 包名.外部类$内部类 的形式 , 进行表示 ; android.view.View$...ListenerInfo 是 ListenerInfo 的正确表示方式 , 外部类与内部类之间使用 $ 符号 ; 修改后 : // 反射获取 OnClickListener 成员 // ① 先根据全类名获取

55410

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

以下是一些常见的Android混淆工具: ProGuard:这是一个开源的Java类文件混淆器,也是Android官方推荐的混淆工具。...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

27430
领券