AGP8+ fullMode 完全模式混淆闪退

android 混淆 很久没用过混淆功能了,因为之前的包都使用第三方加固了,而且项目开发好几年了,突然要混淆也很麻烦。换了家公司后,感觉还是得混淆代码才行,不然直接暴露源码也太不行了。 阅读详情

在这里插入图片描述

打包环境

  • AGP:8.7.2
  • Gradle:8.9

1、描述

同一个工程

✅ 在 AGP6+ 打包运行正常

✅ 在 AGP7+ 打包运行正常

❌ 在 AGP8+ 打包运行闪退(混淆包闪退、非混淆包正常)

2、混淆前

很正常的代码

public class MyApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        androidx.multidex.MultiDex.install(this);
        DNSDK.applicationAttachBaseContext(this, base);
    }
}

3、AGP8+ 混淆后

  • 这里看着还算正常
    在这里插入图片描述
  • 这就不正常了
    • 一个普通类怎么变成了 abstract
    • 一个正常的方法最后怎么就直接抛异常了 throw null 【这样运行意料之中绝对闪退】
      在这里插入图片描述
  • 再随便看其他类,很多方法都是直接抛异常,方法体都变了【天崩开局😡】

在这里插入图片描述

5、AGP8+ 非混淆

经测试

✅ 关闭混淆打包。运行正常
❌ 开启混淆打包,运行闪退(出现上文所示代码)

buildTypes {
        debug {
            isMinifyEnabled = false//关闭混淆
            isDebuggable = true
            signingConfig = signingConfigs["PrimerDebug"]
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro",
                "obs-all-proguard-rules.pro"
            )
        }
        release {
            isMinifyEnabled = true//开启混淆
            isDebuggable = false
            signingConfig = signingConfigs["PrimerRelease"]
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro",
                "obs-all-proguard-rules.pro"
            )
        }
    }

4、AGP8+ 混淆 [关闭完全模式]

看官方 R8 的文档:Google git:D8 dexer and R8 shrinker 好像也没发现什么东西

冥冥中记得 R8 有一个混淆模式:fullMode 完整模式

温故知新,问下 Al

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Al 解释的很清楚

总之,时间紧迫,先一把梭哈关闭 R8 fullMode 让项目先运行起来

gradle.properties文件下配置开关:

android.enableR8.fullMode=false

果不其然,这次运行正常

没有时间研究,也研究不懂,对新手来说升级 AGP 坑不浅啊

Android升级AGP8,启用R8,使用fastjson、log4j,发现无法release,生成了也不能正常使用 自动升级后,使用了AGP8,然后出现一堆Missing Class错误,在项目的proguard-rules.pro文件中添加-ignorewarnings(AGP7之后warnings升级为errors,导致无法继续),总算生成了release版本。根据文档提示,在工程的gradle.properties中添加android.enableR8.fullMode=false,禁用掉fullmode,发现可以了,apk变大了将近1M,完全可以接受,还是比以前的release小将近一半。总之,应用已经废了。 阅读详情

相关推荐

Android AGP8升级踩坑实录:R8 fullMode导致fastjson/log4j异常的全套解决方案

本文详细解析了Android AGP8升级中R8 fullMode导致的fastjson和log4j兼容性问题,提供了从全局关闭优化到精准定制ProGuard规则的全套解决方案。通过对比不同策略的优缺点,帮助开发者在保持应用体积优化的同时确保关键库的稳定运行,特别适合面临AGP8升级挑战的Android开发者。

sony5的博客 953

Android 缩减、混淆处理和优化应用

在大多数情况下,如要让 R8 仅移除不使用的代码,使用默认的 ProGuard 规则文件 () 就已足够。不过,在某些情况下,R8 很难做出正确判断,因而可能会移除应用实际上需要的代码。当应用通过 Java 原生接口 (JNI) 调用方法时当您的应用在运行时查询代码时(如使用反射)通过测试应用应该可以发现因错误移除代码而导致的错误,但您也可以通过生成已移除代码的报告检查移除了哪些代码。如需修复错误并强制 R8 保留某些代码,请在 ProGuard 规则文件中添加-keep代码行。

qijingwang的博客 1551

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2322

Android 性能优化 ~ 包体积优化实战

概述 用户通常都不愿意去下载一个比较大的程序,特别是不在 WIFI 的情况下。如果你的安装包很小,用户还是愿意下载安装体验下的。现在市面上满足某种需求的 App 通常都会有很多款,如何让用户愿意下载你的 App 来体验?安装包越小,在 WIFI 情况下,极速下载安装,开始体验。在移动网络情况下,包体积越小,用户安装的的可能性越大。所以安装包大小对用户的转换率有很大的影响。接下来就和大家分享下我在实...

Chiclaim 5933

正弦波产生电路_文氏桥振荡

本文以文氏桥振荡为基础产生正弦波,介绍了原理、计算、应用时需要注意的一些点,并给出了实测可用的电路模板

白鹤忘机的博客 3万+

Figma到Axure一键转换:Axhub Extension保姆级教程(含常见问题解决)

本文提供Axhub Extension的保姆级教程,详细讲解如何将Figma设计稿一键转换为Axure高保真交互原型。教程涵盖环境准备、核心转换四步走流程,并重点解决JSON导入失败、样式错乱、复杂组件转换等常见问题,旨在打通Figma与Axure之间的数据孤岛,大幅提升设计师和产品经理的原型制作效率。

night的博客 1577

Android高手笔记-D8, R8编译优化

在之前的文章Android高手笔记-包体积优化中提到过通过编译优化包体积,涉及到了ProGuard,D8,R8,其中关于ProGuard及包体积优化方案已经进行了详细介绍,那么今天我们来说说D8和R8; D8 D8是一款用于取代 DX、更快的 Dex 编译器,可以生成更小的 APK; 开启D8的好处 编译更快、时间更短 编译时占用内存更小 .dex文件更小 .dex 文件拥有更好的运行时性能 支持在代码中使用 Java 8 语言 开启与关闭 Android Studio 3.0 需要主动在gr.

o118abcdef的博客 7652

工业数据采集实战:用open62541库读写PLC的OPC UA节点(避坑指南)

本文详细介绍了如何使用open62541库实现工业PLC的OPC UA节点数据采集,涵盖环境搭建、节点读写优化及生产环境故障排查。通过订阅模式和多节点读写技术,显著提升数据采集效率与稳定性,适用于智能制造和工业物联网场景。

weixin_30598225的博客 400

android agp 8.0 混淆异常

混淆后报错:java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType。发现是从 Android Gradle 插件版本 8.0.0 开始,这些优化默认处于启用状态。

leejw的博客 1170

C语言获取硬件信息(CPU序列号,硬盘序列号,网卡IP、MAC地址、是否插入网线)

本文主要介绍Linux和Windows下使用C语言获取各种硬件信息,包括CPU序列号、硬盘序列号、网卡信息(包括网卡名字、IP地址、MAC地址、网卡是否插入网线等)。

叶落花枯的博客 9379

从拆解图看懂空心杯电机:有刷 vs 无刷内部结构全解析(附DIY注意事项)

本文深入解析有刷与无刷空心杯电机的内部结构差异,通过高清拆解图展示关键部件工艺特点,并分享实用的维护技巧和检测方法。重点对比两种电机在效率、寿命和适用场景上的优劣,为DIY爱好者提供详细的注意事项和操作指南。

xgboost6farmer的博客 521

Android Gradle Plugin8.0以上版本混淆时出现问题

项目在升级到Gradle Plugin 8.0后混淆打包出现了一些bug,在翻阅Google官方文档后发现可能是由于R8的fullmode在Gradle Plugin 8.0默认开启导致的。在gradle.properties中加入下列配置代码后问题得到解决。

m0_56518032的博客 1362

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 348

Android 最新混淆编译器 R8 优化你的安装包

Android 最新混淆编译器 R8 优化你的安装包 为了尽可能减小应用的大小,我们应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,还会产生另外2项好处:一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功能会采用更积极的策略来进一步减小应用的大小。 Android 中,通过混淆编译器来实现以上能力,在早起 Android Studio 版本中,混淆编译器使用的是 ProGuard 执行编译时代码优化,当我们使用 Android Gradle 插件 3

卜大爷的博客 2万+

人像美肤 人体美型 CVPR 2022 ABPN

人像美肤 CVPR 2022 ABPN

jacke121的专栏 841

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android Studio更新后跑不起来?快来适配 AGP8 和 Flamingo/JDK 17

AGP 8 和 Flamingo 需要兼容的问题大致就这样,可以看到 Android Studio 和 Gradle/Kotlin 关系捆绑得越来越紧密,如果不了解它们的依赖关系,处理器兼容就会迷失方向。另外 AGP 现在的每个大版本变动也很大,比如前面没有特别介绍的aidl和配置位,下个大版本应该就会被移除了,只能说 Gradle 真的就是为了「折腾」而生。作者:恋猫de小郭链接:https://juejin.cn/post/7238978524031123515来源:稀土掘金。

chuyouyinghe的专栏 4961

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 更新后跑不起来?快来适配 AGP8 和 Flamingo/JDK 17

AGP 8 和 Flamingo 需要兼容的问题大致就这样,可以看到 Android Studio 和 Gradle/Kotlin 关系捆绑得越来越紧密,如果不了解它们的依赖关系,处理器兼容就会迷失方向。另外 AGP 现在的每个大版本变动也很大,比如前面没有特别介绍的aidl和配置位,下个大版本应该就会被移除了,只能说 Gradle 真的就是为了「折腾」而生。如果你还有什么问题,欢迎评价交流。

