最近使用 Android Studio 从事项目开发时,发现对 implementationapiembed 的用法了解的不是很清楚,这里准备一篇文章对其使用场景或者说是使用方式进行一个总结。

dependencies {
// Moudle内可见:material对应的api,仅能在该Moudle对应的工程内被调用
implementation 'com.google.android.material:material:1.3.0'
// 依赖具备传导性:依赖该Moudle工程的其他Module,仍可使用gson对应的api
api 'com.google.code.gson:gson:2.6.2'
// 合并AAR:将bolts打包入该Moudle,生成包含bolts的aar
embed 'com.parse.bolts:bolts-tasks:1.4.0'
}

正文开始前,先对implementation、api、embed的特性做如下总结:

配置 行为
implementation 依赖不具传导性,引入的API仅Moudle可见; 参与Moudle的编译、不参与对应AAR打包,但参与整体Apk打包;
api 依赖具备传导性,依赖该Moudle的其他Moudle也可调用引入的API; 参与Moudle的编译、不参与对应AAR打包,但参与整体Apk打包;
embed 合并AAR,将引入API对应的AAR工程合并到该Moudle工程,打包成为一个全新的AAR; 依赖不具传导性,引入的API仅Moudle可见;

一、implementation、api

implementation、api是GradleAGP(Android Gradle Plugin)支持的依赖配置项:

  • AndroidStudio官方文档描述如下:
  • Gradle官方文档描述如下:

1.1 使用场景

implementation、api的使用场景或者使用方式在文章开头表格已给出总结:

implementation:

  • 依赖不具传导性,引入的API仅Moudle可见;
  • 参与Moudle的编译、不参与对应AAR打包,但参与整体Apk打包;

api:

  • 依赖具备传导性,依赖该Moudle的其他Moudle也可调用引入的API;
  • 参与Moudle的编译、不参与对应AAR打包,但参与整体Apk打包;

1.2 验证举例

对于前文给出的使用场景总结,这一节要给出结论的证明依据:最好的办法是我们写个简单程序验证一下。

  • implementation 使用场景验证举例;
  • api 使用场景验证举例;

implementation使用场景验证

验证步骤及结论如下:

  • a、新建一个AndroidStudio工程Android_Test
  • b、在Android_Test工程下,新建Moudle工程Lib_B
  • c、使App 依赖Lib_BMoudle工程;
  • d、Lib_Bimplementation方式引入gson依赖包:
  • e、AppMoudle无法引用gson相关API:
    得出第一个结论:依赖不具传导性,引入的API仅Moudle可见
  • f、反编译Lib_B的AAR包,其中不包含gson相关代码;反编译app.apk,其中包含gson相关代码。
    得出第二个结论:参与Moudle的编译、不参与对应AAR打包,但参与整体Apk打包

api

验证步骤及结论如下:

  • a、Lib_Bapi方式引入gson依赖包:
  • b、AppMoudle可引用gson相关API:
    得出第一个结论:依赖具备传导性,依赖该Moudle的其他Moudle也可调用引入的API
  • c、反编译Lib_B的AAR包,其中不包含gson相关代码;反编译app.apk,其中包含gson相关代码。
    得出第二个结论:参与Moudle的编译、不参与对应AAR打包,但参与整体Apk打包

二、embed

embed 是GitHub开源工程 fat-aar-android 提供的第三方依赖配置,其功能主要为将多个AAR依赖包进行合并

2.1 使用场景

这里对其使用总结如下:

  • 合并AAR:将引入API对应的AAR工程合并到该Moudle工程,打包成为一个全新的AAR;
  • 依赖不具传导性:引入的API仅Moudle可见;

2.2 注意点

对于embed的使用,这里不再进行验证举例,感兴趣的朋友可自行验证。但对于embed的使用,这里需要强调一下注意点:

  • a、fat-aar-android 将不再维护更新
  • b、支持的版本范围:AGP 3.0 - 7.1.0,Gradle 4.9 - 7.3;

三、一种场景处理

implementation、api、embed单独使用,已经满足我们大部分的使用场景,但假设有这一种情况:

  • 有三个Moudle:appLib_BLib_C
  • app 依赖 Lib_BLib_B 依赖 Lib_C

需求是 Lib_C 需要合并打包到 Lib_B 中,生成一个新的AAR Lib_B ;但 Lib_C 的相关API又要可被 app 调用。

这种情况该如何处理?

// 可同时采用api与embed配置依赖
dependencies {api project(path: ':Lib_C')embed project(path: ':Lib_C')
}

参考

Android Gradle dependencies:
https://developer.android.google.cn/studio/build/dependencies?hl=zh-cn

