美文网首页
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