• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

fat-aar-android: 该插件提供了将library以及它依赖的module一起打包成一个完整aar的 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

fat-aar-android

开源软件地址:

https://gitee.com/wan7451/fat-aar-android

开源软件介绍:

fat-aar-android

licenseDownload

该插件提供了将library以及它依赖的module一起打包成一个完整aar的解决方案,支持gradle plugin 3.0.1及以上。(目前测试的版本范围是gradle plugin 3.0.1 - 4.0.0,gradle 4.6 - 6.1.1)

如何使用

第一步: Apply plugin

添加以下代码到你工程根目录下的build.gradle文件中:

buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:xxx'        classpath 'com.kezong:fat-aar:1.2.16'    }}

添加以下代码到你的主library的build.gradle中:

apply plugin: 'com.kezong.fat-aar'

第二步: Embed dependencies

  • implementation或者api改成embed

代码所示:

dependencies {    implementation fileTree(dir: 'libs', include: '*.jar')    // java dependency    embed project(path: ':lib-java', configuration:'default')    // aar dependency    embed project(path: ':lib-aar', configuration:'default')    // aar dependency    embed project(path: ':lib-aar2', configuration:'default')    // local full aar dependency, just build in flavor1    flavor1Embed project(path: ':lib-aar-local', configuration:'default')    // local full aar dependency, just build in debug    debugEmbed (name:'lib-aar-local2',ext:'aar')    // remote jar dependency    embed 'com.google.guava:guava:20.0'    // remote aar dependency    embed 'com.facebook.fresco:fresco:1.11.0'    // don't want to embed in    // 不建议使用implementation,因为该依赖可能与application的依赖版本不一致,使用implementation可能会导致R类找不到的问题    compileOnly 'com.android.support:appcompat-v7:27.1.1'}

多级依赖

本地依赖

如果你想将本地所有相关的依赖项全部包含在最终产物中,你需要在你主library中对所有依赖都加上embed关键字

比如,mainLib依赖lib1,lib1依赖lib2,如果你想将所有依赖都打入最终产物,你必须在mainLib的build.gradle中对lib1以及lib2都加上embed关键字

远程依赖

如果你想将所有远程依赖在pom中声明的依赖项同时打入在最终产物里的话,你需要在build.gradle中将embed的transitive值改为true,例如:

// the default value is false// invalid for local aar dependencyconfigurations.embed.transitive = true

如果你将transitive的值改成了true,并且想忽略pom文件中的某一个依赖项,你可以添加exclude关键字,例如:

embed('com.facebook.fresco:fresco:1.11.0') {    exclude(group:'com.facebook.soloader', module:'soloader')}

更多使用方式可参考 example.

关于 AAR 文件

AAR是Android提供的一种官方文件形式;该文件本身是一个Zip文件,并且包含Android里所有的元素;可以参考 aar文件详解.

支持功能列表:

  • 支持library以及module中含有flavor
  • AndroidManifest合并
  • classes以及jar合并
  • res合并
  • assets合并
  • jni合并
  • R.txt合并
  • R.class合并
  • proguard合并(混淆合并现在看来有些问题,建议将所有混淆文件都写在主Library中)

Gradle版本支持

VersionGradle PluginGradle
1.0.13.1.0 - 3.2.14.4-6.0
1.1.63.1.0 - 3.4.14.4-6.0
1.1.103.0.1 - 3.4.14.1-6.0
1.2.63.0.1 - 3.5.04.1-6.0
1.2.83.0.1+4.1+
1.2.11+3.6.0+5.4.1+
1.2.154.0.0+6.1.1+

Gradle Plugin和所需求的Gradle版本官方文档

更新日志

  • 1.2.16
    • 修复gradle plugin版本不在根目录下就找不到的问题 #172
    • 修复在gradle plugin 4.0构建的产物中有可能styleable资源找不到的问题 #163
  • 1.2.15
    • 支持gradle plugin 4.0.0 #147
    • 修复在Android Studio 4.0.0上embed的库无法直接索引源码的问题 #148
    • 修复lint编译错误 #152
  • 1.2.12
    • 添加对buildType以及flavor的支持,例如debugEmbed以及flavorEmbed. #135 #137
    • 修复一些编译时的warning.
  • 1.2.11
    • 修复在gradle plugin 3.6.0下编译variants会error的情况 #126
    • 修复在gradle plugin 3.6.0下编译出来的aar,在编译apk时会出现资源符号对象找不到的问题
  • 1.2.9
    • 适配gradle plugin 3.6.1 #120
  • 1.2.8
    • 适配gradle6.0+版本 #97
  • 1.2.7
    • 修复在3.5.0中androidmafest合并报错的问题 #62 #65
  • 1.2.6
    • 适配gradle plugin 3.5.0 #53#58
  • 1.2.5
    • 修复任务名称重复导致编译错误的问题 #48
    • 如果开启minifyEnabled,所有的jar包将合入classes.jar文件
  • 1.2.4
    • 修复在windows平台上,jni和asset无法打入aar的bug #11 #37
  • 1.2.3
    • 修复未直接依赖的R类找不到的问题 #11 #35
    • 不再需要为需要embed的依赖项主动添加compileOnly
    • embed的transitive默认值设置成false
  • 1.1.11
    • 修复gradle plugin version有可能判断错误的问题 #28
    • 修复LibraryManifestMerger.java中出现的build warning #29
    • 优化resource、assets、jni等的合并规则,不再合并至"main",而是合并至"variant" #27
    • 修复重复build造成release包下jni丢失的问题 #27
  • 1.1.10
    • 修复使用gradle plugin 3.0.1时的jar合并错误 #24
    • 修复无法正常rebuild(同时使用clean assemble)的问题 #24
  • 1.1.8
    • 弃用旧接口,处理编译时输出的warning #10
    • 将AndroidManifest的合并规则由Application改为Library #21 #23
  • 1.1.7
    • 修复直接publish至maven时,aar的R文件未合并的问题 #7
  • 1.1.6
    • 适配gradle plugin 3.3.0+ #4 #9
    • 适配gadle 4.10.0+ #8
    • 支持子module的flavor编译
    • 修复子module的class文件编译不实时更新的问题
  • 1.0.3
    • 修复assets未合并的问题
  • 1.0.1
    • 支持gradle plugin 3.1.0 - 3.2.1
    • 支持资源合并,R文件合并

常见问题

  • 混淆日志: 当开启proguard时,可能会产生大量的Note: duplicate definition of library class日志,如果你想忽略这些日志,你可以在proguard-rules.pro中加上-dontnote关键字;
  • 资源冲突: 如果library和module中含有同名的资源(比如 string/app_name),编译将会报duplication resources的相关错误,有两种方法可以解决这个问题:
    • 考虑将library以及module中的资源都加一个前缀来避免资源冲突;
    • gradle.properties中添加android.disableResourceValidation=true可以忽略资源冲突的编译错误,程序会采用第一个找到的同名资源作为实际资源,不建议这样做,如果资源同名但实际资源不一样会造成不可预期的问题。

致谢


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap