Android 混淆问题排查

Unity 2022 LTS 安卓打包:Gradle 7.4 配置与 3 种常见 Gradle 报错解决方案 本文详细解析了Unity 2022 LTS版本中安卓打包的Gradle 7.4配置方法,并提供了三种常见Gradle报错的解决方案,包括版本不匹配、R8代码优化报错和SDK工具过时问题,帮助开发者高效完成安卓APK打包。 阅读详情

问题

近期在开发过程中,突然出现混淆后程序出现运行时异常,编译是正常的,不混淆也是正常的, 错误信息如下提示

12-07 14:10:27.056 10603-10603/? E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate application com.xzxj.frame.base.BaseApplication: java.lang.ClassCastException: com.xzxj.frame.base.BaseApplication cannot be cast to android.app.Application
        at android.app.LoadedApk.makeApplication(LoadedApk.java:587)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4891)
        at android.app.ActivityThread.-wrap1(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1530)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5692)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
     Caused by: java.lang.ClassCastException: com.xzxj.frame.base.BaseApplication cannot be cast to android.app.Application
        at android.app.Instrumentation.newApplication(Instrumentation.java:1001)
        at android.app.Instrumentation.newApplication(Instrumentation.java:986)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:582)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4891) 
        at android.app.ActivityThread.-wrap1(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1530) 
        at android.os.Handler.dispatchMessage(Handler.java:111) 
        at android.os.Looper.loop(Looper.java:207) 
        at android.app.ActivityThread.main(ActivityThread.java:5692) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)

思路

1、通过上面的错误信息首先会去排查AndroidManifest.xml文件是否注册了Appliction,发现都是注册好的。 2、考虑到关闭混淆正常,开启混淆异常,那么就定位到时混淆的问题 3、既然是混淆问题那就查看混淆配置文件proguard-rules.pro,基本的配置都已经防混淆了 4、接下来的思路就是通过反编译来查看BaseApplication到底出了啥额问题

过程

第一步

我们看到下面反编译的代码

我们的BaseApplication继承的application被混淆了 那么在’proguard-rules.pro’中加入一句-keep class android.app.**{*;}

运行后报错如下:

12-10 15:16:07.442 15939-15939/? E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.VerifyError: Rejecting class com.xzxj.frame.base.BaseApplication because it failed compile-time verification (declaration of 'com.xzxj.frame.base.BaseApplication' appears in /data/app/com.xzxj-1/base.apk:classes2.dex)
        at java.lang.Class.newInstance(Native Method)
        at android.app.Instrumentation.newApplication(Instrumentation.java:1001)
        at android.app.Instrumentation.newApplication(Instrumentation.java:986)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:582)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4891)
        at android.app.ActivityThread.-wrap1(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1530)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5692)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)

看到错误信息变化了,心里应该开心,看来离解决问题更近一步了。

第二步

我们继续反编译,看到继承的接口还是有问题的,虽然感觉不是这个引起的但是强迫症,把接口防混淆,加入如下代码: -keep interface com.xzxj.frame.** { *; }

第三步

运行后依然是同样的错误信息,反编译后代码如下:

此时对比代码分析,应该是如下问题造成的, 混淆前:

public static Context getBaseApplication() {
        return instance;
}

混淆后:

public static j a()
{
  return b;
}

看来Context也被混淆了,接下来在’proguard-rules.pro’中加入一句-keep class android.content.**{*;}

第四步:

接下来就是见证奇迹的时刻,果然运行正常,我们看一下混淆后的代码

结论

综上,我们可以分析出来是我们的android包下面的文件都被混淆了,于是我们把-keep class android.content.**{*;}和-keep class android.app.**{*;}合二为一-keep class android.**{*;} 不过按照道理来讲这个不应该被混淆,系统会做处理,猜测可能是某个配置导致系统的一些配置失效,至于该工程为啥这么奇葩待后续分析。

所以以后遇到混淆的问题就按照提示一步一步排查,一定要反编译文件来分析问题,不然无法定位原因。

还有第一次混淆后建议反编译查看一下包里面的代码,有没有需要混淆的核心代码被keep掉了。

加群:Android进阶群 4112676  可以免费获取下方资料哦

告别视频黑屏!UniApp安卓离线打包集成VideoPlayer模块保姆级教程(附aar文件处理与混淆配置) 本文提供UniApp安卓离线打包集成VideoPlayer模块的完整教程,涵盖aar文件获取、Gradle配置、混淆规则设置等关键步骤,帮助开发者解决视频黑屏等常见问题,实现高效视频播放功能。 阅读详情

相关推荐

安卓逆向工程实战:从静态分析到动态调试的完整技术路径

