
本想添加一个aar到基础module中,结果引用该module的库全部报
1)添加arr到app module -> libs目录
2) 在buildgradle中配置 (注:repositories和android、dependencies处在同一级别的目录下。如不添加该配置,同步依赖会失败,提示 Failed to resolve)
3)引入
注:当项目存在多个module时,如果想在某个library module中依赖aar文件时,那么其它所有直接或间接依赖该library module的module中都应声明buildgradle文件中进行统一配置声明。否则会同步依赖失败,提示 Failed to resolve
1、方法一
3)在依赖aar文件的library module下的buildgradle文件中添加依赖如下:
2、方法二(简单粗爆)
1)在project的buildgradle文件中统一配置如下:
3)在依赖aar文件的library module下的buildgradle文件中添加依赖如下:
1、主mouble
2、子mouble
Androidstudio本地build文件中的aar文件是不包含库中所依赖的第三方库的,所以,要正常使用,有两种办法
第一种:在宿主目录重新依赖缺少的库。
第二种:aar上传至maven仓库(或者其他仓库),此种方式包含了依赖的第三方库
依赖编译不过
网上的说法都是说禁止aapt2,是可以解决,但是,其他人用的都是aapt2,那就不行了,问题是这里
去掉@android:windowEnterAnimation的@符号就ok了,这个当时没注意,原先遗留下来了直到打包后才发现
依赖maven的aar不能识别artifactId,因为 发布的项目(打aar包的项目) 中配置了publishNonDefault true,所以在发布到maven仓库后会有两种类型的aar,一种是release版本一种是debug,有两种办法依赖,
第一种:依赖方式 :groupId:artifactId:version@类型 ,类型为:release或者debug
第二种:去掉publishNonDefault
如果有朋友碰到aar方面的问题,可以一起讨论下,这个会更新,目前刚开始,有些问题没碰到,或者,其他朋友有问题可以留言,我实验过后会加进去,当做个笔记
· 打包 Android项目成 aar,有两种方式:
接下来分别列举说明
11 点击 File —> New —> New Module ,选择 “Android Library” , 最后点击 “Finish” 创建 module Library。
12 编写需要打包成 aar 的库文件,例如:我测试写的 TestUtils 类
14 点击 assemble 之后编译完成,bulid->outputs->aar文件夹下会生成“正式”和“测试”aar包。
21 修改需要打包的module项目下的 buildgradle 文件,然后点击 “Sync Now”同步下
22 修改需要打包的module项目下的 AndroidManifestxml 清单文件
24 点击 assemble 之后编译完成,bulid->outputs->aar文件夹下会生成“正式”和“测试”aar包
几经思考后,本来想手动把a,b,c那几个库编译成jar放到aar的lib里,但是找到那些a,b,c库一看他们又分别依赖了公司另外的几个库d,e,f,顿时头大了,真要自己一个个手动编译就头大了,后来在网上找了一圈发现一个插件是解决这种难题的完美方案。就是fat-aar(胖子aar),GitHub地址:
该插件提供的功能主要是帮我们把sdk的依赖库集成到aar里,使用上还需自行灵活选择哪些依赖库需要集成进aar,哪些不需要,比如我在打完全量依赖的aar后(配置transitive为true,只embed标记公司的库依赖,三方库不打标记)就发现会出现很多类/模块重复,一看都是官方的一些库文件,原因是全量打包会把所有支付Sdk里embed标记的库依赖的依赖(树结构遍历一直到底)都集成进aar,这样肯定会出现很多重复的模块/类。
所以后来又打了一个只引入直属依赖jar包的aar((配置transitive为false,也是只embed标记公司的库依赖,三方库不打标记),这样就只会把支付Sdk里的embed标记依赖库集成进aar,而不会继续遍历下去集成更底层的依赖,如此确实解决了模块/类冲突的问题,但是因为没有把所有的依赖集成进aar,使用的时候会报很多ClassNotFound的错误。
在这里卡了很久,虽然知道问题原因,但是处理起来着实麻烦,好在fat-aar插件打包aar的时候把大部分直属/公司库依赖都是放在classesjar里,而很多知名三方/android官方依赖放在libs目录下,如此,我便想到可以把全量aar里的classesjar文件里的com包(里面大都是公司的依赖jar)复制替换掉直属依赖aar包里面的com包,删掉android和androidx包,最后使用修改过的直属依赖aar放到demo工程libs里跑起来后,还是报了一些知名三方库(retrofit,gson等)没有找到的错误,这都是预期会出现的问题,在demo里重新依赖一下即可。
到此,我们提供的支付Sdk的aar包里面包含的基本是我们公司自己的库相关集成,知名的三方库让使用者自行添加依赖即可,这样对集成方也更友好,因为他们自己的工程很多可能会自行集成那些知名三方库,这样就不会出现包名/类冲突的问题,但是需要集成哪些知名 三方库需要告知集成者。(期间遇到因为公司加密系统导致360压缩编辑aar和jar包时损坏文件,后面改用rar压缩解决了问题)
Android插件在application中初始化了很多东西,如果生成aar包提供给前端,让前端进行云打包,那么Android在application中所初始化的东西将会失效,因为云打包,我们无法控制让他加载我们的application。Android插件依赖了很多第三方的aar包,如果把插件打成aar包,那么插件依赖的第三方aar包将无法和插件打包成一个aar文件,就会导致插件中很多类和文件找不到uniapp前端配置文件中可以依赖于maven仓库,但是uniapp的maven仅限于jcenter和aliyun名下的才能引用。
最近实现了人生第一个APK,中间遇到点问题,比较基础,但还是在此做个总结
我将和播放器相关的类放在一个Android Lib,生成aar,新建一个项目module包含这个aar,同时在module中intent aar包中PlayerViewclass 显示界面
参考
Android开发之Android Studio依赖aar包的四种方法(附加第三方库依赖方式)_xiayiye5的博客-CSDN博客
aar依赖引用关系解析 -
lib_A启动lib_B的activity即两个依赖工程互相启动组件_网鱼的栈-CSDN博客
Android Lib 可以生成jar包或aar包作为第三方给其他项目工程使用
jar包 不包含资源文件
aar包 包含资源文件, 比如layout value等
经过验证,Android Studio添加aar依赖 只有以下两种方法好用
首先将第三方aar包 放在所在 module的libs下
然后再module的buidgradle 中添加如下两种方法的依赖
有两点值得注意的:
1 使用 aar不包含依赖关系
项目 module需要再次依赖aar包中所依赖的包
如果将aar包上传仓库,使用仓库引用就包含了依赖关系
2module包名comaaa,aar的包名为combbb。在module中启动aar中的PlayerViewclass, 会使用到ComponentName,定义如下
如果如下实现,在运行apk时就会报找不到combbbPlayerViewclass 错误
但是将pkg换成comaaa 或者 this, 如下,运行就没问题,可以启动PlayerViewclass
所以, 如果已经依赖,直接显示调用这个activity就行
如果没有依赖,就需要填入activity所在的包名
PlayerViewclass再aar包中的manifestxml中已经有如下申明
项目 module 依赖 aar包 , 并不需要 在项目module的manifestxml中再次申明(查阅有的博客说需要在module的xml中再次申明,经验证不需要)
以上就是关于Android Studio在多Module中依赖aar的配置问题全部的内容,包括:Android Studio在多Module中依赖aar的配置问题、AAR过程中的问题记录、AndroidStudio 打包 Android项目 成 aar等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)