【Android】两个不同版本的jar放进一个工程打成aar会有问题么?

Unity与Android方法相互调用一(使用aar包扩展ManiActivity) Unity与Android交互 Unity和Android交互方法主要有两种, 1.导出aar包供unity使用,这种是Unity官方推荐使用的,也是这篇文章主要讲解的。 2.导出jar包供unity使用。 本片讲第一种,使用aar包。 首先,使用AndroidStudio新建一个空工程,选项都用默认即可。 打开工程后,File->New->New Module,选中Android... 阅读详情

这个问题得分两层来看:打包阶段(生成 AAR) 和 集成阶段(依赖 AAR 到上层项目)。


1. 打包阶段(生成 AAR)

  • Gradle 处理依赖方式
    AAR 本身会把 classes.jar(工程代码编译产物)、res、assets、AndroidManifest.xml 等打进去,但不会直接把你 compileOnly 或 implementation 的外部 jar 打进最终的 classes.jar,而是放到 libs/ 目录或通过依赖声明传递出去。

  • 两个版本 jar 的冲突
    如果你工程里 libs/ 下放了两个版本的同一个 jar(包名、类路径相同),编译时 javac 会报 “duplicate class” 错误,根本打不出包。
    如果它们包名不同(比如一个是 com.google.gson.v2,另一个是 com.google.gson),编译上可以共存,AAR 能正常生成。

  • Gradle 依赖传递
    如果是通过 implementation 引入两个版本的同一个库(比如 fastjson 1.2.69 和 1.2.83),Gradle 默认会做 版本冲突解决(dependency resolution),只会选一个版本进最终 AAR 的依赖树,除非你手动配置 resolutionStrategy 或 api/compileOnly 来规避。

所以总结:

  • 同包名同类 → 无法编译
  • Gradle 冲突 → 会被自动选一个版本
  • 不同包名/重定位过 → 可以同时打进去

2. 集成阶段(上层项目依赖这个 AAR)

  • 重复依赖问题
    如果宿主 app 也依赖了某个 jar 的不同版本,就会触发 依赖冲突:

    • Gradle 还是只会选一个版本(默认是高版本),可能导致 AAR 里调用的 API 在宿主里跑不起来(NoSuchMethodError、NoClassDefFoundError)。
    • 最典型的就是 Gson、OkHttp、Fastjson 这类库版本差异大时。
  • 运行时问题
    即便能编译通过,运行时还是可能出现:

    • 方法缺失(新版本方法在旧版本中没有);
    • 行为差异(同一 API 在不同版本表现不一样);
    • ClassCastException(不同版本的类加载器视为不同 class)。
  • AAR 打包方式的隐患

    • 如果 jar 被直接打到 AAR 的 libs/ 里,那么宿主项目就会和自身依赖的 jar 合并,很容易产生冲突。
    • 如果 jar 是通过 implementation 引入,则宿主最终只会保留一个版本,还是存在兼容性问题。

3. 常见解决思路

  • 保持单一版本:用 Gradle 的 dependencyResolutionStrategy 强制锁定一个版本。
  • 重定位(shade):用 Shadow Plugin 或 JarJar 给某个版本的 jar 改包名,避免和宿主/其他库冲突。
  • 提供独立 API:AAR 不直接暴露冲突库,而是用接口隔离,宿主来决定具体依赖哪个版本。

✅ 总结:

  • 打包阶段:同包名类冲突直接报错;Gradle 冲突会只保留一个版本。
  • 集成阶段:即使能打成 AAR,也可能在宿主运行时报 NoSuchMethodError、ClassCastException 等。
    👉 最安全的做法是:不要把两个不同版本的 jar 硬塞进同一个 AAR,而是选择统一版本,或者通过重定位来隔离。

另外:需要注意不同包名的两个版本最好不要放在一起,容易引发问题。(依据业务情况)

unity与安卓之间的调用简单使用方法 1.首先下载Android Studio,配置unity安卓环境,SDK,jdk配置。网上很多教程。 2.创建AS项目,新添加一个模块Module,在新创建Module下的JAVA文件夹下的空文件夹添加Activity,创建一个空 的Empty Activity; 3.在创建Empty Activity 的同时会连带着生成一个布局文件。在res文件夹下的layout下,找到布局文件,删除,在... 阅读详情

相关推荐

android9系统android studio项目改成用android.mk编译引用v7包第三方jar包,aar文件和so库文件

android9系统android studio项目改成用android.mk编译引用v7包第三方jar包,aar文件和so库文件 原文件在:\vendor\..\package\DVR 打包apk在:\out\target\product\msm8953_64\system\app\DVR 项目放进系统中编译前提是APP 本身已能正常在对应系统中使用了,只是现在需要用mmm编译到系统包中 先用android studioMake project成功后,Clean Project项目,清..

Alex的博客 3811

Android中aar与jar的区别

Android中常见的第三方库包括:*.so、*.jar、*.aar,一般来说.so是C或C++语言的内容打包成的库,由于本项目是java语言,所以此处不探究so。 一、jar 1、说明 只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压...

顺其自然~专栏 896

Unity升级后Android构建错误:迁移res资源到AAR的完整指南

在Android开发中,资源管理是构建流程的核心环节,它直接关系到应用的稳定性和性能。传统的资源直接引用方式虽然简单,但容易引发命名冲突和依赖管理混乱。随着构建工具链的演进,Gradle和AAR(Android Archive)机制成为标准解决方案,它们通过命名空间隔离和依赖解析,从根本上解决了资源冲突问题。这一技术升级在工程实践中的价值在于提升了项目的可维护性和构建可靠性,尤其适用于大型项目或需要集成多个第三方SDK的场景。当Unity引擎升级到较新版本时,其Android构建管线也遵循了这一现代化规范,

weixin_34228387的博客 453

关于android studio导出jar包和aar包

由于客户网络环境无法访问我提供的广域网的maven仓库地址,需要我提供本地jar包的方式,因此来看看我们需要怎么弄。 一、导出jar 1.首先需要创建一个app工程并且new 一个moudle,既然想封装成一个库那么肯定要在moudle里进行编代码吧,这里就不做过多的陈述,我直接拿项目作为案例。 二、导出aar ...

不愿意透露姓名的同学 5145

InterruptedException  Unknown Source jar,so,aar,引用方式 Failed resolution so、jar、aar)区别

目录 InterruptedException Unknown Source jar,so,aar,引用方式 Failed resolution so、jar、aar)区别 InterruptedException W/System.err: java.lang.InterruptedException 系统中断异常,这种错误一般是由于在androd 的项目中引用了so或者jar包导致的 ,根本是so导致的,jar 是间接导致的; Unknown Source api.c...

ZhangJiqun&191cm&85kg 322

OI 生涯回忆录 《Pilgrimage》

前言 于 NOI2020 后写下本文。 本文简单提及了在写作时尚能回忆起来的,在我的 OI 生涯中对我的影响重大的人、事、比赛等。 写作本文,旨在在回忆允许的范围内,对 OI 生涯进行一定程度上的梳理,总结。 开端 入门 我最早接触计算机程序设计,是在小学。 那时候,我的数学成绩不错,就被老师推荐去学习编程。 就这样,我在局前街小学的何静老师的指导下,走上了编程的道路。 小学时的编程,与其说是 “竞赛” ,不如说是 “兴趣班” 。 当时,包括我在内,很多小孩子天性是浮躁的。支撑我对着无聊的代码学下去的,并不

cz_xuyixuan的博客 1万+

androidaar和jar区别_Android中aar与jar的区别

前置:由于端内直连Jira提bug需要一个SDK,所以探索了下aar与jar的区别。Android中常见的第三方库包括:*.so、*.jar、*.aar,一般来说.so是C或C++语言的内容打包成的库,由于本项目是java语言,所以此处不探究so。一、jar1、说明只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。JAR(Java Archive,Java 归档文件)...

weixin_39578516的博客 208

Cadence Allegro 17.2 PCB设计避坑指南:从焊盘制作到封装绘制的完整流程

本文详细解析了Cadence Allegro 17.2在PCB设计中的关键操作技巧,从焊盘制作到封装绘制的完整流程。通过0402电阻和2.54mm排针的实例,揭示新手常见错误及解决方案,包括焊盘参数设置、层类型区分和坐标输入规范,帮助工程师避免设计返工和生产事故。

weixin_28683391的博客 407

面试:JAR 和 AAR 的生成、使用方法及场景概论

JAR 和 AAR 区别以及使用场景 ? JAR(Jave Archive) 是一种与平台无关的文件格式,允许将许多文件组合成一个压缩文件。 只包含 class 文件和清单文件,不包含资源文件。打 JAR 包,项目里面的 res 文件不可用,如果想用图片文件,可将图片放进 assets 文件打进 jar 包,但注意 jar 文件夹里面的文件不能和调用项目里面的 assets 文件里面的文件重名。 aar 是 Android 库项目的二进制归档文件,包含所有资源,class 以及 res 资源文件。将 aa

王温暖的博客 885

机器人示教器方案昆仑通态脚本实现( 三菱FX3U+昆仑通态3轴联动))

项目应用场景:最终客户需要自由的修改程序流程,如检测什么信号,多少时间,再进入下一步,轴定位轨迹可以自由修改,方便最终可以在不修改PLC程序的情况下,自由示教程序。3.指令数量可以自行添加,在内存足够的情况下,无限制,只需要在PLC框架里面写好每个指令执行的内容就可以了,不需要在程序里面重复写相同类容;4.模板有延时指令,输入指令,输出指令,伺服定位指令,焊钳控制指令,自动修磨指令,转矩模式指令,结束指令等(可自行添加);1.有类似示教器编程功能,可以任意位置插入指令,可以任意位置删除指令;

huanyuecuiyu的博客 969

攻防实战之Confluence后利用

这边管理员密码是密文加密在数据库中,解不开,因此解决的思路是将管理员用户密码修改为已知明文密码的密文(这边不能直接在数据库中添加字段,关系型数据库在单表中添加一条字段可能会出现问题),登录上后台以后,添加用户并加入管理员组,最后将管理员密码还原。Confluence的后利用主要问题在于在Linux中搭建时,默认是Confluence用户权限,如下图所示,而confluence在linux中是没有写权限的,这也就是为什么有些人发现可以执行命令但是shell写不进去。至此admin的密码被改为了123123。

weixin_39251927的博客 2716

Android中常见的第三方库(so、jar、aar)区别及打包

Android中常见的第三方库包括:.so、.jar、*.aar,一般来说.so是C或C++语言的内容打包成的库,由于本项目是java语言,所以此处不探究so。 一、jar 1、说明 只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。 Jar的...

weixin_43901866的博客 6803

DeepSeek跨会话协作指南:让AI成为你的「第二大脑」

通过DeepSeek的跨会话协作系统,用户实测工作效率提升63%。

紫夜若涵的博客 1474

Android Studio获取本地aar,最新依赖jar/aar

本文提供获取本地依赖库的aar方法,然后把aar以libs的包本地方式引入,减少网络下载,会把kts和groovy的代码都展示。

j7a2son的博客 1822

SAP打印错位问题终极解决指南:LP01设备格式设置全流程

本文详细解析了SAP系统中LP01设备打印错位问题的解决方案,重点介绍了SPAD事务码的配置流程和格式设置技巧。通过精准调整输出设备、设备类型和格式类型的匹配关系,有效解决'未定义格式'错误,确保打印内容准确对齐。文章还提供了高级排查方法和预防措施,帮助SAP管理员提升打印管理效率。

weixin_29311017的博客 390

RT-DETR改进策略【独家融合改进】| HTB + GFPN + LGAG

解决现有Transformer方法的局限:现有的基于Transformer的方法在处理恶劣天气图像恢复时,为了提高内存利用效率,通常将自注意力操作限制在固定的空间范围或仅仅在通道维度上,这种限制阻碍了Transformer对长距离空间特征的捕捉能力,从而影响了图像恢复的性能。利用天气退化特征:观察到天气引起的退化因素主要导致相似的遮挡和亮度变化,因此希望设计一种能够更好地处理这些特征的模块。

Limiiiing的博客 197

Unity项目SDK集成终极秘笈:探秘.aar/.jar与Plugins/Android目录的魔法之旅

Unity SDK接入核心指南:为什么.aar/.jar必须放入Plugins/Android? 在Unity项目中,Android平台的SDK通常以.aar(包含代码+资源)或.jar(纯代码库)文件形式提供。必须将它们放入Assets/Plugins/Android目录,原因如下: 编译必需:Unity打包安卓APK时,会主动扫描该目录下的文件,自动将SDK代码整合进最终工程。未放入的SDK会导致类找不到、功能失效。 资源整合:.aar中的图片、XML等资源需被正确打包,否则运行时可能出现界面异常或崩溃

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1176

PCL 点云配准-ICP算法(精配准)

ICP(Iterative Closest Point)算法是一种常用的点云精细配准算法。它通过迭代计算将一组点云变换到另一组点云的最佳位置,最终实现精确的对齐。ICP算法在每次迭代中选择与目标点云最接近的点作为对应点,通过计算最小化源点云和目标点云之间的均方误差(MSE)来进行刚性变换(包括平移和旋转)。

纵马踏花向自由 1724

android aar包括jar包,Android 中的jar包,aar包以及module

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Android Studio中引入第三方资源一般有三种方式:jar包,aar包,module.1.jar包的导入第一种:一般用于比较流行的第三方库上,直接将你在GitHub上看到的jar包compile放入build.gradle的dependencies里面,然后sync同步一下就可以了。例如:导入v7包。1234d...

weixin_39750195的博客 707

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android Studio 生成*.aar文件及使用方法

在android项目中遇到 aar文件的使用,现总结aar相关的使用方法: (一)aar与jar的区别 (1) jar只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。 jar是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。 Jar的优点:安全性、减少下载时间、传输平台扩展、包密封、包版本控制、可移植性。 打jar包时,项目里的res文件无法使...

满城风絮 4235

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【安卓随笔】AAR开发实战——JAR、SO、资源、布局通通进我碗里来!

AAR(Android Archive)是Android库项目的二进制归档文件,我们常用的JAR一般情况下只能包含一些Class文件,而AAR则可以包含安卓开发中的一切资源,不管是JAR,还是SO,还是各种资源文件,通通可以放进AAR中。怎么样,很强大吧?那么我们就来介绍它应该怎么生成和使用。

vicemiami的博客 1747
上一篇: 【java】双重检查加锁到底锁了个啥?
下一篇: 【Web】Vue 3 中 router 参数传递的 4 种方式
ganshenml
博客等级 码龄16年 445粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ganshenml

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值