闪退异常的出现
开发过程中测试的时候一般都是打的debug包来测试,但是打个debug包给测试,安装之后一打开就闪退,捕捉一下日志,发现闪退异常java.lang.RuntimeException: Unable to instantiate application。当时以为是配置文件的问题,可以查看之后发现配置文件是正常的,于是只能求助于百度了。
方案1
当时以为是配置文件的问题,可以查看之后发现配置文件是正常的,于是百度了一下,有好多博客的解决方案是修改工程下 build.gradle 的 classpath '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'
}
方案2
但是之后我想了一个问题,难道软件升级之后变垃圾了吗,还不如老版本吗,我想Google的不会这么傻,新版本肯定会出新功能,更加便于我们开发,难道以后遇到这个问题之后就只能用老的版本号吗,那岂不是无法用到新的功能了,于是我又想到在stackoverflow上面搜索类似问题的解答,还真让我找到了一个更好的解决方案 Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication ?
File → Settings → Build, Execution, Deployment → Instant Run
关闭 Enable Instant Run
为啥是Instant Run?
问题是解决了,但是为什么关闭Instant Run之后问题就解决了呢?本着求知的态度,又查找了Instant Run的资料。
Instant Run 也就是即时运行,为了减少我们开发过程中每次更改后的部署时间,就有了即时运行的机制,也就是说我们只要build的过一次之后,之后我们再次部署出来的APP只是在初次部署的基础上直接加入我们的更改,而不是从新构建一个新的,能够节省我们时间。
提供两个比较好的博主写的关于即时运行的帖子
android studio 2.0即时运行功能探秘 这篇介绍的Instant Run比较详细,又想法的可以仔细研读。
Android Studio 2.3版本 Run项目不能自动启动APP(即时运行)问题 这篇文章同时也解答了为什么更改gradle版本号可以解决问题的原因。