关于java.lang.RuntimeException:Unable to instantiate activity ComponentInfo之可能的解决办法

关于Unable to instantiate activity ComponentInfo之可能的解决办法

最近遇上一个很坑爹的编译问题,代码在夜神模拟器上面跑正常,但是移到真机测试时,却出现具体如下问题

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
{com.xxxxxxxxx.android/com.xxxxxxxxx.JumpActivity}:java.lang.ClassNotFoundException: 
Didn't find class "com.xxxxxxxxx.JumpActivity" 
nativeLibraryDirectories=[/data/app/com.xxxxxxxxx.android-1/lib/arm, 
/data/app/com.xxxxxxxxx.android-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]] 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2721) 
...
...
...
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:806)  
Caused by: java.lang.ClassNotFoundException: 
Didn't find class "com.xxxxxxxxx.JumpActivity" on path: 
DexPathList[[zip file "/data/app/com.xxxxxxxxx.android-1/base.apk"],
nativeLibraryDirectories=[/data/app/com.xxxxxxxxx.android-1/lib/arm, 
/data/app/com.xxxxxxxxx.android-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]] 

网上大概也有类似的千奇百怪的情况和解答方法,不过我却是比较坑,s在自己一点一点摸索中意外才发现的。

先说明一下情况,我的JumpActivity已经在AndroidManifest注册了,

<activity
    android:name="com.xxx.JumpActivity"
    android:screenOrientation="portrait"
    android:theme="@style/MyAppTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    intent-filter>
activity>

如上所示,我并不是用android:name=”.JumpActivity”省略包名的写法了,当然咯,JumpActivity.java这个文件肯定是在目录下的,因此,我的问题并不是网上所说的两点解决办法引用一下别人的博客

1.最常见的原因是新建了一个activity,完成代码编写之后忘记了在Manifest.xml中配置注册该activity就会出现上面的异常。还有就是修改了activity的类名或者包名而没有在Manifest.xml文件中做相应的修改。

2.在注册activity时,省略报名直接用“.XxxActivity”来代替activity的全路径。比如下面的代码中默认的包名是”com.location.activity”(程序第3行),在注册activity的时候,若果activity确实是在该包下,则可以使用”.XxxActivity”来代替(注意activity类名前的点是不可以省略的!),当然也可以使用全路径如下面代码第11行所示。但如果所新建的activity不在默认的包下,此时省略包名直接用”.XxxActivity”来代替就会出现“java.lang.RuntimeException: Unable to instantiate activity ComponentInfo…”异常,这时必须用全路径来表示,格式如下面代码第11行所示,即包名+activity的名,如“xxx.xxx.xxx.XxxActivity”。

那么既然不能解决,肯定还是要继续找的吧,因此再说说另一个博客的解决办法再次引用一下
这个博主的解决办法是因为AS启用了Instant Run热更新,他解决的办法是把这个关掉,但是我仔细找了一下,发现我压根就没开热更啊。。。问题依然没有解决。。。

反反复复在AS中 Clean Project、Rebuild Project、SYNC Project 也都还是报这个错误,简直快让人崩溃了都。
郁闷之余,动手了改起了multidex这个东西,想说是不是分包搞的鬼,结果还是让人失望。
然而转折出现了,在把玩着build.gradle这些东西时,无意间发现,几个依赖的 model 的 defaultConfig 配置不一样

android {
    compileSdkVersion 25
    buildToolsVersion '27.0.1'
        defaultConfig {
           minSdkVersion 14
           targetSdkVersion 23
        }
}

有些 targetSdkVersion 是 22,有些是23,于是乎顺手改了一下,把他们统一成23了,sync一下,又run了一下,天了个噜,竟然可以正常安装了,而且功能也都正常。。。

赶紧记下这坑爹的一霸!

你可能感兴趣的:(移动开发,Android)