20

我的 Android Studio IDE 快疯了。

我愿意从 Central (v2.7.1) 添加 Maven 库 simple-xml

  1. 该项目编译良好

  2. Gradle 在它的下面有 lib 依赖build.gradle

    dependencies {
      compile 'com.android.support:appcompat-v7:18.0.0'
      compile 'org.simpleframework:simple-xml:2.7.1'
    }
    
  3. 在 Android Studio 的模块设置中检查了 simple-xml 库的导出:

截图在这里:https ://s6.postimg.cc/xxgj56zkx/Module_Settings.png

当我运行我的应用程序时,我得到了 Class not found ...

java.lang.NoClassDefFoundError: org.simpleframework.xml.core.Persister

我迷路了,听起来Gradle由于某些原因没有将lib和依赖项打包在apk中......

Edit1:我的 Android Studio 版本是 0.2.13(最新),Gradle 0.5.+

Edit2:我使用的完整 build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 18
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:18.0.0'
    compile 'org.simpleframework:simple-xml:2.7.1'
}
4

3 回答 3

56

您应该simple-xml以这种方式添加库:

compile('org.simpleframework:simple-xml:2.7.1') {
    exclude group: 'stax', module: 'stax-api'
    exclude group: 'xpp3', module: 'xpp3'
}

stax-apixpp3与 Android 类发生冲突。这些 jar 中的类似乎包含在 Android 中。

原来dex的消息是:

处理“javax/xml/stream/events/StartElement.class”时出现问题:

不构建核心库时对核心类(java.* 或 javax.*)的不明智或错误使用。

这通常是由于在使用 IDE(例如 Eclipse)时无意中在应用程序的项目中包含了核心库文件。如果您确定您不是故意定义核心类,那么这是对正在发生的事情的最可能的解释。

但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能从非 Android 虚拟机项目中获取了该类的源代码。这肯定是行不通的。至少,它会危及您的应用程序与平台未来版本的兼容性。它的合法性也经常受到质疑。

如果你真的打算构建一个核心库——它只适合作为创建完整虚拟机发行版的一部分,而不是编译应用程序——然后使用“--core-library”选项来抑制这个错误消息。

如果您继续使用“--core-library”,但实际上正在构建应用程序,那么请预先警告您的应用程序在某些时候仍将无法构建或运行。请为愤怒的客户做好准备,他们会发现,例如,一旦他们升级操作系统,您的应用程序就会停止运行。你会为这个问题负责。

如果您合法地使用了一些恰好位于核心包中的代码,那么您拥有的最简单安全的替代方法是重新打包该代码。也就是说,将有问题的类移动到您自己的包命名空间中。这意味着它们永远不会与核心系统类发生冲突。JarJar 是一个可以帮助您完成这项工作的工具。如果你发现你做不到这一点,那么这表明你所走的道路最终会导致痛苦、痛苦、悲伤和悲叹。

于 2013-10-18T17:41:28.620 回答
5

我在使用 maven 和 Android 时遇到了同样的错误。我纠正了依赖性,一切正常。这是我对 simple-xml 库的依赖:

<dependency>
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>2.7.1</version>
<scope>compile</scope>
<exclusions>
    <exclusion>
        <artifactId>xpp3</artifactId>
        <groupId>xpp3</groupId>
    </exclusion>
    <exclusion>
        <artifactId>stax-api</artifactId>
        <groupId>stax</groupId>
    </exclusion>
    <exclusion>
        <artifactId>stax</artifactId>
        <groupId>stax</groupId>
    </exclusion>
    <exclusion>
        <artifactId>spring-web</artifactId>
        <groupId>org.springframework</groupId>
    </exclusion>
    <exclusion>
        <artifactId>commons-logging</artifactId>
        <groupId>commons-logging</groupId>
    </exclusion>
</exclusions>
</dependency>
于 2014-05-18T20:57:20.987 回答
1

我发现了问题。

正如我所料,这是 graddle 插件 0.5.+。

带有 gradle 插件 0.6.+ (Gradle 1.8) 的 Android Studio 0.3.0 现在解决了这个问题。

但是,我以这种方式使应用程序与 Android Studio 0.2.13 和 gradle 插件 0.5 一起工作:

由于 gradle 插件拒绝从 maven Central 部署库,我将库和依赖项下载到项目的 lib 目录中。我将项目设置为在项目的 lib 目录中将该库用作本地库。

解决方法的说明:

  1. 在模块设置中删除我项目中对 simple-xml (maven central) 的所有引用

  2. 将 simple-xml-2.7.1.jar、stax-1.2.0.jar、stax-api-1.0.1.jar 和 xpp3-1.1.3.3.jar 复制到我项目中的 lib 目录

  3. 在我的项目中选择 lib simple-xml-2.7.1.jar 并使用 Add as Library 上下文菜单导入 lib

  4. 像这样更改 build.gradle:

    依赖{

    compile 'com.android.support:appcompat-v7:18.0.0'
    
    compile files('simple-xml-2.7.1.jar')
    

    }

注意:不要包含依赖项,否则它们会与 Grzegorz 提到的 Android 系统产生冲突

于 2013-10-20T02:56:14.650 回答