逆向工程是理解软件内部工作机制的关键技术,其核心原理是通过分析程序的二进制代码或运行时行为,还原其设计逻辑与算法实现。这项技术在软件安全评估、漏洞挖掘、协议分析和兼容性开发等领域具有重要价值。在移动安全领域,安卓应用逆向分析尤为常见,涉及对APK文件的解包、反编译、代码审计及动态行为监控。通过静态分析工具(如JADX、Apktool)可初步探查代码结构,而动态调试技术(如基于smalidea的调试或Frida框架)则能实时捕获运行时数据与算法细节。本文以一次典型的安卓应用逆向分析实战为例,系统演示了从环境搭

weixin_34176694的博客 439

android 混淆后的异常信息 工具处理

D:\Android\sdk\tools\proguard\bin\proguardgui.bat 工具在SDK中的位置,有的SDK版本不同这个工具的具体位置可能有改变,也可以在tools中直接搜索proguardgui.bat,双击运行即可。3、Obfuscated stack trace输入你收集到的异常信息,注意是异常信息,并不是我们刚才收集的那些所有的信息,刚才收集的信息中还包含了手机的一些信息,这些不需要,只复制这些到输入框。混淆前后类、方法、类成员等的对照。APK文件中所有类的内部结构。

青铜的博客 929

OpenResty无损升级内嵌nginx版本0DAY漏洞

OpenResty无损升级内嵌nginx版本,nginx

qq1071643762的博客 6903

使用android studio过程中遇到的异常

1.dexDebug ExecException finished with non-zero exit value 2 需要在gradle中配置下面的代码,原因是引用了多个libraries文件 defaultConfig {         multiDexEnabled true } 2.Execution failed for task ':app

nicolelili1的专栏 1万+

从零到一:基于Rocky Linux 9的Kubernetes高可用集群部署实战

本文提供了一份基于Rocky Linux 9操作系统,从零开始部署Kubernetes高可用集群的完整实战指南。详细讲解了包括系统初始化、容器运行时配置、使用kubeadm工具进行集群初始化、节点加入以及Calico网络插件安装在内的核心步骤,并针对国内网络环境提供了镜像加速等优化方案,旨在帮助读者构建一个稳定可靠的生产级K8s环境。

weixin_29197835的博客 135

蓝牙HCI Dongle实战:从芯片选型到协议栈集成的完整指南

本文详细介绍了蓝牙HCI Dongle的实战应用,从芯片选型到协议栈集成的完整指南。通过对比CSR8510、nRF52840等主流芯片的性能和价格,提供选型建议和避坑技巧。同时,深入解析Zephyr协议栈移植和常见问题排查,帮助开发者高效完成蓝牙项目开发。

weixin_30786657的博客 321

Android混淆配置(含androidx、kotlin)

Android混淆配置(含androidx、kotlin)

weixin_42602900的博客 5366

新手避坑指南:HT7036计量芯片SPI读取电压的完整流程(从复位到校准)

本文详细介绍了HT7036计量芯片的SPI读取电压完整流程,从硬件准备到校准设置,重点解析了复位引脚处理、SPI通信配置、芯片初始化及数据处理等关键步骤。针对常见问题如晶振焊接、SPI时序错误等提供实用解决方案,帮助开发者高效完成电压测量与校准。

weixin_30070339的博客 326

Android代码混淆及调试错误

Android代码混淆及调试错误

nightrainljh的专栏 2842

十一、增强现实

那都是n年前的老版本了,新版本完全没有这个问题,我就是纠结这个问题,搭建若干环境,又是vmware虚拟机,又是msys2,又是anaconda,又是找机器,折腾了几天,结果通通不是。以一张实际卡片为锚点,通过笔记本的摄像头,在显示器上将一个计算机内的3d物体显示在卡片上,类似于电影上看到的那种全息投影技术;如果你是想在windows环境下开发linux运行程序,那么CygWin/gcc是你的不二之选。而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择。

3188

YOLOv11涨点改进 | 全网独家创新,注意力改进篇 | TGRS 2025 | 引入APCM自适应像素级协同机制,动态增强目标区域、抑制背景噪声,助力YOLOv11做红外小目标检测有效涨点

本文提出了一种基于APCM模块改进的YOLOv11网络模型,通过像素级局部-全局协同建模增强目标特征并抑制背景噪声。APCM模块采用轻量化设计,无需复杂参数,能有效提升小目标检测性能。文章详细介绍了APCM的原理、优势及其在红外小目标检测中的应用,包括模块结构、核心代码实现和YAML配置文件修改方法。实验结果表明,该方法在NUAA-SIRST和IRSTD-1K数据集上优于现有技术,显著提高了复杂场景下的检测精度与鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 116

Android混淆处理

在应用发布前,需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读。Android Studio自身集成Java语言的ProGuard作为压缩,优化、混淆和预检工具,配合Gradle构建工具使用很简单,只需要在工程应用目录的gradle文件中设置minifyEnabled为true即可。然后我们就可以到proguard-rules.pro文件中加入我们的混淆规则了。ProGuard一共包...

FanJin的博客 938

2025 提高电力交易价格预测的疾风大模型方法综述

