gradle3.0新命令

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

No1:微信

Implementation架构

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

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

No2:ide

compileOnly

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

No3:ui

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

No4:spa

一样的配置下的版本冲突,会自动使用最新版;而不一样配置下的版本冲突,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="属性名"解决。

欢迎关注个人微信公众号:安卓圈

相关文章
相关标签/搜索