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

Vic*_*yan 10 java android packages

源代码

图书馆

使用图书馆的项目

问题描述

我正在使用.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'
}
Run Code Online (Sandbox Code Playgroud)

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

dependencies {
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
    compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta1'
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在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,那么这就是错误的最可能解释:继续.错误:但是,您实际上可能正在尝试在核心错误:命名空间中定义一个类,您可能已采用该命名空间,例如,错误:来自非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'
    } 
Run Code Online (Sandbox Code Playgroud)

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

Fun*_*her 2

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

我猜您使用的依赖项是指确实导致 jar 创建的问题的库。

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

祝你好运!