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

源代码

图书馆

使用库的项目

问题描述

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

在这里输入图像说明

为了避免依赖重复,我使用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)的应用程序中,我依赖于下面显示的库,仅用于testing我没有依赖项重复问题。

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

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

在这里输入图像说明

错误:警告:忽略匿名内部类的InnerClasses属性错误:(com.bea.xml.stream.util.CircularQueue $ 1)不附带错误:关联的EnclosingMethod属性。 这个类可能是由一个Error:编译器生成的,它没有针对现代的.class文件格式。 推荐的Error:解决scheme是使用最新的编译器Error:并且不指定任何“-target”types选项从源重新编译类。 忽略错误的后果:这个警告是这个类的reflection操作会错误地错误:表明它不是一个内部类。 错误:处理“javax / xml / XMLConstants.class”的错误:错误:build议或错误地使用核心类(java。*或javax。*)错误:当不构build核心库时。 错误:这通常是由于无意中包含核心库文件错误:在应用程序的项目中,使用IDE时(如Error:Eclipse)。 如果你确定你没有故意定义一个Error:核心类,那么这是错误的最可能的解释:继续。 错误:但是,实际上您可能正在尝试在核心错误中定义一个类:命名空间,您可能采用的是其中的源,例如,错误:来自非Android虚拟机项目。 这将是最错误的:肯定不行。 至less,它会危害错误:您的应用程序与未来版本的平台的兼容性。 错误:这也常常是有问题的合法性。 错误:如果你真的打算build立一个核心库 – 这只是错误:适当的作为创build一个完整的虚拟机的一部分错误:发行,而不是编译应用程序 – 然后使用错误:“ – 核心库“选项来压制这个错误信息。 错误:如果你继续使用“–core-library”,但实际上是错误的:构build一个应用程序,然后预先警告你的应用程序错误:仍然无法build立或运行,在某些时候。 请成为错误:为愤怒的客户准备,例如,发现您的错误:应用程序在升级他们的操作错误:系统后停止运行。 你会被责怪这个问题。 错误:如果您正在合理地使用恰好位于Error:core软件包中的某些代码,那么最简单的安全替代方法是Error:重新打包该代码。 也就是说,将有问题的类移入错误:您自己的包名称空间。 这意味着它们永远不会出现错误:与核心系统类冲突。 JarJar是一个可以帮助错误的工具:你在这个努力中。 如果你发现你不能做到这一点,那么错误:这是一个迹象表明你的道路将最终错误:导致痛苦,痛苦,悲伤和哀叹。 错误:1错误; 正在中止:app:transformClassesWithDexForDebug FAILED错误:执行任务':app: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' } 

什么原因,我怎么能解决这个错误?

Solutions Collecting From Web of "在Android .aar库中重新打包.jar-s"

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

我想你所使用的依赖关系是指一个库,它会引起jar创build的问题。

如果对于不使用依赖关系至关重要 – 考虑下载你正在使用的库的代码(假设它们是开源的,没有法律上的限制),并将它们作为项目中的附加模块编译,而不是添加jar 。 如果你这样做 – 你一定要考虑jmols写的关于lib的大小和方法的数量。

祝你好运!

排除一些模块帮助我也有同样的错误:

 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' } 

源链接