美文网首页
Unable to instantiate applicatio

Unable to instantiate applicatio

作者: 风月寒 | 来源:发表于2021-01-08 17:53 被阅读0次
    Unable to instantiate application xxx.xxx.HolidayApplication: java.lang.ClassNotFoundException: Didn't find class "xxx.xxx.HolidayApplication" on path: DexPathList[[zip file "/data/app/com.example.travalholiday-H0IMJI12auib7KNCt_OdJA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.travalholiday-H0IMJI12auib7KNCt_OdJA==/lib/arm, /data/app/com.example.travalholiday-H0IMJI12auib7KNCt_OdJA==/base.apk!/lib/armeabi-v7a, /system/lib, /hw_product/lib]]
    

    从网上找了很多资料,总结起来就是两种:

    1:打开设置:file->settings,搜索Instant Run,取消勾选Enable?Instant Run

    对于这种方法,可能针对android studio2.x的版本才有,而现在都是android studio 4.x ,在setting版面都没有这个选项了。所以该方法无效。

    2:更新gradle版本。

    3.5.0 - 3.5.4       5.4.1+
    3.6.0 - 3.6.4       5.6.4+
    4.0.0+              6.1.1+
    4.1.0+              6.5+
    

    上面是部分的插件版本与gradle的对应版本,因为现在一般都是用3.5.0的插件,前面的就不一一列举,如果想了解,请看:

    https://developer.android.google.cn/studio/releases/gradle-plugin#updating-plugin

    又是一顿操作,结果还是不行。

    最后,找到是因为使用了aspectj的原因。

    把对应的aspectj的什么都注释掉,运行成功了。

    但是具体的原因是啥,也是不清楚,记录下来,就是给大家一些提示。以后遇到这个问题可以往这个方向考虑。

    前面没有时间研究这个具体的原因,后面有时间,仔细的研究了一下,是因为aspectj这个第三方会导致application这个类在mainDex找不到,我们都知道,一般启动相关的类都会打入maindex中,但是由于找不到application,所以才会报上面的错误。

    我也按照网上的方法操作了一番,既然我们在miandex上找不到,那我们就将指定的.class打包到mainDex中。

    https://blog.csdn.net/weixin_30649859/article/details/99307011

    但是本人不才,试了很多种,都没有效果。

    后面改用了另外一种方法,不用第三方,直接用最原始的引用。

    classpath 'org.aspectj:aspectjtools:1.8.9'
    classpath 'org.aspectj:aspectjweaver:1.8.9'
    
    
    import org.aspectj.bridge.IMessage
    import org.aspectj.bridge.MessageHandler
    import org.aspectj.tools.ajc.Main
    
    final def log = project.logger
    final def variants = project.android.applicationVariants
    
    variants.all { variant ->
        if (!variant.buildType.isDebuggable()) {
            log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")
            return;
        }
        JavaCompile javaCompile = variant.javaCompile
        javaCompile.doLast {
            String[] args = ["-showWeaveInfo",
                             "-1.8",
                             "-inpath", javaCompile.destinationDir.toString(),
                             "-aspectpath", javaCompile.classpath.asPath,
                             "-d", javaCompile.destinationDir.toString(),
                             "-classpath", javaCompile.classpath.asPath,
                             "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
            log.debug "ajc args: " + Arrays.toString(args)
            MessageHandler handler = new MessageHandler(true);
            new Main().run(args, handler);
            for (IMessage message : handler.getMessages(null, true)) {
                switch (message.getKind()) {
                    case IMessage.ABORT:
                    case IMessage.ERROR:
                    case IMessage.FAIL:
                        log.error message.message, message.thrown
                        break;
                    case IMessage.WARNING:
                        log.warn message.message, message.thrown
                        break;
                    case IMessage.INFO:
                        log.info message.message, message.thrown
                        break;
                    case IMessage.DEBUG:
                        log.debug message.message, message.thrown
                        break;
                }
            }
        }
    }
    

    按照上面的这种方式,问题解决了。

    相关文章

      网友评论

          本文标题:Unable to instantiate applicatio

          本文链接:https://www.haomeiwen.com/subject/lovfaktx.html