ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)

时间:2013-07-17 15:15:57

标签: android maven exception

Stackoverflow上出现了几次这个错误,我将在这个问题中引用其他问题。

我的项目是一个Android应用程序,使用Android Maven Plugin包含库,但也包括一些本地库,因为它们不是通过maven提供的。我的IDE是Eclipse。我使用this tutorial mostly来配置它。我对maven很新。

简而言之,我无法在手机上启动应用程序。启动时,我会看到上面写的错误,该错误与我的启动活动名为SubscriptionView的活动有关。下面的整个错误描述:

07-17 15:47:42.170: E/AndroidRuntime(20071): FATAL EXCEPTION: main
07-17 15:47:42.170: E/AndroidRuntime(20071): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.dynamixsspbridge/com.example.dynamixsspbridge.SubscriptionView}: java.lang.ClassNotFoundException: com.example.dynamixsspbridge.SubscriptionView
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.os.Looper.loop(Looper.java:137)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.main(ActivityThread.java:4921)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.reflect.Method.invokeNative(Native Method)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.reflect.Method.invoke(Method.java:511)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at dalvik.system.NativeStart.main(Native Method)
07-17 15:47:42.170: E/AndroidRuntime(20071): Caused by: java.lang.ClassNotFoundException: com.example.dynamixsspbridge.SubscriptionView
07-17 15:47:42.170: E/AndroidRuntime(20071):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2025)
07-17 15:47:42.170: E/AndroidRuntime(20071):    ... 11 more

现在,建议采用多种解决方案:

  1. Checking if one does in fact export private Libraries转到“”构建路径“ - >”配置构建路径...“。2。在”订购和导出“选项卡中,选中”Android私有库“选项。上班。”我检查了该选项,无论如何都发生了错误。
  2. Make sure ProGuard does not strip classes away:据我所知,我不使用proguard。从我一眼就能激活地使用ProGuard,它不仅仅在那里......我没有。 (它说“让ProGuard运行完全是可选的”on the android site。)我已经检查了我的project.properties和那里的proguard行被注释掉了。
  3. Do not name the folder for your external libraries lib but libs。我已经为我的本地图书馆这样做了。 maven图书馆的所有图书馆都住在Maven所有的地方。可能我可以拿走所有这些罐子并将它们从maven仓库放入libs ......然后停止使用maven。虽然这可行,但它几乎不提供解决方案。
  4. Remove Double Libs from Build Path。这或多或少与3中描述的问题相同。此处的重点是,“您不能拥有单个库的不同版本”。已知一些库提供其他库,因此可能存在于我的本地文件夹中,并且由一个通过maven添加的库提供。我在本地包含两个库,一个不公开,因此如果提供一个库,它将是 android-support-v4.jar 。我删除了jar,清理了项目并再次导出,没有任何更改。
  5. Suggestions have been made, that this is actually a Eclipse problem.据说重启可能对我很有帮助。无济于事。我已经尝试过删除bingen文件夹。
  6. Spelling errors
  7. 使用m2e Plugin(已经这样做)
  8. 其他没有成功的想法:

    Java版:关于我认为可能对Java 1.5使用负责的事情。但是,虽然建议使用1.6,但1.5应该有效。切换到1.6也不会改变任何东西。

    通过Maven包含的库不会导出/ dexed:我看到的另一个问题是Maven Dependnecies不会在文件夹bin/dexedLibs中显示为dexed Libraries。虽然我相信这会在以后出现问题,但我已经从项目中删除了所有使用这些库的类,但错误仍然存​​在。

    问题显然与使用Maven有关。如果我创建一个新项目,一切正常,直到我将项目转换为maven项目并通过pom.xml添加库,即使我没有使用任何库的类。

    编辑进一步调查:通过创建另一个新项目并发现在第一个“正确的时钟 - >配置 - >转换为maven”,即使在我更改{{1 }}。 I then "disable maven nature" and then "convert to maven"。现在导入了所有库,现在发生错误。当我在转换之前将pom.xml包含到项目中时发生相同的错误。

    奇怪的是,如果我然后“右击 - > maven->禁用maven性质”并删除所有maven库和文件,问题仍然存在。

    所有这些都发生在我转换为maven并且maven libs在项目中之后,一个新的示例项目(只是stanard活动和eclipse创建的xml)所以它显然与我的代码根本没有关系...

    pom.xml看起来像这样

    pom.xml

    另一个想法是创建一个具有特定android原型的maven项目described here。然而,这似乎不起作用,因为我总是得到“无法从原型创建项目”错误(见图片)。创建一个非android maven项目是另一个糟糕的尝试,因为它不是一个Android项目,它不解析R.x引用,也没有dex库......

    Error message in eclipse

    任何想法?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我建议你单独依赖maven命令,不要使用IDE做任何事情(除了去除),因为maven-android-plugin以自己的方式编译东西。

安装本地jar文件

您可以将本地库jar文件(Maven在线不可用)安装到本地存储库:

例如,在这里,我们将android.jar 4.03的{​​{1}}复制到我们机器上的本地存储库:

mvn install:install-file \
 -Dfile=$ANDROID_HOME/platforms/android-15/android.jar \
 -DgroupId=com.google.android \
 -DartifactId=android \
 -Dversion=4.0.3 \
 -Dpackaging=jar \
 -DgeneratePom=true

现在我们可以将它包含在POM中:

  <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>${platform.version}</version>
        <scope>provided</scope>
  </dependency>

Maven会查看本地存储库并使用这些jar文件。

设置正确的范围

没有包含类的问题(在我的情况下)是由POM中的错误<scope>依赖引起的。因此,对于所有库的依赖项,将<scope>设置为compile

尝试投放mvn cleanmvn installmvn:android deploy

只有当您能够在没有任何IDE的情况下从mvn命令行运行Maven项目时,您的Maven项目才会很好。