Gradle在Android中的简单使用
Gradle在Android中简单的使用
还望支持个人博客站:http://www.enjoytoday.cn
Android Studio 使用gradle进行工程构建,为了更好的了解整个android开发过程(开发,调试,发布),就需要对gradle有一个初步的了解,至少需要知道他的每一个配置所代表的意思,更深层次的了解就要看个人兴趣了。
- Gradle简述
- android工程中的gradle
- 常见的gradle配置
- Gradle学习参考
Gradle简述
其实有关gradle的介绍网上有很多的相关资料了,简单来说它就是一个构建java工程的工具,帮助我们管理编译java工程。高大上点就是他们自己在GitHub上说的那样,是个很牛逼的面对jvm的编译系统(A powerful build system for the JVM.)。gradle的特点有很多,比较重要需要了解的有如下三个特点(不全面,只是概括):
- 1)是一个构建整合工具
- 就是可以直接与其他构建系统进行切换
- 2)支持多工程构建
- 这也是他的特色,我们在Android Studio中可以很明显的看看到在新建选项中有两个很不一样的新建方式,一种是New Project,这种方式会帮你真的建立一种gradle工程,而新建的gradle工程中会在工程一级目录下默认创建一个app的文件夹子(即我们配置的android项目),而New Module则是基于一个已有的gradle的工程下创建一个android 工程,同样也是默认在工程的一级目录下创建,同时我们的Project下的settings.gradle中会添加一个include工程。
include 'app' , 'source';
如上,settings.gradle就 是多工程配置文件,通过include 来引入子工程,默认子工程位置是在当前Project的主目录下,若不再默认位置,需要在settings.gradle中指定子工程文件位置,如:
include 'app'
project(':app').projectDir = new File('../app')
- 3)gradle是采用groovy脚本语言实现配置的而非xml
- groovy是一种基于jvm的脚本语言,面向对象,可以很好的帮助我们维护构建项目,最直观的例子,多版本发布可以直接通过简短的几句脚本配置语句完成。
Android工程中的gradle
1、Project 中的gradle
- gradlew
linux或者mac的编译脚本,可以通过./gradlew build编译当前project
- gradlew.bat
windows下的编译脚本
- gradle.properties
gradle的属性配置文件,一般情况不需要我们配置什么信息,保持默认即可
- build.gradle
gradle的编译脚本,每个工程子工程中都会存在,是编译配置的主要文件
- settings.gradle
多项目导入的配置文件,可以在这儿将你的所有的子过程导入
2、Module中的gradle
- build.gradle
module中只需要一个build.gradle即可,用于配置工程的结构,依赖管理,签名信息,sdk编译版本,包名信息,发布渠道或版本控制等。
常见的gradle配置
介绍build.gradle中一些常见配置信息的含义和使用简单的一些配置帮助我们完成一些预期的效果。
buildscript {
repositories {
//依赖支持jcenter仓库获取
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//当前的project的所有子模块,即settings.gradle中所有项目
subprojects{
//共有配置
}
//当前project中所有项目均
allprojects {
repositories {
jcenter()
}
}
//clean 任务可以帮助我们删除编译生成的build目录
task clean(type: Delete) {
delete rootProject.buildDir
}
如上,Android Studioi默认是采用jcenter()仓库来获取gradle依赖,jcenter是一种远程的maven依赖库,我们也可以将自己的项目上传jcenter,这样就可以直接在添加jcenter库后通过依赖配置远程依赖编译我们的工程,如高德,百度,facebook等均提供jcenter库依赖方式。同时,除了maven仓库,gradle还支持Ivy仓库,可通过如下方式添加:
//添加仓库,一般在我们导入aar时会用到
repositories {
flatDir {
//编译时会在libs目录下查找依赖
dirs 'libs'
}
}
android 项目中常用的build.gradle如下:
//插件声明,这个也可以自定义
apply plugin: 'com.android.application'
//基本的android 配置
android {
compileSdkVersion 23 //编译的sdk版本
buildToolsVersion "23.0.3" //编译工具的版本
//android的默认配置信息
defaultConfig {
//报名信息,可以没有,若没有会默认从manifest.xml中读取包名
applicationId "com.hfcai.liferecord"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
//发布版
release {
//dex分包属性
minifyEnabled false
//混淆设置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
//测试版
debug{
//配置信息
}
}
//apk签名配置
signingConfigs {
//测试版本
release {
//签名文件路径
storeFile file('../keystore/personal.jks')
//签名文件的密码
storePassword 'personal'
//用户名
keyAlias 'personal'
//用户名的密码
keyPassword 'personal'
}
}
//修改生成的apk名字
applicationVariants.all { variant ->
variant.outputs.each { output ->
//定义无类型属性
def oldFile = output.outputFile
if (variant.buildType.name.equals('release')) {
def releaseApkName = 'test.apk'
output.outputFile = new File(oldFile.parent, releaseApkName)
}
if (variant.buildType.name.equals('debug')) {
}
output.assemble.doLast {
//文件拷贝操作
copy {
from output.outputFile.getAbsolutePath()
into('../Personal/out/apks/')
}
}
}
}
}
//添加Ivy仓库,查找libs下的依赖
repositories {
flatDir {
dirs 'libs'
}
}
//android 的依赖管理配置
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
//Ivy依赖
compile(name: 'AudienceNetwork', ext: 'aar')
}
以上,为android工程编译的一些基本配置,还有类似多渠道打包,新建task任务等。如将依赖包打入jar:
//新建task,编译jar包
task makeJar(type: Jar){
delete 'build/libs/test.jar'
new File('libs').eachFile {
from zipTree(it)
}
from fileTree(dir:'src/main',includes: ['java/**'])
destinationDir = file('build/libs/test.jar')
}
makeJar.dependsOn(build)
可以通过命令 ./gradlew makJar直接执行或者在android studio 右边框的gradle对应工程的Task–>other–makeJar双击执行,执行后会在build/libs下生成一个test.jar文件。