使用SimpleXML与Android和Gradle

59

我试图使用Gradle 0.5.+和Android Studio编译一个使用SimpleXML的Android应用程序,但遇到了问题。

这是错误信息:

Gradle: Execution failed for task ':MyApplication:dexDebug'.
> Failed to run command:
    /Applications/Android Studio.app/sdk/build-tools/android-4.2.2/dx --dex --output <REALLY_LONG_STRING.....>
  Error Code:
    1
  Output:
    trouble processing "javax/xml/stream/events/StartElement.class":
    Ill-advised or mistaken usage of a core class (java.* or javax.*)
    when not building a core library.
    This is often due to inadvertently including a core library file
    in your application's project, when using an IDE (such as
    Eclipse). If you are sure you're not intentionally defining a
    core class, then this is the most likely explanation of what's
    going on.
    However, you might actually be trying to define a class in a core
    namespace, the source of which you may have taken, for example,
    from a non-Android virtual machine project. This will most
    assuredly not work. At a minimum, it jeopardizes the
    compatibility of your app with future versions of the platform.
    It is also often of questionable legality.
    If you really intend to build a core library -- which is only
    appropriate as part of creating a full virtual machine
    distribution, as opposed to compiling an application -- then use
    the "--core-library" option to suppress this error message.
    If you go ahead and use "--core-library" but are in fact
    building an application, then be forewarned that your application
    will still fail to build or run, at some point. Please be
    prepared for angry customers who find, for example, that your
    application ceases to function once they upgrade their operating
    system. You will be to blame for this problem.
    If you are legitimately using some code that happens to be in a
    core package, then the easiest safe alternative you have is to
    repackage that code. That is, move the classes in question into
    your own package namespace. This means that they will never be in
    conflict with core system classes. JarJar is a tool that may help
    you in this endeavor. If you find that you cannot do this, then
    that is an indication that the path you are on will ultimately
    lead to pain, suffering, grief, and lamentation.
    1 error; aborting

build.gradle 配置如下:

dependencies {
    [...]
    compile 'org.simpleframework:simple-xml:2.7.+'
}
repositories {
    [...]
    mavenCentral()
}

我该怎么解决这个问题?

编辑 如果我直接将Simple-XML安装为libs/中的Jar文件,则不存在此问题-当然,使用maven解决方案会更加干净。

4个回答

132

您还需要排除stax-API。

implementation('org.simpleframework:simple-xml:2.7.+'){
    exclude module: 'stax'
    exclude module: 'stax-api'
    exclude module: 'xpp3'
}

3
嗨Juggeli,使用新版本Gradle后,似乎从simple-xml中排除这3个模块并不能解决问题。 Lint仍然抱怨它是非Android库。 有人遇到这个问题吗? - Alex
如果你没有在单引号周围放置括号,那么在第一个大括号之前需要逗号,否则会出现“错误:(70,0)找不到方法com.squareup.retrofit2:converter-simplexml:2.1.0()的参数...”。我不确定有无括号之间的区别...但遇到这个问题并花了一些时间才弄清楚。 - mawalker

15

如果以前的解决方法不起作用,请尝试这个:

configurations {
    compile.exclude module: 'stax'
    compile.exclude module: 'stax-api'
    compile.exclude module: 'xpp3'
}
dependencies {
    [...]
    compile 'org.simpleframework:simple-xml:2.7.+'
}
repositories {
    [...]
    mavenCentral()
}

由于某些原因,在编译语句中使用排除子句并没有起作用,但在配置中列出它们对我很有帮助。 - Chad Schultz

4

我认为您需要排除一些依赖关系。

compile('org.simpleframework:simple-xml:2.7.+'){
    exclude module: 'stax'
    exclude module: 'xpp3'
}

0

我在使用SimpleFramework时遇到了相同的错误。 实际上,我通过在build.gradle中添加这些行来解决它:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接