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

2023-12-30

源代码

Library https://bitbucket.org/victorapoyan/renamingpackagedependency

使用库的项目 https://bitbucket.org/victorapoyan/renamingpackagedependencyusage

问题描述

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

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

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

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android .aar 库中重新打包 .jar-s 的相关文章

随机推荐

  • 无限/无限滚动的可用性

    这种技术的优点和缺点是什么 参见软件组合 http sortfolio com 举个例子 我个人想到的有两点 不可能告诉某人感兴趣的项目位于哪里 例如 您可能不会说 第 324 行 第二列 当您返回到无限滚动的页面时 导航会中断 你还能想到
  • Java大十进制数格式异常

    为什么下面的代码会抛出 java 数字格式异常 BigDecimal d new BigDecimal 10934 375 是的BigDecimal课程不占用任何Locale在其构造函数中考虑到String 可以在该构造函数的 Javado
  • Android 上缓存 SVG 图像和内存使用情况

    我在用着安卓SVG http code google com p svg android http code google com p svg android 我在应用程序的多个活动中使用相同的 svg 文件 构建缓存来存储和检索图像是个好
  • 是否可以顺利“热部署”ASP.NET Core应用程序?

    在带有 NET Framework 的 ASP NET 下 您可以无中断地执行新代码的 热部署 这是有效的 因为 IIS 可以为同一应用程序处理多个应用程序域 当新代码到达时 它会 耗尽 旧应用程序域 从而允许它完成请求 同时新应用程序域启
  • Angular 2 - 在控件初始化后添加验证器

    我想知道如何将验证器添加到已经创建的 formControl 使用它自己的验证器创建的 但是 让我们想象一下 经过一段时间的延迟后 我想添加另一个 或者我有一个自定义控件 其中包含一些验证器本身 并且我想创建外部反应式表单并将内部验证器添加
  • D3.js中的selection.style和selection.attr有什么区别?

    我发现它们在我的测试中都有效 on mouseover function d3 select this select text style fill red or on mouseover function d3 select this s
  • Flutter Dart HTTP POST 请求正文在服务器端为空

    我正在开发 Flutter 平板电脑应用程序 一旦输入一个输入字段 我就会尝试向服务器发送一个发布请求 以下是我为此调用的方法 Future lt http Response gt postRequest async print globa
  • 在环境变量中设置额外的主机

    我正在使用 docker compose 来运行我的应用程序 为此 我需要在容器内设置主机 这取决于我正在运行的环境 我的方法是 创建环境文件并设置变量 application env SERVER IP 10 10 9 134 我的 do
  • 发出拉取请求后,Jenkins 将禁用分支上的项目构建

    注意 我只在我的一个分支中设置了 Jenkinsfile 而不是在主分支中设置 我已经设置了 Git webhooks 来监视推送到我的 Github 存储库的事件 但是 我注意到我的 Jenkins 构建作为分支工作正常 拾取推送事件 触
  • 从 SQL 表中选择行的百分比?

    我有一个带有 PHP 脚本的网站 该脚本内部有一个 SQL 查询 返回由 JavaScript 文件访问的数据 该数据是一个巨大的航班数据列表 我需要能够随机选择 比方说 任何指定日期的总航班数的 40 为了论证起见 让我们这样说 quer
  • 指针可以指向它自己吗?

    我的问题是 如果指针变量的地址与其值相同 那么它真的指向自身吗 例如 在下面的代码中 是a指向自身的指针 include
  • 熊猫的分层抽样

    我看过Sklearn 分层抽样文档 http scikit learn org stable modules generated sklearn model selection train test split html以及熊猫文档 htt
  • 对象方法的匿名函数[重复]

    这个问题在这里已经有答案了 可能的重复 直接调用分配给对象属性的闭包 https stackoverflow com questions 4535330 calling closure assigned to object property
  • 基于 C# 套接字的 HTTP

    我正在尝试通过 C 套接字发送 HTTP 请求并从服务器接收响应 而且我是这种语言的新手 我写了以下代码 IP解析正确 IPEndPoint RHost new IPEndPoint IP Port Socket socket new So
  • Windows命令行重定向下的c ++换行符

    我发现 Windows 命令行重定向会自动将 n 替换为 r n 有什么方法可以避免这种情况吗 因为在 stdout 或 stderr 重定向之后 如果将 r n 写入控制台 您将得到 r r n 而不是 r n 多谢 你可以尝试一个简单的
  • Visual Studio 中使用的 JavaScript 参考语法是什么?

    在 Visual Studio 2012 中 我创建了一个 Web 应用程序 然后在默认值中找到了以下行 references js项目附带的脚本
  • 为什么没有 boost::intrusive::map ?

    升压文档 http www boost org doc libs 1 55 0 doc html intrusive html http www boost org doc libs 1 55 0 doc html intrusive ht
  • OpenCV:加载带有 alpha 通道但 8 位深度的图像

    我对这些标志有点困惑cv imread takes 我的目标是加载具有 alpha 通道的图像 即CV 8UC4 同时我想始终以 8 位深度加载它们 首先我尝试使用以下内容 cv imread path cv IMREAD COLOR 这会
  • 如何设置文本区域滚动条的样式

    我在联系表单中有一个使用 css 样式的文本区域 它看起来很棒 直到我写的内容超出了该区域可以容纳的范围 当我这样做时 会出现一个滚动条 并且这个滚动条在我的深色样式中看起来很糟糕 它是黑底白字 文本 那么我该如何设计这个呢 我用谷歌搜索了
  • 在 Android .aar 库中重新打包 .jar-s

    源代码 Library https bitbucket org victorapoyan renamingpackagedependency 使用库的项目 https bitbucket org victorapoyan renamingp