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

当dex分包遇上NoClassDefFoundError&ClassNotFoundException

简介 本文记录的是:国庆节前夕,解决Crash率高达9.08%问题成功避免加班拿3倍工资的故事 PS: 除了在时间上两者相遇外,本文中提到的两个(top1&top2)crash问题与dex分包并没有关系...: Didn’t find class “com.example.assistant.activity.SpaceCleanActivity” on path: DexPathList[[zip file...: Didn’t find class “com.example.assistant.activity.SpaceCleanActivity” on path: DexPathList[[zip file...dex中 这两个Crash在测试中不可复现 按常理,在主dex中的类,并不会出现NoClassDefFoundError/ClassNotFoundException这种Crash,不过谨慎起见我们还是对分包方案进行了一翻研究...线索2+线索3 -> Crash的触发操作:第一次创建Activity对象(BaseActivity是所有Activity的基类) 结论:根本原因在于推论1:“BaseActivity类之前初始化失败过

63820

当dex分包遇上NoClassDefFoundError & ClassNotFoundException

简介 本文记录的是:国庆节前夕,解决Crash率高达9.08%问题成功避免加班拿3倍工资的故事 PS: 除了在时间上两者相遇外,本文中提到的两个(top1&top2)crash问题与dex分包并没有关系...: Didn’t find class “com.example.assistant.activity.SpaceCleanActivity” on path: DexPathList[[zip file...: Didn’t find class “com.example.assistant.activity.SpaceCleanActivity” on path: DexPathList[[zip file...dex中 这两个Crash在测试中不可复现 按常理,在主dex中的类,并不会出现NoClassDefFoundError/ClassNotFoundException这种Crash,不过谨慎起见我们还是对分包方案进行了一翻研究...线索2+线索3 -> Crash的触发操作:第一次创建Activity对象(BaseActivity是所有Activity的基类) 结论:根本原因在于推论1:“BaseActivity类之前初始化失败过

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

    【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 )

    文章目录 一、DEX 字节码文件准备 二、拷贝 Assets 目录下的 classes2.dex 字节码文件到内置存储区 三、在 AndroidManifest.xml 清单文件中配置组件 四、启动 DEX...文件中的 Activity 一、DEX 字节码文件准备 ---- 在 dex_demo 应用 Module 中 , 创建 com.example.dex_demo.MainActivity2 类 ;...InvocationTargetException e) { e.printStackTrace(); } } } 三、在...: Didn't find class "com.example.dex_demo.MainActivity2" on path: DexPathList[[zip file "/data/app/com.example.classloader_demo-sAY0kit-c9kqTzgMRXYoBA...: Didn't find class "com.example.dex_demo.MainActivity2" on path: DexPathList[[zip file "/data/app/com.example.classloader_demo-sAY0kit-c9kqTzgMRXYoBA

    73910

    【连载】聊聊 APK——直接运行 Dex文件的黑魔法

    首先,我们先看看如何使用 Dex 文件在手机终端上输出一个 HelloWorld 编译和运行工具 学习过 Android 的人一定知道,在 Android OS 上跑的虚拟机曾经叫 dalvik,现在叫...Run HelloWorld 我们拿到了 class 文件和 dex 文件,那么在 jvm 上,我们只要使用 java HelloWorld 就搞定了。...之前如果有的小伙伴对于 Android 上的类加载器有所耳闻的话,我们还可以在这里故意输错类名,看一下堆栈输出,比如: > /sdcard $ dalvikvm -cp HelloWorld.dex HelloWorl...path: DexPathList[[dex file "HelloWorld.dex"],nativeLibraryDirectories=[/system/lib64, /system/lib64...: Didn't find class "HelloWorl" on path: DexPathList[[dex file "HelloWorld.dex"],nativeLibraryDirectories

    2.5K20

    【Android 逆向】Dalvik 函数抽取加壳 ② ( 类加载流程分析 | ClassLoader#loadClass 分析 | BaseDexClassLoader#findClass 分析 )

    则自己开始加载 // 如果自己加载不了 , 则继续委托给子节点执行加载 if (clazz == null) { clazz = findClass(className); } 实际上加载类的方法是...{ /** * 加载具有指定名称的类,可以选择在 * 装载。...这 * 参数在Android参考实现中被忽略; * 未解析类。 * @ClassNotFoundException * 如果找不到该类。 */ protected Class<?...); DexPathList pathList 成员在 BaseDexClassLoader 构造函数 , 即实例化时 , public BaseDexClassLoader(String dexPath...* * @param dexPath 包含类和 * 资源,由{@code File.pathSeparator}分隔,其中 * Android上的默认值为{@code”:“} * @param

    24930

    一个一年没解决的ClassNotFoundException|类加载机制探索

    : Didn't find class "com.kronos.sample.MainActivity" on path: DexPathList[[zip file "/data/app/com.kronos.router...对象,然后在findClass使用的就是这个DexPathList对象。...有没有可能是别的原因导致的呢,dex数组一开始在加载的时候就出现问题了呢????...结论 首先要多尊重下字节码,因为在插桩过程中并没有代码的有效性检查的情况下,我们没法保证我们插入的字节码是一个没有错误的代码,特别是在安卓中,因为多个.class文件会被打成一个.dex,如果其中有一个....class文件的格式有问题的情况下,就会导致这个dex挂载失败,然后吧就会抛出一些奇奇怪怪的类找不到的问题。

    2.2K41

    【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一、Android 命令行与 PC 可执行 JAR 文件不兼容 二、Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 Android...】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 ) , 出现的错误记录...开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 ) 三、编译在...resolution of: Lkotlin/jvm/internal/Intrinsics; at StudentKt.main(Unknown Source:2) Caused by: java.lang.ClassNotFoundException...: Didn't find class "kotlin.jvm.internal.Intrinsics" on path: DexPathList[[dex file "kotlin.dex"],nativeLibraryDirectories

    83310

    【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )

    文章目录 一、使用 DexClassLoader 获取组件类失败报错 二、失败原因分析 一、使用 DexClassLoader 获取组件类失败报错 ---- 在上一篇博客 【Android 逆向】启动...: Didn't find class "com.example.dex_demo.MainActivity2" on path: DexPathList[[zip file "/data/app/com.example.classloader_demo-sAY0kit-c9kqTzgMRXYoBA...: Didn't find class "com.example.dex_demo.MainActivity2" on path: DexPathList[[zip file "/data/app/com.example.classloader_demo-sAY0kit-c9kqTzgMRXYoBA...组件类失败了 ; 其中的最主要原因是 , 类加载器的双亲委派机制 , 加载 Android 组件类需要使用系统指定的类加载器 , 这些类加载器设置在 LoadedApk 实例对象中 , 并且这些类加载器只能从特定位置加载字节码文件..., 在 组件类加载器 和 最顶层的启动类加载器之间插入自定义的 DexClassLoader 类加载器即可 ;

    1.1K30

    热修复

    3、系统类加载器 SystemClassLoader 它负责加载系统类路径java -classpath或-D java.class.path 指定路径下的类库,也就是我们经常用到的classpath...的构造函数,其实DexPathList的findClass()方法很简单,就只是对Element数组进行遍历,一旦找到类名与name相同的类时,就直接返回这个class,找不到则返回null。...的分析,我们知道,安卓的类加载器在加载一个类时会先从自身DexPathList对象中的Element数组中获取(Element[] dexElements)到对应的类,之后再加载。...当ClassLoader加载到正确的类之后就不会去加载错误的类了 ,所以可以在dexElements中将正确的类放在错误类的前面就可以了。...找到错误的类之后,将错误的类打包程dex文件,将其放在dexElements中的最前方。

    92820

    解决java.lang.NoClassDefFoundError错误

    1、问题背景 在日常Java开发中,碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?...而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。...的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。...4、如何解决NoClassDefFoundError错误 根据前文,很明显NoClassDefFoundError的错误是因为在运行时类加载器在classpath下找不到需要加载的类,所以我们需要把对应的类加载到...classpath中,或者检查为什么类在classpath中是不可用的,这个发生可能的原因如下: 1、对应的Class在java的classpath中不可用 2、你可能用jar命令运行你的程序,但类并没有在

    49410

    【译】NoClassDefFoundError和ClassNotFoundException的不同

    :Difference between NoClassDefFoundError vs ClassNotFoundExcepiton in Java ---- 如果JVM或者ClassLoader在加载类时找不到对应的类...另外一方面,ClassNotFoundException和编译期没什么关系,当你在程序运行时利用反射加载类时,就可能遇到ClassNotFoundException异常,例如加载SQL驱动时,对应的类加载器找不到驱动类...下找不到对应的类而引起的,通常是缺少对应的jar包,不过,JVM认为:(1)当应用运行时没有找到对应的引用,则会抛出java.lang.NoClassDefFoundError;(2)当你在代码中显式加载类...如果你在J2EE开发中遇到NoClassDefFoundError,那么最有可能的原因就是存在多个类加载器和多个目标类,即我们常说的Jar包冲突——关于Jar包冲突,一般可以使用下面两种方法解决: 使用...NoClassDefFoundError是链接错误,发生在链接阶段,当解析引用的时候找不到对应的类,就会抛出java.lang.NoClassDefFoundError;ClassNotFoundException

    1.3K10
    领券