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

Luk*_*uge 11 android exception maven

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

我的项目是使用Android Maven插件的Android应用程序,包括库,但也包括一些本地库,因为它们不是通过maven提供的.我的IDE是Eclipse.我主要使用本教程来配置它.我对maven很新.

简而言之,我无法在手机上启动应用程序.启动它时,我会看到上面写的有关Activity的调用错误,这是我的启动Activity调用的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
Run Code Online (Sandbox Code Playgroud)

现在,有多种解决方案可供建议:

  1. 通过转到""构建路径" - >"配置构建路径..."来检查是否确实导出了私有库 .2.在"订购和导出"选项卡中,选中"Android私有库"选项.上班." 我检查了该选项,无论如何都发生了错误.
  2. 确保ProGuard不会删除课程:据我所知,我不使用proguard.从我一眼就能激活地使用ProGuard,它不仅仅在那里......我没有.(它在Android网站上说"让ProGuard运行完全是可选的" .)我已经检查了我的project.properties并且注释了proguard线.
  3. 不要为外部库命名文件夹,lib但是libs.我已经为我的本地图书馆这样做了.maven图书馆的所有图书馆都住在Maven所有的地方.可能我可以拿走所有这些罐子并将它们从maven repo中放入libs......然后停止使用maven.虽然这可行,但它几乎不提供解决方案.
  4. 从构建路径中删除双库.这或多或少是3中描述的相同问题.不过,这里的要点是"你不能拥有单个库的不同版本".已知一些库提供其他库,因此可能存在于我的本地文件夹中,并且由一个通过maven添加的库提供.我在本地包含两个库,一个不公开,因此如果提供一个库,它将是android-support-v4.jar.我删除了jar,清理了项目并再次导出,没有任何更改.
  5. 已经提出建议,这实际上是一个Eclipse问题.据说重启可能对我很有帮助.无济于事.我有没有删除bingen文件夹尝试过它.
  6. 拼写错误
  7. 使用m2e插件(已经这样做)

其他想法没有成功:

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

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

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

编辑进一步调查:通过创建另一个新项目,发现在第一个"正确的时钟 - > configure->转换为maven",即使在我更改后,也没有导入任何内容pom.xml.然后我"禁用maven nature"然后"转换为maven".现在导入了所有库,现在发生错误.当我包含pom.xml进入项目之前转换同样的错误发生.

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

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

pom.xml这个样子的

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>DynamixSSPBridge</groupId>
  <artifactId>DynamixSSPBridge</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>DynamixSSPBridge</name>
  <properties>
        <java-version>1.6</java-version>
  </properties>
  <repositories>
        <repository>
            <id>itm-maven-repository-releases-site</id>
            <url>https://maven.itm.uni-luebeck.de/content/repositories/releases/</url>
        </repository>
    </repositories> 
  <dependencies>
      <dependency>
               <groupId>com.google.android</groupId>
               <artifactId>android</artifactId>
               <version>2.3.3</version>
               <scope>provided</scope> 
        </dependency>
        <dependency>
            <groupId>de.uniluebeck.itm</groupId>
            <artifactId>ncoap</artifactId>
        <version>1.0.1</version>
    </dependency> 
 </dependencies>
 <build>
  <finalName>${project.artifactId}</finalName>
  <sourceDirectory>src</sourceDirectory>
  <pluginManagement>
   <plugins>
    <plugin>
     <groupId>com.jayway.maven.plugins.android.generation2</groupId>
     <artifactId>android-maven-plugin</artifactId>
     <version>3.1.1</version>
     <extensions>true</extensions>
    </plugin>
   </plugins>
  </pluginManagement>
  <plugins>
   <plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <configuration>
     <sdk>
      <platform>9</platform>
     </sdk>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>
Run Code Online (Sandbox Code Playgroud)

另一个想法是创建一个具有特定android原型的maven项目,如此处所述.然而,这似乎不起作用,因为我总是得到"无法从原型创建项目"错误(见图片).创建一个非android maven项目是另一个糟糕的尝试,因为它不是一个Android项目它不解析Rx引用,并没有dex库...

eclipse中的错误消息

有任何想法吗?

S.D*_*.D. 0

我也有同样的问题。我建议您仅依赖 Maven 命令,不要使用 IDE 进行任何操作(除了调试),因为它maven-android-plugin以自己的方式编译东西。

安装本地jar文件

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

例如,这里我们将无法在线获取的内容android.jar复制到我们计算机上的本地存储库:4.03

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
Run Code Online (Sandbox Code Playgroud)

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

  <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>${platform.version}</version>
        <scope>provided</scope>
  </dependency>
Run Code Online (Sandbox Code Playgroud)

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

设置正确的范围

未包含类的问题(在我的例子中)是由<scope>POM 中的依赖关系错误引起的。因此,对于所有库的依赖项设置<scope>compile.

尝试运行mvn cleanmvn install、 和mvn:android deploy

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