在Android .aar库中重新打包.jar-s

时间:2016-06-08 10:36:23

标签: java android packages

源代码

  

Library

     

Project which uses Library

问题描述

我正在该库中编写Android库(.aar)我正在使用.jar库。

enter image description here

为了避免依赖重复我正在使用ShadowJar插件进行重新打包,如下所示:

task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
    System.out.println("Relocating packages...")
    relocate 'retrofit'               , 'com.codecraft.retrofit'
    relocate 'org.simpleframework.xml', 'com.codecraft.org.simpleframework.xml'
    relocate 'com.squareup.okhttp'    , 'com.codecraft.com.squareup.okhttp'
}

在使用Android库(.aar)的应用程序中,我具有以下所示库的依赖性,仅用于测试我没有依赖项重复问题。

dependencies {
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
    compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta1'
}

但是当我尝试在Android上运行应用程序时,我遇到了以下错误

enter image description here

  

错误:警告:忽略匿名内部的InnerClasses属性   class错误:(com.bea.xml.stream.util.CircularQueue $ 1)但没有   带有错误:关联EnclosingMethod属性。这个班   可能是由一个错误:编译器产生的,没有针对   现代.class文件格式。建议的错误:解决方案是   使用最新的编译器从源代码重新编译类   错误:并且未指定任何“-target”类型选项。该   忽略错误的后果:这个警告就是反思   此类上的操作将错误地错误:指示它是   不是一个内部类。错误:处理“javax / xml / XMLConstants.class”时出错:错误:不明智或错误使用   核心类(java。*或javax。*)错误:不构建核心时   图书馆。错误:这通常是由于无意中包含核心   库文件错误:在应用程序的项目中,使用IDE时   (例如Error:Eclipse)。如果你确定你不是故意的   定义一个错误:核心类,那么这是最可能的解释   什么是错误:继续。错误:但是,您可能真的在尝试   在核心Error:namespace中定义一个类,你的源代码   可能已经采取了错误:来自非Android虚拟机   项目。这将是最大错误:肯定不起作用。至少,它   危害错误:您的应用与未来版本的兼容性   平台。错误:合法性通常也是有问题的。   错误:如果你真的打算建立一个核心库 - 这只是   错误:适合作为创建完整虚拟机的一部分   错误:分发,而不是编译应用程序 - 然后使用   错误:“--core-library”选项可以禁止显示此错误消息。   错误:如果你继续使用“--core-library”但实际上是这样   错误:构建应用程序,然后预先警告您的   应用程序错误:在某些时候仍然无法构建或运行。   请错误:为愤怒的客户做好准备,例如,   您的错误:应用程序升级后停止运行   操作错误:系统。你应该为这个问题负责。   错误:如果您合法地使用恰好位于某个代码中的某些代码   错误:核心包,那么你最简单的安全替代方案是   错误:重新打包该代码。也就是说,将有问题的类移到   错误:您自己的包命名空间。这意味着他们永远不会   错误:与核心系统类冲突。 JarJar可能是一个工具   帮助错误:你在这方面的努力。如果你发现你不能这样做,   然后错误:这表示您所在的路径将会出现   最终错误:导致痛苦,痛苦,悲伤和悲伤。   错误:1错误;中止:app:transformClassesWithDexForDebug FAILED   错误:任务执行失败   ':应用程序:transformClassesWithDexForDebug'。

     
    

com.android.build.api.transform.TransformException:java.lang.RuntimeException:     com.android.ide.common.process.ProcessException:     java.util.concurrent.ExecutionException:     java.lang.UnsupportedOperationException

  

请注意如果我只添加改装依赖项,则不会出现此问题

dependencies {
        compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
    } 

我可以解决此错误的原因是什么?

2 个答案:

答案 0 :(得分:1)

当你在你的lib或app中包含Jars时 - 你可能包含已经使用不同的java版本或使用不同于你的配置编译的文件,这可能会导致你遇到的问题。

我猜你使用的依赖项是指一个导致jar创建的问题的库。

如果您不使用依赖项至关重要 - 请考虑下载您正在使用的lib的代码(假设它们是开源的并且没有法律限制)并使用您的应用程序将其编译为附加模块你的项目,而不是添加jar。如果你这样做 - 你应该考虑jmols写的关于lib大小和方法计数的内容。

祝你好运!

答案 1 :(得分:1)

排除某些模块对我有同样的错误:

compile ('com.squareup.retrofit2:converter-simplexml:2.1.0'){
    exclude group: 'xpp3', module: 'xpp3'
    exclude group: 'stax', module: 'stax-api'
    exclude group: 'stax', module: 'stax'
}

来源link