首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尝试生成签名APK时出错android studio 3

尝试生成签名APK时出错android studio 3
EN

Stack Overflow用户
提问于 2017-10-30 23:04:04
回答 3查看 1.1K关注 0票数 6

在android studio 3中尝试生成签名的APK时出现以下错误

代码语言:javascript
复制
 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}

有谁能帮帮忙吗?

EN

回答 3

Stack Overflow用户

发布于 2017-11-08 05:25:18

XPP的答案对我不起作用。大多数交叉引用的答案忽略了这可能是由其他库依赖项(即JAR/AAR)引起的。在我的例子中,这个错误只出现在有签名的构建过程中--未签名的构建没有问题。

运行'gradlew :MY-PROJECT:dependencies‘可以显示完整的依赖树。如果在javax/java名称空间中找到使用JAR或类的依赖项,则可以在依赖项声明中添加gradle exclude语句,例如(gradle 4.1+):

api('my.favorite.dependency') { exclude group: 'javax' }

然后再次运行gradle ':dependencies‘任务。您应该看到已排除的依赖项现在已从树中删除。如果编译需要此依赖项,并且在其他地方没有提供此依赖项,则build*/assemble*任务将失败。如果依赖项在运行时是必需的,并且在其他地方没有提供,例如。操作系统,然后是应用程序。将进行编译,然后在运行时失败,并出现"ClassNotFound“异常。

在最坏的情况下,如果依赖关系树没有多大帮助,那么您可能必须开始注释掉依赖关系和使用它们的代码,以找到罪魁祸首的依赖关系。希望导致这个错误的依赖项几乎没有被使用。一旦找到导致错误的依赖项,就需要通过以下两种方法之一来修复这种情况。将JAR/AAR替换为不会导致错误的内容;或者重新构建依赖项,这样javax/java类就不会与JAR/AAR一起导出。

票数 1
EN

Stack Overflow用户

发布于 2017-11-08 03:18:20

我也看到了同样的错误。在我的例子中,这是因为我包含了logback。添加以下代码为我解决了这个问题(如here所述):

代码语言:javascript
复制
compile('com.github.tony19:logback-android-classic:1.1.1-6') {
    exclude group: 'com.google.android', module: 'android'
}

添加上述内容后,我仍然看到一个问题(如here所述),我必须添加以下内容:

代码语言:javascript
复制
configurations {
    all {
        exclude module: 'httpclient'
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-07 08:13:34

我也有同样的问题。我遵循了@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,这意味着这个依赖直接声明了对安卓版本的依赖。

我必须知道我的哪一个依赖项是导致该警告的原因。我尝试在app\build.gradle中逐个注释依赖项并构建项目。

在我的例子中,当我删除这个包时,compile 'com.sematext.android:sematext-logsene:1.0.0'构建的项目没有任何错误。

现在我们在里面找到了依赖于android版本的包,我们必须排除对android版本的内部依赖。

我将compile 'com.sematext.android:sematext-logsene:1.0.0'更改为

代码语言:javascript
复制
compile ('com.sematext.android:sematext-logsene:1.0.0'){
    exclude group: 'com.google.android'
}

现在一切都很好,但我仍然使用旧的gradle版本。我回到了app\build.gradle,并将gradle版本恢复到3.0.1

现在我修复了这个问题,并且仍然使用最新的gradle。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47018474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档