摘抄原文https://mp.weixin.qq.com/s/6UZhaI9cILJiPGYHkXd73g

No1:

Implementation

compile 指令被标注为过时方法,而新增了两个依赖指令,一个是implement 和api,api和以前的compile没区别

implementation形象的解释一下:比如library里依赖了某个库,主工程依赖了这个library,但是不能使用那个依赖库里的内容。也就是说implementation把库隐藏到library内部了,不给外面的其他工程使用,很好的避免了jar冲突的问题

No2:

compileOnly

等同于provided,只在编译时有效,不会参与打包,不会包含到apk文件中。可以用来解决重复导入库的冲突

No3:

自定义插件https://blog.csdn.net/eclipsexys/article/details/50973205有点难

No4:

同样的配置下的版本冲突,会自动使用最新版;而不同配置下的版本冲突,gradle同步时会直接报错。可使用exclude、force解决冲突

No5:

如果本地同时存在两个不同的jar包,或者本地已有jar包,再去远程依赖不同版本的jar包,就会报错。可以将其中的一个采用compileOnly替换implementation

No6:

依赖本地aar包:aar包存放的路径声明和依赖引入是分开的

repositories {
flatDir {
dir "../${project.name}/libs"
}
}
dependencies {
implementation(name: 'aar名字', ext: 'aar')
}

如果aar包有很多,也可以一样象jar包统一添加一个文件夹下的所有包:

def dir = new File('app/libs')
dir.traverse(
nameFilter: ~/.*\.aar/
) { file ->
def name = file.getName().replace('.aar', '')
implementation(name: name, ext: 'aar')
}

当其他 Module引用此library的module时,也需要在他的build.gradle中加入如下配置,否则会提示找不到文件:

repositories {
flatDir {
dirs 'libs', '../包含aar包的模块名/libs'
}
}

推荐在项目的根build.gradle中统一添加,将所有包含aar包的模块名列出,这样不论是本Module或其他Module都不需要单独配置路径了:

allprojects {
repositories {
jcenter()
google()
flatDir {
dirs "../moudle-A/libs,../moudle-B/libs,../moudle-C/libs".split(",")
}
}
}

No7:

jniLibs目录是so文件默认的放置目录

No8:

所有的x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi架构的so文件。所以为了减小包体积,为了减小 apk 体积,可以只保留 armeabi 一个文件夹。但如果你想引入多个平台的,那么需要保持 so 文件的数量一致,就是说 armeabi 文件下的每个so文件都要在armeabi-v7a下找到对应的so文件,但这样apk包的体积就会增大。

No9:

如果aar包中的资源文件重复了

packagingOptions {
exclude 'META:-INF/LICENSE.txt'
}

exclude包含重复文件

No10:

如果aar包的清单文件和我们的app清单文件属性冲突时:用tools:replace="属性名"解决。

欢迎关注我的微信公众号:安卓圈

最新文章

  1. 安装SQL提示重启电脑失败,解决办法
  2. Beta Daily Scrum 第六天
  3. webpack练手项目之easySlide(一):初探webpack (转)
  4. TCP/IP 协议介绍
  5. select的onChange事件问题解决
  6. Android ReceiverCallNotAllowedException: BroadcastReceiver components are not allowed to register to receive intents
  7. js手机对应的多级导航分享
  8. ASP.NET Core身份验证服务框架IdentityServer4-整体介绍
  9. [Swift]LeetCode60. 第k个排列 | Permutation Sequence
  10. js动态创建元素之一--document.write
  11. 封装Thread的两种方法 via C++ in Linux
  12. APS技术中的多目标规划问题
  13. SimpleCursorAdapter和ListView的结合使用
  14. Linux学习笔记12—磁盘管理
  15. PHP开发APP接口实现--基本篇
  16. 基础概念 之 Spark on Yarn
  17. codeforce——思维dp
  18. 软工团队 - 预则立&&他山之石
  19. CentOS6.5上给curl安装ssl时错误解决
  20. To Chromium之版本管理

热门文章

  1. 注册InstallShield
  2. 【Java】「深入理解Java虚拟机」学习笔记(2)- JVM内存区域
  3. Mybaits动态Sql
  4. D3.js 添加zoom缩放功能后dblclick双击也会放大的问题
  5. 【ES】学习12-近似聚合
  6. WPA2-PSK无线密码破解
  7. Git使用一:git客户端安装与创建用户
  8. vue和stylus在subline中显示高亮
  9. ruby安装sass和compass步骤
  10. python 装饰器--对有无参数的函数进行装饰