Android应用闪退异常java.lang.RuntimeException: Unable to instantiate application


1.闪退异常的出现

开发过程中测试的时候一般都是打的debug包来测试,但是昨天打的debug包突然出现一个很棘手的问题,一直没找到原因,本来项目在手机上直接部署是没问题的,但是打个debug包给测试,安装之后一打开就闪退,捕捉一下日志,发现闪退异常java.lang.RuntimeException: Unable to instantiate application。当时以为是配置文件的问题,可以查看之后发现配置文件是正常的,于是只能求助于百度了。

2.蒙圈的解决方案(不管怎么说,的确解决了问题)

当时以为是配置文件的问题,可以查看之后发现配置文件是正常的,于是百度了一下,有好多博客的解决方案是修改工程下 build.gradleclasspath 'com.android.tools.build:gradle:x.x.x',然后问题果然解决了,完美。

dependencies {
        //classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.android.tools.build:gradle:2.2.3'
}

3.更好的解决方案(是真的好)

但是之后我想了一个问题,难道软件升级之后变垃圾了吗,还不如老版本吗,我想Google的不会这么傻,新版本肯定会出新功能,更加便于我们开发,难道以后遇到这个问题之后就只能用老的版本号吗,那岂不是无法用到新的功能了,于是我又想到在stackoverflow上面搜索类似问题的解答,还真让我找到了一个更好的解决方案 Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication ?。(PS:不要问我为啥一开始不在stackoverflow找解决方案,我会告诉你每次打开stackoverflow需要花5分钟吗)

File → Settings → Build, Execution, Deployment → Instant Run
关闭 Enable Instant Run

Android应用闪退异常java.lang.RuntimeException: Unable to instantiate application_第1张图片

4.新的问题又来了,啥是Instant Run?

问题是解决了,但是为什么关闭Instant Run之后问题就解决了呢?本着求知的态度,我有查找了Instant Run的资料。

Instant Run 也就是即时运行,为了减少我们开发过程中每次更改后的部署时间,就有了即时运行的机制,也就是说我们只要build的过一次之后,之后我们再次部署出来的APP只是在初次部署的基础上直接加入我们的更改,而不是从新构建一个新的,能够节省我们时间。

提供两个比较好的博主写的关于即时运行的帖子
android studio 2.0即时运行功能探秘 这篇介绍的Instant Run比较详细,又想去的可以仔细研读。
Android Studio 2.3版本 Run项目不能自动启动APP(即时运行)问题 这篇文章同时也解答了为什么更改gradle版本号可以解决问题的原因。

你可能感兴趣的:(Android)