Android Studio - 导入Simple-Xml库

时间:2013-10-17 13:10:08

标签: android xml maven intellij-idea android-studio

我对Android Studio IDE感到很疯狂。

我愿意从Central(v2.7.1)

添加Maven库simple-xml
  1. 项目编译良好

  2. Gradle在build.gradle

    中具有lib依赖关系
    dependencies {
      compile 'com.android.support:appcompat-v7:18.0.0'
      compile 'org.simpleframework:simple-xml:2.7.1'
    }
    
  3. 在Android Studio的Simple-xml lib的模块设置中检查导出:

  4. 屏幕截图: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 :full 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'
    }
    

3 个答案:

答案 0 :(得分:55)

您应该以这种方式添加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)时。如果   你确定你不是故意定义一个核心类,那么这个   是最有可能解释发生了什么。

     

但是,您实际上可能正在尝试在核心中定义类   命名空间,例如,来自a的源代码   非Android虚拟机项目。这肯定不会   工作。它至少会危害您的应用与您的兼容性   该平台的未来版本。它也常常值得怀疑   合法性。

     

如果你真的打算建立一个核心库 - 这只是   适合作为创建完整虚拟机分发的一部分,   而不是编译应用程序 - 然后使用   “--core-library”选项可以禁止显示此错误消息。

     

如果你继续使用“--core-library”但实际上正在构建一个   应用程序,然后预先警告您的应用程序仍将失败   在某些时候建立或运行。请为愤怒的顾客做好准备   例如,谁发现你的申请不再运作一次   他们升级他们的操作系统。你应该为此负责   问题

     

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

答案 1 :(得分:5)

我在Android上使用maven时遇到了同样的错误。我纠正了依赖,一切运作良好。它是我对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>

答案 2 :(得分:1)

我发现了问题。

正如我所预料的那样,它是crdle插件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')
    

    }

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