android实现gradle动态依赖打包

一、gradle基本知识

gradle是基于Groovy语言的,一个Android Project项目基本会生成三种gradle文件:module gradle、project gradle 和 setting gradle

android实现gradle动态依赖打包_第1张图片
- module gradle一个模块有一个,如 上图所示app.gradle和firstflavor.gradle。该gradle是配置本模块信息的
- project gradle如图中QQView,该gradle配置项目的总的信息
- setting gradle如图中Settings,指定项目所使用的模块

二、使用gradle隐藏敏感签名信息

  1. 在根目录建立keystore.properties文件,在文件里面配置签名信息
  2. 在主模块的gradle文件中加载properties文件中的签名信息
  3. 在签名配置中使用properties实例代替原来签名

    android实现gradle动态依赖打包_第2张图片

android实现gradle动态依赖打包_第3张图片

三、使用buildType和flavor

buildType和flavor可以对mudule进行绝大多数的配置,也是动态依赖的关键
在AS左上角File->Project Structure->可以找到buildType和Flavor的快捷配置
包含了许多常见的参数
android实现gradle动态依赖打包_第4张图片

android实现gradle动态依赖打包_第5张图片

android实现gradle动态依赖打包_第6张图片

其中SigningConfig可以在Singning里面配置好签名信息。VersionName Suffix和ApplicationId Stuffix分别表示版本信息的后缀名和包名的后缀名

有些参数在buildTypes和Flavor都可以配置,但是如果重复了会被buildTypes中的代替,如buildConfigField,该参数可以配置常量,然后在代码中使用Build.IBS引用。

可以看到,buildTypes有debug,realease,还可以有其他许多不同的配置,Flavor也是同样的道理,也就是总共有buildtypes种类×Flavor种类的组合,可以利用这个组合进行多渠道打包编译和定制。
android实现gradle动态依赖打包_第7张图片

差异化打包一

在mudule目录的src目录下右键新建JavaFolder文件,会有多个选项可以选,分别对应debug,release,和其他多组合。建完文件以后可以在里面使用与main文件相同的xml资源文件,编译打包时会覆盖原来的main资源文件,从而实现动态打包。比如可以更改mipmap文件中的icon,不同的打包会有不同的应用图标。

差异化打包二

新建一个module,名字与所定义某一个flavor相同,在模块的gradle文件中配置好版本信息后,同样更改所要替换的资源文件,不过,需要删除main文件中的同名文件,否则无效。这与上面一种方法不同

差异化编译三

使用compile实现差异化打包

android实现gradle动态依赖打包_第8张图片

android实现gradle动态依赖打包_第9张图片

默认先使用compile编译,testCompile为单元测试的,xxxCompile表示再按照flavor偏好编译。当使用module作为依赖库时,只需compile project ‘:library’或者xxxCompile project ‘:library’即可,当使用module作为flavor动态编译时(上面方法差异化打包二),需要module与flavor同名,并且需要使用xxxCompile project
(xxx为flavor名字),还需要删除主模块中重名的文件才可以。

关于使用变量

在manifest可以使用键值对用于Application或者Acticity中,然后在代码中访问。

android实现gradle动态依赖打包_第10张图片

android实现gradle动态依赖打包_第11张图片

其中,${APP_NAME_THIS}使用EL表达式也类似kotlin中字符串存在的用法,manifest中的${xx}变量的值配置在flavor和buildTypes时表示为

manifestPlaceholder = [APP_NAME:"name"(value)]

${xx}为gradle中变量时,如compile’xxx’需要变为compile “xxxx${xx}”,然后在project中配置值
这里写图片描述

android实现gradle动态依赖打包_第12张图片

大致就是这样,自己本人对于gradle还比较陌生,算是做做笔记,再接再厉。

参考学习文章
[1]:android studio打包以及gradle配置构建
[2]:Android 必备而又容易忽视的知识 Gradle的高级用法

你可能感兴趣的:(android)