当前位置: 首页 > news >正文

Android8 Didn‘t find class “com.android.settings.SettingsApplication“ on path: DexPathList

文章目录

  • 问题
  • 分析
  • 解决过程记录
    • 确认SettingsApplication.java被编译
    • 强制添加classes.dex
  • Android相关专栏

问题

RK android8.1内置了3个自己开发的system应用,就会一直崩溃报这个错误

Didn't find class "com.android.settings.SettingsApplication" on path: DexPathList, Suppressed: java.io.IOException: No original dex files found for dex location /system/priv-app/Settings/Settings.apk

如果只内置3个以下,则不会有这个问题。

出问题时的logcat打印如下:

RK android8.1内置了3个自己开发的system应用,就会报这个错误,如果只内置3个以下,则不会有这个问题,怎么解决: 2026-01-26 15:36:03.424 1674-1674 Process com.android.settings I Sending signal. PID: 1674 SIG: 9 2026-01-26 15:36:03.461 25337-25569 ActivityManager system_server I Process com.android.settings:CryptKeeper (pid 1674) has died: fore TPSL 2026-01-26 15:36:03.462 25337-25354 zygote64 system_server W kill(-1674, 9) failed: No such process 2026-01-26 15:36:03.462 25337-25354 zygote64 system_server I Successfully killed process cgroup uid 1000 pid 1674 in 0ms 2026-01-26 15:36:03.473 25337-25569 ActivityManager system_server I START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.settings/.CryptKeeper} from uid 0 2026-01-26 15:36:03.506 25337-25569 ActivityManager system_server I Start proc 1701:com.android.settings:CryptKeeper/1000 for activity com.android.settings/.CryptKeeper 2026-01-26 15:36:03.513 25337-25352 ActivityManager system_server E getPackageFerformanceMode--ComponentInfo{com.android.settings/com.android.settings.CryptKeeper}----com.android.settings 2026-01-26 15:36:03.618 1701-1701 AndroidRuntime com.android.settings D Shutting down VM 2026-01-26 15:36:03.620 1701-1701 AndroidRuntime com.android.settings E FATAL EXCEPTION: main Process: com.android.settings:CryptKeeper, PID: 1701 java.lang.RuntimeException: Unable to instantiate application com.android.settings.SettingsApplication: java.lang.ClassNotFoundException: Didn't find class "com.android.settings.SettingsApplication" on path: DexPathList[[zip file "/system/priv-app/Settings/Settings.apk"],nativeLibraryDirectories=[/system/priv-app/Settings/lib/arm, /system/priv-app/Settings/Settings.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /system/lib, /vendor/lib]] at android.app.LoadedApk.makeApplication(LoadedApk.java:989) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5715) at android.app.ActivityThread.-wrap1(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.settings.SettingsApplication" on path: DexPathList[[zip file "/system/priv-app/Settings/Settings.apk"],nativeLibraryDirectories=[/system/priv-app/Settings/lib/arm, /system/priv-app/Settings/Settings.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /system/lib, /vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.Instrumentation.newApplication(Instrumentation.java:1087) at android.app.LoadedApk.makeApplication(LoadedApk.java:983) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5715) at android.app.ActivityThread.-wrap1(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Suppressed: java.io.IOException: No original dex files found for dex location /system/priv-app/Settings/Settings.apk at dalvik.system.DexFile.openDexFileNative(Native Method) at dalvik.system.DexFile.openDexFile(DexFile.java:353) at dalvik.system.DexFile.<init>(DexFile.java:100) at dalvik.system.DexFile.<init>(DexFile.java:74) at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374) at dalvik.system.DexPathList.makeDexElements(DexPathList.java:337) at dalvik.system.DexPathList.<init>(DexPathList.java:157) at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65) at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64) at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:73) at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:88) at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:69) at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:35) at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:693) at android.app.LoadedApk.getClassLoader(LoadedApk.java:727) at android.app.LoadedApk.getResources(LoadedApk.java:954) at android.app.ContextImpl.createAppContext(ContextImpl.java:2270) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639) ... 8 more 2026-01-26 15:36:03.626 25337-25569 ActivityManager system_server W Force finishing activity com.android.settings/.CryptKeeper 2026-01-26 15:36:03.636 1701-1701 Process com.android.settings I Sending signal. PID: 1701 SIG: 9 2026-01-26 15:36:03.671 25337-25569 ActivityManager system_server I Process com.android.settings:CryptKeeper (pid 1701) has died: fore TPSL 2026-01-26 15:36:03.673 25337-25354 zygote64 system_server W kill(-1701, 9) failed: No such process 2026-01-26 15:36:03.676 25337-25354 zygote64 system_server I Successfully killed process cgroup uid 1000 pid 1701 in 4ms 2026-01-26 15:36:03.680 25337-25569 ActivityManager system_server I START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.settings/.CryptKeeper} from uid 0 2026-01-26 15:36:03.713 25337-25569 ActivityManager system_server I Start proc 1728:com.android.settings:CryptKeeper/1000 for activity com.android.settings/.CryptKeeper 2026-01-26 15:36:03.721 25337-25352 ActivityManager system_server E getPackageFerformanceMode--ComponentInfo{com.android.settings/com.android.settings.CryptKeeper}----com.android.settings 2026-01-26 15:36:03.831 1728-1728 AndroidRuntime com.android.settings D Shutting down VM

分析

com.android.settings(Settings APK)在启动 CryptKeeper 时崩溃了,错误原因是:

java.lang.ClassNotFoundException: Didn't find class "com.android.settings.SettingsApplication"

