安卓将子模块打aar包,并将其远程依赖打包进去

生成 AAR 包

在Android Studio Terminal 窗口输入以下命令:

./gradlew :monitor:assembleRelease

monitor 换成你子模块的名称,不出意外的话 就会在下面目录生成相应aar文件
在这里插入图片描述

注意:如果你的Java运行环境是Java 8 则在老一点的AS上 可以运行打包成功,在较新一点的AS上会打包报错,主要是新的AS要求的环境变量 都Java 11 以上了,可以考虑配个环境,再打包或者使用较旧的AS如 2021版本的。

🆗,到这里没什么压力

这时你会发现aar包并不大,甚至只有几十kb,如果你的子moudle 没使用第三方依赖的话,你会发现使用时没什么问题,如果有第三方依赖的话,它还是不大,甚至编译期也不会报错 ,但你运行时就会报错依赖找不到。

其实你在打aar包的时候并没有把第三方库 打包进去,这还搞个🔨

不要慌,继续往下看👇

将远程依赖打包进aar中

介绍下我们的主角:fat-aar-android 链接如下

https://github.com/kezong/fat-aar-android?tab=readme-ov-file

一个gradle插件,它可以将依赖项合并到最终的aar文件中,并与agp3 .+一起工作

由于作者不维护了最终支持版本为 AGP 3.0 - 7.1.0,和 Gradle 4.9 - 7.3

在新项目上会报错,这不是重点,还是有大佬fork版本呢

下面这个库还在继续维护,gradle 版本大于 4.9 - 7.3 可以使用这个库

https://github.com/aasitnikov/fat-aar-android


我照着使用文档搞的,好像报错了,就按着example代码写的,好家伙,源码的和说明文档的写法不一样,懵了,就试着搞了一下,编译通过🤭,如过你照着使用文档弄,可以通过的话就忽略下面代码把!

Step 1: 将下面的代码段添加到root build中:

就是你项目的根build.gradle文件,不是app下的哦

buildscript {
    repositories {
        mavenCentral()
        google()
        jcenter()
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath 'com.github.kezong:fat-aar:1.3.8'
    }
}

plugins {
    id 'com.android.application' version '7.0.2' apply false
    id 'com.android.library' version '7.0.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
}

这个文件原本只有 plugins 块,把 buildscript 放进去就行

Step 2: 添加插件
在你想要打包的子Moudlebuild.gradle 中 添加 id 'com.kezong.fat-aar'

plugins {
    id 'com.android.library'
    id 'com.kezong.fat-aar'
}

也有可能你项目是这种写法:apply plugin: 'com.kezong.fat-aar' 都一样

Step 3: Embed 依赖
就是把你引入的第三方依赖 从 implementation xxx 换成 embed xxx 效果如下:

dependencies {
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    embed 'com.lzy.net:okgo:3.0.4'
    // ffmpeg
    embed 'com.arthenica:ffmpeg-kit-full:6.0-2'

    embed 'com.arthenica:smart-exception-java:0.2.1' 

    embed 'com.arthenica:smart-exception-common:0.2.1'
    // util
    embed 'com.blankj:utilcodex:1.31.1'
    // gson
    embed 'com.google.code.gson:gson:2.8.6'
}

然后运行上面 生成 AAR 包 的指令,就会看下像下面的打印

[fat-aar][embed detected][aar]com.lzy.net:okgo:3.0.4
[fat-aar][embed detected][aar]com.arthenica:ffmpeg-kit-full:6.0-2
[fat-aar][embed detected][aar]com.blankj:utilcodex:1.31.1

然后 BUILD SUCCESSFUL 你会发现aar包 比原来胖了一圈,不出意外你就可以拿着aar包 愉快地玩耍了

当然,不出意外是不可能的,导入, 运行, 啪! 又报错🤦‍♂️

看log又是相关类找不到。我不是都打包进去了吗?怎么还找不到!

以上面 'com.arthenica:ffmpeg-kit-full:6.0-2'举例

如果要在项目中依赖的话,确实没什么问题,因为它如果依赖了别的文件的话,会自动下载的,而打包成aar文件它就不会下载了,这时候就缺少了相关文件,怎么办呢?分析吧

打开External Libraries文件夹,可以看到 多了 exception-javaexception-common 这两个库
在这里插入图片描述
把这两个库 像上面Step 3 那样 放进去就行了,然后再回到最初 生成 AAR 包

关机 跑路 一气呵成 emm… 跑题了😆

编译 运行 啪!成了😁,特,属予作文以记之。


其他:
打aar包时,想要自定义包版本号和文件名可以看这篇文章:https://blog.csdn.net/Jason_Flash/article/details/122985517

重复类问题
如果你打包的子模块中使用了某三方库,同时你的主模块也包含了该库的话,就会报错重复类问题,要么你的主模块去依赖aar包里的三方库,要么aar包去除该库,但是,一般为了aar包 给别的项目通用,尽量少包含其他三方库,能用原生写 尽量用原生,避免乱七八糟的适配问题!

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发中,如果在打aar时遇到远程依赖库打不进去的情况,可能是由于以下几个原因导致的: 1. 依赖库版本不兼容:可能是依赖库的版本与Android项目中其他组件的版本不兼容。在使用远程依赖库时,需要确保依赖库的版本号与项目中其他组件的版本号相匹配,否则可能会导致打aar时无法成功引入依赖库。 2. 依赖库声明错误:在使用远程依赖库时,需要在项目的build.gradle文件中正确声明依赖库。如果依赖库声明错误,编译时会出现错误,无法成功引入依赖库。 3. 依赖库缺失或地址错误:如果在打aar时遇到依赖库打不进去的情况,可能是由于依赖库在远程仓库中不存在或地址错误导致的。需要确保依赖库在远程仓库中可用,并且使用正确的地址进行引入。 解决这个问题的方法可以尝试以下几个步骤: 1. 检查依赖库版本:确保依赖库的版本与项目中其他组件的版本兼容,并且使用正确的版本号进行引入。 2. 核对依赖库声明:在项目的build.gradle文件中检查依赖库的声明,确保格式正确、不存在错误,并且没有其他冲突的依赖项。 3. 检查依赖库地址:确认依赖库在远程仓库中存在,并且使用正确的地址进行引入。可以尝试手动下载依赖库并将其放置在项目的libs目录下,然后在build.gradle文件中引入本地依赖。 如果仍然无法解决问题,可以尝试联系依赖库的维护者或者查看相关文档和社区进行更详细的咨询和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值