fat-aar-android:embed
https://github.com/kezong/fat-aar-android

Gradle官方:
https://gradle.org/releases/

Gradle java_library_plugin:
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

一文详解 implementation api embed相关推荐

  1. 一文详解Kafka API

    摘要:Kafka的API有Producer API,Consumer API还有自定义Interceptor (自定义拦截器),以及处理的流使用的Streams API和构建连接器的Kafka Con ...

  2. Python-Matplotlib可视化(10)——一文详解3D统计图的绘制

    Python-Matplotlib可视化(10)--一文详解3D统计图的绘制 前言 3D散点图 3D曲线图 3D标量场 绘制3D曲面 在3D坐标轴中绘制2D图形 3D柱形图 系列链接 前言 Matpl ...

  3. Python-Matplotlib可视化(1)——一文详解常见统计图的绘制

    Python-Matplotlib可视化(1)--一文详解常见统计图的绘制 matplotlib库 曲线图 曲线图的绘制 结合Numpy库,绘制曲线图 绘制多曲线图 读取数据文件绘制曲线图 散点图 条 ...

  4. asterisk配置文详解

    asterisk配置文详解 Configuration GuideYou've  installed Asterisk and verified that it will  start up.Now ...

  5. Elastic search入门到集群实战操作详解(原生API操作、springboot整合操作)-step1

    Elastic search入门到集群实战操作详解(原生API操作.springboot整合操作)-step2 https://blog.csdn.net/qq_45441466/article/de ...

  6. 一文详解JavaBean 看这篇就够了

    一文详解JavaBean 看这篇就够了 JavaBean的历史渊源 JavaBean的定义(通俗版) JavaBean应用 < jsp:useBean > < jsp:getProp ...

  7. 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...

  8. 一文详解 YOLO 2 与 YOLO 9000 目标检测系统

    一文详解 YOLO 2 与 YOLO 9000 目标检测系统 from 雷锋网 雷锋网 AI 科技评论按:YOLO 是 Joseph Redmon 和 Ali Farhadi 等人于 2015 年提出 ...

  9. 一文详解决策树算法模型

    AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...

  10. 「软件项目管理」一文详解软件配置管理计划

    一文详解软件配置管理计划 前言 一.配置管理概述 1. 配置管理(SCM)定义 2. 软件配置项目(SCI) 3. 基线 4. 软件配置控制委员会(SCCB) 二.软件配置管理过程 1. 管理过程 2 ...

最新文章

  1. linux进行主机发现,linux – 网络上所有计算机的主机名发现
  2. 安卓的自定义的DemoApplication 出现的问题。
  3. 如何选择正确的RAID级别
  4. 关于HibernateDaoSupport中的getHibernateTemplate().execute及executeFind方法
  5. 洛谷P5664:Emiya 家今天的饭(容斥、dp)
  6. 【C++ 学习笔记】 MFC CEdit
  7. ie9支持string.trim()
  8. oracle 12.2.0.1 搭建 active dataguard
  9. Pow(x, n) 求一个数的n次方
  10. vue快速复制快捷键_vue快捷键与基础指令详解
  11. 序列化之Java默认序列化技术(ObjectOutputStream与ObjectInputStream)
  12. MATLAB中使用IPOPT去解NLP问题的接口:AMPL 工具
  13. STM32固件升级之 hypertrm(超级终端)使用(三)
  14. JAVA算法: 给定一个整数转换成对应的罗马字符(Integer to Roman)
  15. 事实表和维度表得概念
  16. SpringCloud基础权限框架搭建(1)-Zuul整合SpringSecurityOAuth2(JWT)+Turbine-附源码
  17. 无线web认证计费服务器,WEB认证原理
  18. 遇到PX Deq: reap credit等待事件
  19. 五路循迹传感器的优点_对于安装五路循迹传感器的机器人来说,如果五个传感器都遇到黑线,说明机器人的状态是()。...
  20. 005_HTML制作炫酷登录界面(CSS精灵图、背景图片局部显示)

热门文章

  1. Latex 文本居中
  2. 《实战java程序设计---上》
  3. 保研夏令营/预推免联系老师邮件模板
  4. Blender建模练习:人物模型多边形建模流程图解(三 衣服篇)
  5. DirectX11程序从VS2010转到VS2015的配置与使用
  6. Unity Animator Animation详解及应用实例教程
  7. Excel2003和Excel2007的区别
  8. 分布式调度框架大集合
  9. 给zabbix更换nagios图标
  10. [渝粤教育] 西南交通大学 土木工程试验与量测技术 参考 资料