这说明 Settings.apk 的代码结构或构建方式存在问题,尤其是添加了多个自研 system app 后触发了这个问题。虽然表面上看是“超过3个就出错”,但根本原因很可能是 系统资源限制、Dex 加载机制、或构建/打包冲突 导致 Settings 应用的类加载失败。

可能的原因包括:

  1. A. Dex 分包(MultiDex)问题 / 超过单个 Dex 方法数限制(65536)
    Android 8.1 默认使用 ART,但仍受方法数限制影响。
    如果内置的多个系统 App 都放在 /system/priv-app 或 /system/app,并且它们和 Settings 共享同一个 classloader 上下文(比如都属于 system uid),可能会导致 全局方法数超限,进而影响 Settings 的 Dex 加载。
    更可能的是:build 系统在打包 system image 时,对 priv-app 的处理有 bug,当 priv-app 数量增多时,某些 APK 的 dex 未被正确优化(odex/mixed oat)或索引丢失。
  2. B. APK 未正确 odex / oat 编译
    在 Android 8.1,系统应用通常会在首次启动前由 installd 或 dex2oat 预编译为 .oat 文件。
    如果你直接把 APK 放入 priv-app 目录但未正确配置 Android.mk 或 Android.bp,可能导致:
    没有生成 .odex / .oat
    或者 classes.dex 被剥离(仅保留 oat),但 oat 损坏或不兼容
    当系统尝试加载 SettingsApplication 时,找不到原始 dex,就报:
Suppressed: java.io.IOException: No original dex files found for dex location ...

解决过程记录

确认SettingsApplication.java被编译

修改packages/apps/Settings/src/com/android/settings/SettingsApplication.java
在里面胡乱添加一些字符,让它编译不过,然后重新执行编译,如果编译报错说明是编译上的。

强制添加classes.dex

Suppressed: java.io.IOException: No original dex files found for dex location /system/priv-app/Settings/Settings.apk

这通常意味着:
APK 中没有 classes.dex
或系统期望从 .oat 反向加载 dex,但 oat 损坏

强制保留 classes.dex(即使开启 preopt)
在 packages/apps/Settings/Android.mk 中添加:

# 即使开启 DEX_PREOPT,也保留原始 dex 在 APK 中 LOCAL_DEX_PREOPT := nostripping

nostripping:生成 oat,但 不删除 APK 中的 classes.dex
默认是 true(会 strip 掉 dex)
然后重新编译 Settings:

m-jSettings

再检查 APK:

unzip-lout/target/product/xxx/system/priv-app/Settings/Settings.apk|grepclasses.dex

应该能看到 classes.dex。

这样再编译,就正常了,系统开机不崩溃了。
但是有一些系统应用也会有同样的问题,打开会失败,比如Music音乐应用:

类似的,可以单独修改Music:

packages/apps/Music/Android.mk
LOCAL_PATH := $ (call my-dir) include $ (CLEAR_VARS) LOCAL_PACKAGE_NAME := Music LOCAL_CERTIFICATE := platform LOCAL_SRC_FILES := $ (call all-java-files-under, src) LOCAL_RESOURCE_DIR := $ (LOCAL_PATH)/res # 👇 关键:保留 classes.dex LOCAL_DEX_PREOPT := nostripping include $ (BUILD_PACKAGE)

Android相关专栏

Android Framework专栏链接
Android专栏
作者:帅得不敢出门

http://www.jsqmd.com/news/463483/

相关文章:

  • sqlilabs靶场搭建与sql语句
  • 我的思维模型 - 9. 个人篇
  • 一站式基建集成——SFTP 服务器管理工具
  • 麦橘超然参数详解:提示词、种子、步数优化实战指南
  • 豆包 力扣 761. 特殊的二进制字符串 public String makeLargestSpecial(String s)
  • 人工智能|大模型—— 开发 ——Agent Skills设计详解
  • 从 0 到 1 安装 TRAE:国内 / 国际版双流程指南
  • webpack 学习
  • 文本处理的 CI/CD:用 NLP 静态分析解决查重飘红与 Format Error
  • 弦音墨影效果实测:Qwen2.5-VL在弱光、逆光、雾天监控视频中的鲁棒性
  • OFA视觉问答模型镜像优势:永久禁用MODELSCOPE_AUTO_INSTALL_DEPENDENCY机制解析
  • FreeRtos学习中疑惑
  • 电子游戏与人类“存续与复制”的近端机制
  • Makefile相关
  • 为什么选择科哥构建版?IndexTTS2定制镜像优势全面解析
  • C语言数据结构系列:链表详解与代码示例
  • 【2026 最新 !】分享一套优质的 SpringBoot+Vue 高校就业招聘系统的设计与实现(万字文档+源码+视频文档讲解)
  • 线程同步与互斥
  • webase部署智能合约失败报错:合约部署错误,请检查合约的构造函数入参或检查链状态...如何解决?
  • YOLO目标检测数据集大全【数据集+训练好的模型+训练检测教程】(持续更新)
  • 订单提现管理系统
  • 代码都没啥问题,Xuper超级链上创建合约时为什么solidity合约还是编译失败?
  • 对抗知网的 N-Gram 算法:基于语义解耦的【文本重构】与【事实性核验】架构设计
  • 纯VB6代码实现稳定多线程(源码下载,非ActiveX EXE)
  • 商城项目中用到的一些ubuntu系统指令
  • Ren‘Py给不同的角色安排不同的对话框
  • Agent开发学习
  • Crmeb.java项目理解(一)
  • HTB Tracks - REVERSE - SimpleEncryptor
  • Python中继承带来的问题