尝试在android studio 3中生成签名APK时出现以下错误
Error:trouble processing "javax/xml/namespace/QName.class":
Error:Ill-advised or mistaken usage of a core class (java.* or javax.*)
Error:when not building a core library.
Error:This is often due to inadvertently including a core library file
Error:in your application's project, when using an IDE (such as
Error:Eclipse). If you are sure you're not intentionally defining a
Error:core class, then this is the most likely explanation of what's
Error:going on.
Error:However, you might actually be trying to define a class in a core
Error:namespace, the source of which you may have taken, for example,
Error:from a non-Android virtual machine project. This will most
Error:assuredly not work. At a minimum, it jeopardizes the
Error:compatibility of your app with future versions of the platform.
Error:It is also often of questionable legality.
Error:If you really intend to build a core library -- which is only
Error:appropriate as part of creating a full virtual machine
Error:distribution, as opposed to compiling an application -- then use
Error:the "--core-library" option to suppress this error message.
Error:If you go ahead and use "--core-library" but are in fact
Error:building an application, then be forewarned that your application
Error:will still fail to build or run, at some point. Please be
Error:prepared for angry customers who find, for example, that your
Error:application ceases to function once they upgrade their operating
Error:system. You will be to blame for this problem.
Error:If you are legitimately using some code that happens to be in a
Error:core package, then the easiest safe alternative you have is to
Error:repackage that code. That is, move the classes in question into
Error:your own package namespace. This means that they will never be in
Error:conflict with core system classes. JarJar is a tool that may help
Error:you in this endeavor. If you find that you cannot do this, then
Error:that is an indication that the path you are on will ultimately
Error:lead to pain, suffering, grief, and lamentation.
Error:1 error; aborting
Error:Execution failed for task ':_4SaleApp:transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.android.dx.command.Main with arguments {--dex --num-threads=4 --multi-dex --main-dex-list /Volumes/Data/AMIRA/Work/Q84Sale/Q84Sale/_4SaleApp/build/intermediates/multi-dex/release/maindexlist.txt --output /Volumes/Data/AMIRA/Work/Q84Sale/Q84Sale/_4SaleApp/build/intermediates/transforms/dex/release/0 --min-sdk-version 16 /Volumes/Data/AMIRA/Work/Q84Sale/Q84Sale/_4SaleApp/build/intermediates/transforms/jarMerging/release/0.jar}
任何人都可以帮忙吗?
答案 0 :(得分:1)
XPP的答案对我不起作用。大多数交叉引用的答案忽略了这可能是由其他库依赖项(即JAR / AAR)引起的。在我的情况下,此错误仅出现在签名的构建期间 - 未签名的构建很好。
跑步' gradlew:[我的项目]:依赖'显示完整的依赖关系树。如果您发现在javax / java命名空间中使用JAR或类的依赖项,则可以将gradle exclude语句添加到依赖项声明中,例如(gradle 4.1 +):
api('my.favorite.dependency') {
exclude group: 'javax'
}
然后运行gradle':依赖关系'任务再次。您应该看到现在从树中删除了排除的依赖项。如果编译需要此依赖关系而其他地方未提供,则build * / assemble *任务将失败。如果在运行时需要依赖项而不在其他地方提供,例如。通过操作系统,然后是应用程序。将在运行时使用" ClassNotFound"进行编译然后失败异常。
在最坏的情况下,如果依赖树没有多大帮助,那么您可能必须开始注释掉依赖项和使用它们的代码,以找到罪魁祸首依赖项。希望导致此错误的依赖性几乎不被使用。一旦找到导致错误的依赖项,您需要以两种方式之一修复该情况。用不会导致错误的东西替换JAR / AAR;或重建依赖项,以便不使用JAR / AAR导出javax / java类。
答案 1 :(得分:0)
我看到同样的错误。在我的情况下,这发生是因为我包括logback。添加以下内容为我解决了问题(如here所述):
compile('com.github.tony19:logback-android-classic:1.1.1-6') {
exclude group: 'com.google.android', module: 'android'
}
添加上述内容后,我仍然遇到问题(如here所述),我不得不添加以下内容:
configurations {
all {
exclude module: 'httpclient'
}
}
答案 2 :(得分:0)
我遇到了同样的问题。我跟随了@Amira Elsayed Ismail的建议并降级为gradle 2.3.3
建筑错误消失但我收到了新的有线警告Warning:Ignoring Android API artifact com.google.android:android:4.1.1.4 for release
。经过长时间的搜索,我知道这个错误是因为我的一个项目依赖项依赖于com.google.android:android,这意味着这个依赖项直接声明了对Android版本的依赖。
我必须知道我的哪个依赖项是该警告的原因。我试图在app \ build.gradle中逐个注释依赖项并构建项目。
在我的情况下,当我删除此包compile 'com.sematext.android:sematext-logsene:1.0.0'
时,项目构建没有任何错误。
现在我们发现依赖于android版本的软件包我们必须将内部依赖项排除在android版本之外。
我将compile 'com.sematext.android:sematext-logsene:1.0.0'
更改为
compile ('com.sematext.android:sematext-logsene:1.0.0'){
exclude group: 'com.google.android'
}
现在每件事情都很好;但我还在使用OLD gradle版本。 我回到app \ build.gradle并将gradle版本恢复为3.0.1
现在我解决了问题,仍然使用最新的gradle。