Unable to resolve superclass 解决措施

在运行android-styled-dialogs库和demo的时候,发现一运行就死掉log如下:

I/ActivityManager(  378): Start proc eu.inmite.demo.dialogs for activity eu.inmite.demo.dialogs/.MyActivity: pid=1500 uid=10054 gids={50054}

W/dalvikvm( 1500): Unable to resolve superclass of Leu/inmite/demo/dialogs/MyActivity; (19)

......

E/AndroidRuntime( 1500): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{eu.inmite.demo.dialogs/eu.inmite.demo.dialogs.MyActivity}: java.lang.ClassNotFoundException: Didn't find class "eu.inmite.demo.dialogs.MyActivity" on path: DexPathList[[zip file "/data/app/eu.inmite.demo.dialogs-2.apk"],nativeLibraryDirectories=[/data/app-lib/eu.inmite.demo.dialogs-2, /system/lib]]

根据经验,一直以为是RuntimeException的提示信息非常重要,但是如果你分析的话就会发现,除了一些结论以外,没有任何干货。没说明白为什么找不到。然后又到代码中找,包名,路径都没有错,那问题究竟出现在哪里呢?

偶然间发现了上述的红色log,无法解析MyActivity的父类,看了这个恍然大悟,MyActivity的父类是FragmentAcitivity啊,在support.v4.jar包中,难道是没有引入?检查了一下,并尝试编译的时候,勾选编译输出到apk中,但是不起作用。

到网上搜吧:果然有许多人遇到相同的问题:

主要原因如下:

https://github.com/JakeWharton/ActionBarSherlock/issues/857

Because the SDK 22 is now more smart about library dependency :)

With the side effect that now when you compile external library of your libraries are no more automatically embed in the final APK.

You just need to copy your libraries external JARs to your main application libs :)


http://www.cnblogs.com/vaiyanzi/archive/2012/08/09/2629950.html

文章说得更加清楚一些:

Android开发中如果将ADT 升级到17以上(包括17),如果你的项目中引用了其它第三方的jar包,在运行是就会报下面的错误。这是因为在ADT17以后第三方包统一要放在一个libs的文件夹中,如果你的第三方包(jar)没有放在这里,编译时不会将其拷贝到.dex文件中,因此在运行是会报如下错误
解决办法:在你的工程项目下创建一个libs的文件夹,将jar放到libs文件夹里即可。这个问题困扰了好久,开发中一直用的是ADT16,今天终于找到解决办法了。


综合一下,如果引用额外的jar包,需要将包放到libs目录下,然后引用libs目录下的jar包。一般就能解决问题,

我这样做了,问题解决了。

你可能感兴趣的:(resolve,superclass,Android应用开发积累)