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
现在,建议采用多种解决方案:
lib
but libs
。我已经为我的本地图书馆这样做了。 maven图书馆的所有图书馆都住在Maven所有的地方。可能我可以拿走所有这些罐子并将它们从maven仓库放入libs
......然后停止使用maven。虽然这可行,但它几乎不提供解决方案。bin
和gen
文件夹。其他没有成功的想法:
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库......
任何想法?
答案 0 :(得分:0)
我遇到了同样的问题。我建议你单独依赖maven命令,不要使用IDE做任何事情(除了去除),因为maven-android-plugin
以自己的方式编译东西。
您可以将本地库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 clean
,mvn install
和mvn:android deploy
。
只有当您能够在没有任何IDE的情况下从mvn
命令行运行Maven项目时,您的Maven项目才会很好。