1. 描述

以前是用IntelliJ IDEA直接玩安卓程序的, 但是自从Google根据IDEA开发了新的ide后, 很多开发者都转向Android Studio了, 网络上的有些源代码无法直接在IDEA上编译, 于是下了个Android Studio折腾, 用过IntelliJ IDEA后安装、配置环境都很简单, 不太相同的地方是Google采用Gradle作为Android app开发的包管理器之后, 其自家推出的Android Studio自然得默认下载它, 于是在新建工程的最后一步, 提醒你可能需要配置一下代理才能使用成功的下载安装Gradle, 使用SS代理, 成功下载安装

2. 项目结构

新建空白项目的结构:
first

3. Gradle简介

Gradle是一种依赖管理工具, 基于Groovy语言, 面向Java应用为主, 它抛弃了基于XML的各种繁琐配置, 取而代之的是一种基于Groovy的内部领域特定(DSL)语言。其优点有很多:

像Ant一样,通用灵活的构建工具
可以切换的,基于约定的构建框架
强大的多工程构建支持
基于Apache Ivy的强大的依赖管理
支持maven, Ivy仓库
支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件。
对Ant的任务做了很好的集成
基于Groovy,build脚本使用Groovy编写
有广泛的领域模型支持构建

缺点么, 我觉得就是又增加了入门者的学习成本

4. Gradle配置

新建空白工程的里根目录和app目录下各有一个build.gradle文件,文件内容分别是:

4.1 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

4.2 app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "info.hypocrisy.test"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
}

4.3 直观认识

在./build.gradle中的task clean中加入println 'test gradle.', 那么每次运行gradle时都会在Gradle Console里显示出test gradle, 当然, 显示的东西太多, 这一条不是很好找, 命令行下新建一个test.gradle文件:

task test {
    println 'test gradle.'
}

之后gradle -b test.gradle -q test即可在terminal中看到test gradle.

4.4 解释说明

从上述build.gradle文件可以很轻松的看出在android中使用gradle基本上就是各种配置选项, 对于不同目录下都可以建立build.gradle文件, 其作用域自然也就是当前目录, 比如./目录下的作用域就是整个project, 而./app目录下的作用范围就是app目录下的这些源文件。这样理解的话, 无论gradle怎么变, 都可以很轻松的快速掌握它, 与以前的android结构相比, 现在的gradle近似相当于其AndroidManifest.xml文件, 虽然现在此XML仍然存在。而gradle的功能更为强大, 至于其更多配置选项可以以后慢慢接触。

4.5 setting.gradle

在根目录下,还有一个setting.gradle文件。这个文件是全局的项目配置文件, 里面主要声明一些需要加入gradle的module(比如上述我们的app目录, 这个类似于java的结构com.xxx.xxx, 最终存放代码的部分都可以作为一个module, 而每个dot分隔开来的部分在android studio的结构里看就是一个目录), 这个Test程序的setting.gradle内容为: include ':app', 如果我们加入了一个新的module叫做gaea, 那么setting.gradle内容就变为: include ':app', ':gaea', 如果我们再加入了一个extra/hecate的module, 类似于extra.hecate, 那么setting.gradle内容就变为:include ':app', ':test', ':extra:hecate'

5. gradlew

了解了gradle的基本知识,以及android studio里一个project的配置信息,就很容易想到,如果我们从网上down了一份源码,别人虽然也是用gradle配置的,但是如果gradle版本不一样,那么由于其配置的一些语法不同,可能就无法正常编译打包了。我们注意到项目结构的根目录下有gradlew的文件,gradlew代表 gradle wrapper,相当于本地封装了gradle,在/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本。在Android Studio下的terminal下运行 gradlew -v,若是第一次运行则显示Downloading如图:
second
下载的目录为C:\Users\[Username]\.gradle\wrapper\dists\gradle-2.4-all\3i2gobhdl0fm2tosnn15g540i0\
因为下载过程有点慢,也可以去https://services.gradle.org/distributions下载其他版本然后放到C:\Users\[Username]\.gradle\wrapper\dists相应目录下解压即可。

下载成功后即可用grdlew wrapper的命令代替全局的gradle命令,再次运行gradlew -v,结果如下:
third

再次执行gradlew build可以编译并打包成apk文件,如果依赖不全会自动下载gradle的一些依赖,一般下载到C:\Users\[Username]\.gradle\caches\modules-2\files-2.1\目录下。下载成功会出现:
fourth
fifth
Terminal上可以看出编译成功与否。编译成功后可以在Test\app\build\outputs\apk\文件夹下找到apk文件,如下图:
fifth

最后可以运行gradlew clean,其作用是清除/app目录下的build文件夹,依赖不全也会下载gradle的一些依赖。
以上在下载过程中可以看到https://jcenter.bintray.com/这个网址一直在出现,其实所有通过gradle导入的jar包都是从此网站的仓库上Downlad的。如果你需要的jar包在这个网站上没有,那就无法通过gradle的方式来导入。至于怎么确定是从这个网站Download,其实在根目录下的build.gradle中指定了:

allprojects {
    repositories {
        jcenter()
    }
}

gradlew的其他用法和参数搭配可以通过gradlew -h查看。

6. 其他建议

除了以上命令行的做法, 还可以在将工程导入Android Studio后, 查看每个Module下的 build.gradle 下的buildToolsVersion, 然后通过 SDK Manager 查看本地你安装的 SDK Build-tools, 如果相应版本没有安装先下载安装; 之后, 更新build.gradle和gralde-wrapper.properties相应的部分, 然后使用Android Studio的Make build或Run app即可
也可以不使用Android Studio调用安卓模拟器, 手动打开Android Emulator, 之后将app-debug.apk拷到android-sdk\platform-tools目录下, cmd下cd到该目录执行adb install app-debug.apk即可将打包后的apk安装到正在运行的Emulator上了。顺便说下创建新的模拟器时勾选Use Host GPU效果应该会好点。