源代码
问题描述
我正在编写一个 Android 库(.aar),在这个库中我使用了 .jar 库。
为避免依赖重复,我使用 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上运行应用程序时,出现以下错误
Error:warning: 忽略匿名内部类的InnerClasses属性Error:(com.bea.xml.stream.util.CircularQueue$1),该类没有关联的EnclosingMethod属性。这个类可能是由于编译器没有针对现代.class文件格式进行目标的Error:编译而产生的。推荐的Error:解决方案是使用最新的编译器从源代码重新编译类Error:,并且不指定任何“-target”类型选项。忽略此警告的后果是,对该类的反射操作将错误地表示它不是一个内部类。 Error:处理 "javax/xml/XMLConstants.class" 时出错:Error:在不构建核心库时使用核心类(java.*或javax.*)Error:。当使用IDE(如Error:Eclipse)时,这通常是由于意外地包含了核心库文件Error:在应用程序项目中。如果您确定没有故意定义一个Error:核心类,则这可能是正在发生的情况的最有可能的解释Error:。然而,您可能确实正在尝试定义一个在核心Error:命名空间中的类,其源代码可能已被您获取,例如Error:从非Android虚拟机项目中。这几乎肯定不会Error:起作用。最低限度,它会危及您的应用程序与平台未来版本的兼容性Error:。这通常也是具有疑问的合法性。如果您确实打算构建一个核心库--只有Error:作为创建完整虚拟机分发的一部分,而不是编译应用程序--那么请使用Error:“--core-library”选项来抑制此错误消息。如果您继续使用“-Error:-core-library”,但实际上正在构建应用程序,则要注意,您的Error:应用程序仍将在某个时候无法构建或运行。请准备好生气的Error:客户发现,例如他们升级操作Error:系统后,您的应用程序停止工作。这个问题由您造成Error:。如果您合法地使用了一些代码,恰好在一个Error:核心包中,那么您最简单的安全替代方案是将该代码重新打包。也就是说,将相关的类移动到Error:自己的包名称空间中。 JarJar是可能Error:帮助您完成这个任务的工具。如果您发现无法这样做,则Error:这表明您正在走上一条最终会Error:导致痛苦、苦难、悲哀和悲叹的道路。 Error:1 error; aborting :app:transformClassesWithDexForDebug FAILED Error:Execution failed for task ':app:transformClassesWithDexForDebug'。
com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException
请注意,只添加retrofit依赖项时不会出现此问题
dependencies {
compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
}
这个错误的原因是什么,我该如何解决?
provided file("your.jar")
而不是使用compile
来解决这个问题。 - Jared Rummler