恋猫de小郭的博客 3163

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android使用dx编译字节码,Android代码压缩工具R8详解 android.enableR8=true

前言最近 Android Studio 稳定版迎来了3.3版本更新,带来的新特性之一是新一代的代码压缩工具 R8,本文将详细介绍这一新工具 R8。阅读本文内容前需了解:关于 R8作为 Android 开发者,大家都知道缩减 APK 的大小是每个项目都需要面临的重要工作,而代码缩减有助于通过移除未使用的代码和资源来减少 APK 的大小,并使实际代码占用更少的空间(也称为混淆),所以 R8 这一项工具...

weixin_28520495的博客 511

android字节流压缩,Android代码压缩工具R8详解 android.enableR8=true

前言最近 Android Studio 稳定版迎来了3.3版本更新,带来的新特性之一是新一代的代码压缩工具 R8,本文将详细介绍这一新工具 R8。阅读本文内容前需了解:关于 R8作为 Android 开发者,大家都知道缩减 APK 的大小是每个项目都需要面临的重要工作,而代码缩减有助于通过移除未使用的代码和资源来减少 APK 的大小,并使实际代码占用更少的空间(也称为混淆),所以 R8 这一项工具...

weixin_42551310的博客 1733

com.google.gson.JsonIOException: Abstract classes can‘t be instantiated! Register an InstanceCreator

在项目目录下的gradle.properties文件中,加入android.enableR8.fullMode=false。利用gson解析数据模型的时候,提示这个错误,但类也不是abstract的,这个问题是因为。升级了升级的gradel 8.0+,开启了全量的R8。文章来自公众号:双码尾。

xiangwang2015的专栏 2472

Android编译优化之混淆配置

即在编译阶段将在语法层面一些底层字节码不支持的特性转换为基础的字节码结构,(比如 List 上的泛型脱糖后在字节码层面实际为 Object);Android 工具链对 Java8 语法特性脱糖的过程可谓丰富多彩,当然他们的最终目的是一致的:使新的语法可以在所有的设备上运行。

虎哥LoveDroid 4032

Android代码压缩工具R8详解 android.enableR8=true

前言 最近 Android Studio 稳定版迎来了3.3版本更新,带来的新特性之一是新一代的代码压缩工具 R8,本文将详细介绍这一新工具 R8。阅读本文内容前需了解: Android 中使用 Proguard 缩减代码 关于 R8 作为 Android 开发者,大家都知道缩减 APK 的大小是每个项目都需要面临的重要工作,而代码缩减有助于通过移除未使用的代码和资源来减少 APK 的大小,并...

weixin_34342207的博客 5822

Android Studio取消代理

网上有很多帖子介绍了如何设置代理 例如: 目录里找到gradle.properties文件,打开在里面加上如下代码: systemProp.https.proxyPort=1087 systemProp.http.proxyHost=127.0.0.1 android.enableJetifier=true android.enableR8=false org.gradle.jvmargs=-Xm...

thinbug的专栏 2918

Android混淆打包及混淆后运行错误

Android引用第三方jar包混淆时打包报错(can't find referenced class)            项目打包的时候,总是失败,提示Proguard returned with error code 1. See console。然后看控制台,报出好多can't find referenced class...... 场景:项目中引用了第三方的jar包 原因:第

wwangliw 3605

安卓应用在Android8.0莫名闪退

Unity接了华为sdk,评论一片骂说打开闪退,一直重现不出来,后来发现是8.0的系统才会。 原因是Activity为Translucent半透明模式导致的,都是谷歌大佬的锅,8.0为了支持全面屏搞出来的bug,8.1已经修复,但是无奈玩家不更新也没办法啊。 后来使用该方法解决了,直接看这个帖子吧。 https://blog.csdn.net/starry_eve/article/detai...

鱼蛋的开发小站 866

Android AGP升级到8.x导致的混淆问题(Class cannot be cast to java.lang.reflect.ParameterizedType)

最近升级了一下工具,结果打包的时候出问题了,类型转换异常(Class cannot be cast to java.lang.reflect.ParameterizedType)乍一看是混淆规则没写好,bean类转换出问题了,结果研究了一晚上才发现是AGP升级到8.x导致Retrofit的混淆问题。# 使用R8全模式,对未保留的类剥离通用签名。挂起函数被包装在使用类型参数的continuation中。# 如果不保留,R8完整模式将从返回类型中剥离通用签名。# 在R8全模式下,对未保留的类剥离通用签名。

qq_37324563的博客 1062
上一篇: 适配 AGP8.5,构建参数 targetSdk 等配置(六)
下一篇: 适配 AGP8.5,maven 私服发布报错(七)
Primer@.com
博客等级 码龄9年 524粉丝 292原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值