Android Studio - 导入Simple-Xml库

exi*_*z31 20 xml android intellij-idea maven android-studio

我对Android Studio IDE感到很疯狂.

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

  1. 该项目汇编得很好

  2. Gradle在其中具有lib依赖build.gradle:

    dependencies {
      compile 'com.android.support:appcompat-v7:18.0.0'
      compile 'org.simpleframework:simple-xml:2.7.1'
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在Android Studio的simple-xml lib的模块设置中检查导出:

屏幕截图:https://s6.postimg.cc/xxgj56zkx/Module_Settings.png

当我运行我的应用程序时,我找不到类...

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

我迷路了,听起来Gradle没有在apk中包装lib和依赖因为某些原因...

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

Grz*_*Żur 55

你应该这样添加simple-xml库:

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

图书馆stax-apixpp3与Android的类冲突.这些罐子里的类似乎包含在Android中.

原始dex消息是:

处理"javax/xml/stream/events/StartElement.class"时遇到问题:

在不构建核心库时,不明智或错误地使用核心类(java.*或javax.*).

这通常是由于在使用IDE(例如Eclipse)时无意中在应用程序的项目中包含了核心库文件.如果你确定你不是故意定义一个核心类,那么这就是最可能的解释.

但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能已从非Android虚拟机项目中获取该类.这肯定是行不通的.它至少会危害您的应用与该平台的未来版本的兼容性.它的合法性通常也是有问题的.

如果您真的打算构建一个核心库 - 它只适合作为创建完整虚拟机分发的一部分,而不是编译应用程序 - 那么使用"--core-library"选项来抑制此错误消息.

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

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


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


exi*_*z31 1

我发现了问题。

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

带有 gradle 插件 0.6.+ (Gradle 1.8) 的 Android Studio 0.3.0 现在修复了该问题。

但是,我通过以下方式使应用程序能够与 Android Studio 0.2.13 和 gradle 插件 0.5 一起使用:

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

解决方法的说明:

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

  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 并使用“添加为库”上下文菜单导入该库

  4. 像这样更改 build.gradle:

    依赖项{

    compile 'com.android.support:appcompat-v7:18.0.0'
    
    compile files('simple-xml-2.7.1.jar')
    
    Run Code Online (Sandbox Code Playgroud)

    }

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