Android for Gradle 学习笔记 #1 概念篇

Android for Gradle 学习笔记 #1 概念篇

New Build System for Android Project #1 About concept

前言

Google 推出了一个基于Gradle的全新的构建系统来构建Android项目。并且发布了能开发Android,Google TV,Google Wear 还有 Google Glass项目的官方IDE工具-Android Studio(基于 IntelliJ IDEA 工具研发)。好奇之下下载了AndroidStudio并新建项目一看,发现新的项目构造跟之前的熟悉的构造(Eclipse项目)完全不一样。既然Google推荐这个新构建系统,下定决心学习官方文档级视频。后发现在项目管理方面,AndroidStudio比Eclipse方便多了(纯属个人想法, but it worth to try~)。以下是我对这些topic的理解。


背景

在之前的Android项目没有定义基本的构建系统及方法。有的项目是用Ant来构建,有的是用Maven来构建,还有有些则用NDK来构建那些需在项目里添加C++,C 等代码的或者针对不同的CPU机型的项目。这些构建方式降低了构建系统间的互换性和代码的可重用性(reusability)。为了解决这些问题,Google计划定义一个能满足所有Android开发者需求的灵活的构建系统。即能管理依赖(dependency management), 而且能进行项目测试(run test),并且可以发布(deploy)。最终,Google 决定在Gradle的基础上研发一个新的构建系统。


Gradle 简介

为什么是Gradle? 根据AndroidSDK研发者在2013年Google I/O Session里声明:”因为Gradle 是由一个很强大并实用的声明性语法(declarative syntax)构成的,并且用户可以根据自己的需求来编辑。Gradle有能整合IDE的工具API,这说明能定制针对android项目需求的DSL(Domain Specific Language)”[3]。Gradle 是由Gradleware[1] 开发的开源项目(Apache OpenSource)[1]。


Gradle Android Plugin

Google和Gradleware 合作研发了Android插件(gradle android plugin)。在Gradle的基础上添加了针对Android项目的实用功能:Manifast管理,版本管理等等。开发者只需在构建文件(build.gradle)里填写dependency, build type 或 product flavor 等信息就可以通过gradle构建命令来构建项目。个人认为它的强大之处在于机动性(flexibility),在构建文件里添加静态值(例如: targetSdkVersion 15)也可以用代码来设定值(例:targetSdkVersion getMinSdkVersion()+5)。

build.gradle 例子

apply plugin: 'com.android.application'

def version = 15
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "net.jinkook.hellogradle"
        minSdkVersion version
        targetSdkVersion getMinSdkVersion()+5
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

新Android项目构造

下面来看一下用AndroidStudio新建的项目构造。主要有3个View:Project,Package,Module。通过鼠标点击来互换模式。[如图1]
这里写图片描述

在Project View下,可以浏览整个项目构造及全局变量。可以设置Gradle版本(在gradle-wrapper. properties里设置),可以在External Libraries的文件夹里浏览整个项目所依赖的jar包信息。
这里写图片描述
在Package View下,可以方便的浏览指定Module的包。通常方便添加/修改layout或 image。
这里写图片描述

在Module View下,开发者们方便管理各个模块和对应的build.gradle。什么是Module? Google为了增强已有code的可重用性,导入了Module的概念。Module里即包括Application(可以是 Andorid Application, Android TV Module, Wear Module, Glass Module, Cloud Module:App Engine back-end service),也可以是Lib集合包(Android Library, 已有的Gradle项目,Java Library等)。如图所示, 该HelloGradle项目有4个module。分别是app, lib, myapplication, mylibrary。其中app和myapplication是Android Application Module, lib 是 java library module, mylibrary 是 android library module.

这里写图片描述

下面来看一下比较重要的几个Keywords:

gradle wrapper:设定gradle的信息,包括路径,版本等。 gradle wrapper 一共有4个文件: 一个jar包,一个gradle-wrapper.property, 一个linux shell文件和 一个window shell 文件。gradle wrapper的配置适用于整个project。当修改property里的gradle版本路径的时候,IDE会自动到该路径下载指定Gradle版本文件。(注:在修改Gradle路径的时候,最好使用官方路径。以免下载含有恶性代码的文件)

