AndroidRuntime(21900): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo

情况描述:在我将adt升级到最新版,sdk升级到最新版后,创建了一个2.2版本的android程序,引用了一个以前自己写的CommandLibs公共类库。根据自己之前写的项目从写了一个很简单的页面,自认代码都写的比较规范,应该不会犯一些低级的错误,但程序连接到小米手机一直在报错:

08-06 22:07:38.230: W/dalvikvm(21900): Link of class 'Lcom/cp/mb/activity/BaseActivity;' failed

08-06 22:07:38.230: W/dalvikvm(21900): Unable to resolve superclass of Lcom/cp/mb/activity/SplashActivity; (44)

08-06 22:07:38.230: W/dalvikvm(21900): Link of class 'Lcom/cp/mb/activity/SplashActivity;' failed

08-06 22:07:46.360: W/dalvikvm(21900): threadid=1: thread exiting with uncaught exception (group=0x40015568)

08-06 22:07:46.430: E/AndroidRuntime(21900): FATAL EXCEPTION: main

AndroidRuntime(21900): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{xxxxxxxxxx}: java.lang.ClassNotFoundException:in loader dalvik.system.PathClassLoader[/data/app/com.cp.mb-1.apk]

折腾了我好一阵子,提示运行时错误,找不到相关的类,无法正确初始化activity, 但为何之前的项目又可以呢,同样的代码,为何之前的可以跑, 后来新建的项目不可以跑,于是我就往项目属性方向找,认真对比了一下,还是一模一样,引用了同一个公共类库,两个项目,唯一不同的,就是一个在我升级之前创建的,一个是我升级之后创建的。

从提示的错误来看,我找到无法初始化的类,一个自定义的Activity基础类BaseActivity, 而这个类实现了公共类库CommandLibs的一个接口,把这个接口实现删除了,就不会报错了,那就是说,项目在引用CommandLibs出现问题了。

于是我就往项目属性的引用那里找,最后发现,在我引用CommandLibs公共类库之后,还要设置:

Window->Project->Properties->Java Build Path->Order and Export中选择自己的公共类库,并勾选,编译通过,不再报错了。

AndroidRuntime(21900): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo_第1张图片


那我就纳闷了,为何之前的项目,在这个选项里,不用勾选,也可以通过编译,并且运行正常呢? 我唯一猜想的,就是最新版的adt对这个类包的引用的检测更加严格了,不管它是还是不是,管它的,现在可以跑就行了,不要浪费太多时间,看奥运要紧。。。

你可能感兴趣的:(AndroidRuntime(21900): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo)