繁体   English   中英

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

[英]Repackaging .jar-s in Android .aar library

源代码

图书馆

使用图书馆的项目

问题描述

我正在使用.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)的应用程序中,我具有下面显示的库的依赖性,仅用于测试我没有依赖性重复问题。

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)没有出现Error:关联的EnclosingMethod属性。 这个类可能是由一个没有以现代.class文件格式为目标的Error:编译器生成的。 推荐的错误:解决方案是使用最新的编译器错误从源代码重新编译类,而不指定任何“-target”类型选项。 忽略错误的结果:此警告是对此类的反射操作将错误地错误:指示它不是内部类。 错误:处理“javax / xml / XMLConstants.class”时出错:错误:错误建议或错误使用核心类(java。*或javax。*)错误:未构建核心库时。 错误:这通常是由于在使用IDE(例如Error:Eclipse)时无意中在应用程序的项目中包含了一个核心库文件Error :. 如果你确定你不是故意定义一个Error:core class,那么这就是错误的最可能的解释:继续。 错误:但是,您实际上可能正在尝试在核心Error:namespace中定义一个类,您可能已经采用了该类,例如,Error:来自非Android虚拟机项目。 这将是最大错误:肯定不起作用。 它至少会危害错误:您的应用程序与该平台的未来版本的兼容性。 错误:合法性通常也是有问题的。 错误:如果您真的打算构建一个核心库 - 这只是错误:适合作为创建完整虚拟机的一部分错误:分发,而不是编译应用程序 - 然后使用错误:“ - core-library “选项可以禁止显示此错误消息。 错误:如果您继续使用“--core-library”但实际上是错误:构建应用程序,那么请预先警告您的应用程序错误:在某些时候仍然无法构建或运行。 请错误:为愤怒的客户做好准备,例如,他们发现您的错误:应用程序在升级其操作错误:系统后停止运行。 你应该为这个问题负责。 错误:如果您合法地使用恰好位于Error:core包中的某些代码,那么最简单的安全替代方法是Error:重新打包该代码。 也就是说,将有问题的类移动到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'
    } 

是什么原因以及如何解决这个错误?

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

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

如果您不使用依赖项至关重要 - 请考虑下载您正在使用的lib的代码(假设它们是开源的并且没有法律限制)并使用您的应用程序将它们编译为项目中的附加模块,而不是添加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'
}

来源链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM