我对Android Studio IDE感到很疯狂。
我愿意从Central(v2.7.1)
添加Maven库simple-xml项目编译良好 p>
Gradle在build.gradle
:
dependencies {
compile 'com.android.support:appcompat-v7:18.0.0'
compile 'org.simpleframework:simple-xml:2.7.1'
}
在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 :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'
}
答案 0 :(得分:55)
您应该以这种方式添加simple-xml
库:
compile('org.simpleframework:simple-xml:2.7.1') {
exclude group: 'stax', module: 'stax-api'
exclude group: 'xpp3', module: 'xpp3'
}
库stax-api
和xpp3
与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目录中的本地库。
解决方法的说明:
在模块设置中删除项目中的所有引用到simple-xml(maven central)
将simple-xml-2.7.1.jar,stax-1.2.0.jar,stax-api-1.0.1.jar和xpp3-1.1.3.3.jar复制到我项目中的lib目录
在我的项目中选择lib simple-xml-2.7.1.jar并使用Add as Library上下文菜单导入lib
更改build.gradle,如下所示:
依赖项{
compile 'com.android.support:appcompat-v7:18.0.0'
compile files('simple-xml-2.7.1.jar')
}
注意:不要包含依赖项,否则它们会与Grzegorz提到的Android系统产生冲突