V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lanxiner
V2EX  ›  Android

ClassNotFoundException Didn't find class *

  •  
  •   lanxiner · 2022-04-03 17:03:29 +08:00 · 9525 次点击
    这是一个创建于 996 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目依赖了一个 jar 包,使用其中的一个自定义 view 时,运行时报错 [ ClassNotFoundException Didn't find class *] 。 反编译后发现 dex 中确实缺少这个自定义 view 的 class 。 1.jar 包放在其他项目都 ok 的。 2.我们这个项目时间比较久多 dex 的问题已经处理过了,而且项目我集成其他 jar 也没有报这个错误。

    网上找的办法都试过了,没有任何头绪说什么现在不知都啥原因,已经影响项目进度了。 球球各位大神帮忙分析下。

    第 1 条附言  ·  2022-04-04 12:40:51 +08:00
    以下时这个 jar 包里面的根目录结构,看起来确实不太规范。 是不是跟其他同样不规范的 jar 包目录冲突了
    a
    b
    a
    com
    a
    mozilla
    common
    http
    pinyindb
    第 2 条附言  ·  2022-04-04 16:12:06 +08:00
    我注意到这一段在打包时候的异常信息,是否可以协助排查错误源头。
    trouble in:
    class d.a.a.b.h.b extends java.lang.Object implements java.security.PrivilegedAction:
    private final String a [Synthetic]
    void <init>(String):
    ALOAD_0
    DUP
    INVOKESPECIAL java.lang.Object.<init> ()V
    constructor-execution(void d.a.a.b.h.b.<init>(java.lang.String))
    | ALOAD_1
    | PUTFIELD d.a.a.b.h.b.a Ljava/lang/String;
    | RETURN
    constructor-execution(void d.a.a.b.h.b.<init>(java.lang.String))
    end void <init>(String)

    public Object run():
    method-execution(java.lang.Object d.a.a.b.h.b.run())
    | method-call(java.lang.ClassLoader d.a.a.b.h.c.f())
    | | INVOKESTATIC d.a.a.b.h.c.f ()Ljava/lang/ClassLoader;
    | method-call(java.lang.ClassLoader d.a.a.b.h.c.f())
    | DUP
    | ASTORE_1
    | IFNULL L0
    | catch java.lang.ClassNotFoundException -> E0
    | | ALOAD_1
    | | ALOAD_0
    | | GETFIELD d.a.a.b.h.b.a Ljava/lang/String;
    | | method-call(java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String))
    | | | INVOKEVIRTUAL java.lang.ClassLoader.loadClass (Ljava/lang/String;)Ljava/lang/Class;
    | | method-call(java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String))
    | catch java.lang.ClassNotFoundException -> E0
    | ARETURN
    | E0: NOP
    | POP

    method-execution(java.lang.Object d.a.a.b.h.b.run())
    end public Object run()

    end class d.a.a.b.h.b

    java.lang.NullPointerException
    5 条回复    2022-05-05 09:32:53 +08:00
    tuimaochang
        1
    tuimaochang  
       2022-04-03 18:50:14 +08:00
    检查 proguard-rules.pro ,是否被混淆了
    Jooooooooo
        2
    Jooooooooo  
       2022-04-03 18:54:07 +08:00
    包冲突了, 有其它的 jar 有相同的路径.
    yoloMiss
        3
    yoloMiss  
       2022-04-03 19:58:32 +08:00
    jar 包内有同名路径,需要排除一下。
    lanxiner
        4
    lanxiner  
    OP
       2022-04-04 12:40:58 +08:00
    @tuimaochang 我的 APP 没有开启混淆,会受混淆的影响吗?
    lanxiner
        5
    lanxiner  
    OP
       2022-05-05 09:32:53 +08:00
    问题解决了, 是 aspectJ 切入代码造成的愿意, 已经配置了不切入该框架的代码.
    之前使用支付宝 sdk 时也遇到过同样的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3437 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:57 · PVG 12:57 · LAX 20:57 · JFK 23:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.