电力现货市场价格预测正转向大模型驱动的新范式。传统方法在极端波动、政策突变等场景下表现不佳,而Transformer、预训练时序模型(如Chronos-Bolt)和LLM混合框架展现出显著优势。关键技术包括多模态数据融合、两段式预训练微调、MoE架构和LLM-RAG增强解释性。案例显示,澳大利亚NSW市场误差降低43%,但混合模型路由仍必要。未来趋势涵盖数字孪生电网和多智能体竞价,需平衡模型创新与行业合规要求。大模型通过跨域学习与业务耦合提升预测,但需持续优化数据隐私、算力消耗和极端事件应对能力。

专注AI大模型,软件混淆,授权 1052

不混淆某个方法_Android 混淆问题排查

问题近期在开发过程中,突然出现混淆后程序出现运行时异常,编译是正常的,不混淆也是正常的, 错误信息如下提示12-07 14:10:27.056 10603-10603/? E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate application com.xzxj.fra...

weixin_34722015的博客 1222

2025华为杯第二十二届中国研究生数学建模竞赛C题:围岩裂隙精准识别与三维模型重构 - 完整解题分析+完整MATLAB源码!(下篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1618

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android looper_Android 混淆问题排查

问题近期在开发过程中,突然出现混淆后程序出现运行时异常,编译是正常的,不混淆也是正常的, 错误信息如下提示12-07 14:10:27.056 10603-10603/? E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate application com.xzxj.fra...

weixin_39913472的博客 271

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android-Proguards常见问题排查:解决混淆后的崩溃问题

Android应用开发中,代码混淆是保护应用安全的重要手段,但混淆配置不当常常导致应用崩溃。本文将详细介绍如何使用`android-proguards`项目解决混淆后的常见问题,帮助开发者快速定位并修复`ClassNotFoundException`、`NoSuchMethodError`等典型错误。通过学习本文,你将掌握实用的配置技巧和排查方法,确保应用在混淆后依然稳定运行。 ## 一、混淆崩

gitblog_00019的博客 437

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

Android代码混淆实战手册:从R8配置到疑难问题排查

本文详细介绍了Android代码混淆的实战指南,从R8配置到疑难问题排查。涵盖混淆规则编写、第三方库处理、自定义字典技巧,以及崩溃日志分析和持续集成实践,帮助开发者有效保护应用安全并优化性能。

spark7igniter的博客 214

MyBookshelf代码混淆终极指南:ProGuard规则编写实践与优化技巧

MyBookshelf是一款功能强大的开源阅读应用,为广大网络文学爱好者提供自定义来源阅读网络内容的工具。作为一款Android应用,代码混淆是保护应用安全、减小APK体积的关键技术。本文将详细介绍MyBookshelf项目的ProGuard代码混淆配置实践,帮助开发者掌握专业的代码混淆技巧。 ## 为什么需要代码混淆?🔒 代码混淆是Android应用开发中不可或缺的安全措施。在MyBook

gitblog_00691的博客 695

Android代码混淆实战:ProGuard配置与优化技巧

代码混淆是Android应用安全加固的核心技术,通过重命名类名、方法名等标识符,有效防止反编译和逆向工程。ProGuard作为官方推荐工具,集成了代码压缩、优化和混淆功能,能显著减小APK体积并提升安全性。在工程实践中,合理的ProGuard配置可解决第三方库兼容性、资源ID冲突等典型问题,特别适用于金融、电商等对安全性要求较高的应用场景。通过结合mapping文件管理和CI/CD集成,可以构建持续可靠的混淆体系。本文以电商App优化案例为基础,详解如何通过-keep规则保留关键类,使用增量混淆提升大型项目

weixin_33747129的博客 407

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

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

qijingwang的博客 1550

Android中webview加载jsoup解析的HTML数据崩溃异常

jsoup在Android中的异常

qq_36113746的博客 136

Android:记录一个打包发布版的release包以后闪退的问题

个人感觉其实release闪退的问题挺难排查的,因为release包运行起来as捕获不到相应的应用程序进程,从而不易查看到日志,也是我玩得不溜,大家有不同的方法可以评论区探讨,我也定期回复一些评论一起讨论。

Spy003的博客 1318

Android代码混淆后的定位

Android代码混淆后的定位什么是代码混淆如何开启Android Studio的代码混淆如何在程序奔溃后定位到奔溃的代码行mapping.txt分析流程 什么是代码混淆 在java写的.java文件后,使用javac编译成.class文件,在编译的过程,不像C/C++或C#那样编译时进行加密或混淆,它是直接对其进行符号化、标记化的编译处理,于是,也产生了一个逆向工程的问题:可以根据.class文件反向解析成原来的java文件! Android应用程序很大一部分都是使用Java语言编写的,在发布自己的程序的

Android开发者 1820

记录一次因为代码混淆导致的安卓app崩溃的事件

调用第三方库,没有设置忽略代码混淆,导致安卓app崩溃。

sspdfn的专栏 625
上一篇: Android 平铺背景图片
下一篇: Android浸入式
动脑学院[David]
博客等级 码龄8年 44粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值