build.gradle(Project:[Project_name]):这个Gradle文件是用来指定该项目要使用的repository地址(可以是jcenter,meavenCentral 或 第3方repository的路径)。

settings.gradle(Project Settings): 这个文件是用来声明该项目里的Module信息。通过添加Module文件包名来声明。

build.gradle(Module:): 这个文件是用来管理该Module的构建信息。一般包括以下内容。

  • apply plugin : 声明Module的类型(Identity)。根据不同的类型,在build.gradle 文件的最上方 添加响应的plug-in。

具体代码如下:

     apply plugin: 'com.android.application' // 如果是Android Application
     apply plugin: 'com.android.library' //如果是Android Library
     apply plugin: 'java' //如果是Java Library
  • buildToolsVersion: Google 把BuildTool 从SDK里分离出来了。在该栏里填写要使用了BuildTool 版本。如果声明版本为20,在构建过程中该模块则用20版本的BuildTool来构建,如果声明为21.1.2, 则用21.1.2版本来构建。说明一个项目可以由需要不同版本的BuildTool的模块们组成,并构建。
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    }
  • defaultConfig: 基本配置信息。一般包括最低SDK版本,目标SDK版本,ApplicationID 以及Module版本。
android {
    defaultConfig {
        applicationId "net.jinkook.myapplication"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    }
  • buildTypes:可以配置构建方式。一般有Debug&Release模式,开发者可以根据自己的需求来添加心得构建方式。还可以按照CPU来配置构建模式:x86,arm 等。共有 n(CPU)*n(BuildMode)*n(ProductFlaver)种构建方式。假设没有ProductFlaver的情况下,有x86-Debug,x86-Release,arm-Debug,arm-Release 方式。这些方式可以在AndroidStudio左下侧BuildVariants 里可以选择。
android {
  buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        mydebug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    }
  • Product Flaver: 可以按照App的需求来设定多种模式。例如一个App有商业版本和测试版本,各模式使用不同的数据库和方法。在这种情况下,可以设置Commercial和Local 两个Flavor 而且配置包名后在各个包里开发。在构建阶段,指定要构建模式(例如:Local-x86-Debug),系统则合并指定的包文件个main文件来构建项目。
android {
    productFlavors{
        commercial{
            setApplicationId(getApplicationId()+".commercial");
//            applicationId "net.jinkook.sampleapplication3.commercial"
        }
        local{
            setApplicationId(getApplicationId()+".local");

        }
    }
    }

关于选择构建模式,可以通过点击AndroidStudio 界面左下角BuildVariants来打开界面(如图),通过点击来选择所需要的构建方法。(关于具体方法,计划在下次的学习笔记里详细说明~)

这里写图片描述

  • Dependencies:类似于Meaven,添加该模块参照的lib包名。系统会根据配置的路径来下载lib包
android {
   dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
}
    }

结尾

大致的概念就到这里了,改天再整理实习篇来分享具体Implement方案。

老实说,第一次下载AndroidStudio后新建项目的时候,看到陌生的构造,我有了直接卸载AndroidStudio的冲动。但通过回放n次来学习Google I/O13里的关于NewBuildSystem Session和gradleware里提供的AndroidGradle讲堂,我渐渐开始理解了该构建系统的便利之处。下一步打算学习Gradle 里使用的语言–Groove 来更灵活的配置build.gradle文件。

最后感谢 Miko Matsumura,Rooz Mohazzabi 提供 AndroidGradle讲堂。


参考文献:

[1] Gradleware Homepage: http://www.gradleware.com/
[2] Gradle for Android : http://commonsware.com/presos/Gradleware-Intro.pdf
[3] New Build System(Google I/O 2013): http://tools.android.com/tech-docs/new-build-system
[4] Gradle Android Plugin, Google Code : https://code.google.com/p/gradle-android-plugin/
[5] Android Plug-in for gradle : https://developer.android.com/tools/building/plugin-for-gradle.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值