Android Studio构建系统基础

基础知识

项目创建成功后会自动下载Gradle,这个过程特别慢,建议翻墙。下载的Gradle在Windows平台会默认在 C:Documents and Settings<用户名>.gradlewrapperdists目录,这个目录下有个gradle-x.xx-all的文件夹,。也可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下。

每一个Module都需要有一个gradle配置文件,语法都是一样,唯一不同的是开头声明的是apply plugin。注意区分不同位置的build.gradle文件。

AS的工程根目录下的build.gradle文件:

buildscript {       //设置脚本的运行环境
    repositories {  //支持java依赖库管理(maven/ivy等),用于项目的依赖
        //mavenCentral()    //仅仅是不同的网络仓库而已
        jcenter()           //推荐使用这个仓库
    }
    //依赖包的定义。支持maven/ivy、远程、本地库、单文件,前面定义了repositories{}jcenter库,使用jcenter的依赖只需要按照
    //类似于com.android.tools.build:gradle:1.0.0-rc2,gradle就会自动的往远程库下载相应的依赖。
    dependencies { 
        classpath 'com.android.tools.build:gradle:1.0.0-rc2'
 
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
//多项目的集中配置,多数构建工具,对于子项目的配置,都是基于继承的方式。Gradle除了提供继承方式设置子项目,还提供这种配置
allprojects {
    repositories {
        jcenter()
    }
}

AS的工程根目录下的settings.gradle文件:

include ':app' //module  include ':my_lib' //module(build as lib)

AS的工程根目录下的Module的build.gradle文件(此处以一个简单的Lib module的gradle为例):

//plugin在AS里取值一般为'com.android.library'或者'com.android.application'
apply plugin: 'com.android.library' //构建为lib
 
android {
    compileSdkVersion 17            //编译需要SDK版本
    buildToolsVersion "19.1.0"      //SDK Manager确定本地安装该版本才可以
 
    defaultConfig {
        minSdkVersion 8         //最小版本
        targetSdkVersion 17     //目标版本
    }
 
    buildTypes {                //编译项
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}
 
dependencies {                  //依赖支持
    compile 'com.android.support:support-v4:18.+'
}

Gradle打包APP签名

默认情况下,debug被配置成使用一个debug keystory。debug keystory使用了默认的密码和默认key及默认的key密码。debug构建类型会自动使用debug签名配置。在你的Module的build.gradle文件中添加:

android {
    ......
    signingConfigs {
       myConfig{
         storeFile file("yanbober.keystore")
            storePassword "gradle"
            keyAlias "gradle"
            keyPassword "gradle"
        }
    }
 
   buildTypes{
     release {
        runProguard true
        zipAlignEnabled true
        // 移除无用的resource文件
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
 
        signingConfig  signingConfigs.myConfig
     }
   }
}

虽然经常使用项目根目录的相对路径作为keystore的路径,但是也可以使用绝对路径,尽管这并不推荐(除了自动创建出来的debug keystore)。运行gradle clean gradle build即可生成签名混淆对齐的app。

Gradle构建Android应用多渠道包(批量打包)

Android应用的发布需要面对各种各样的市场,我们称之为渠道。通常作为开发者我们需要知道应用是从哪个渠道下载的。这种统计信息一般常用的是百度统计或者友盟统计。这里举例时使用友盟统计为例说明问题。原理是Gradle的Manifest Merger。

在AndroidManifest.xml里配置所谓的PlaceHolder。

<meta-data android:name="CHANNEL" android:value="${CHANNEL_VALUE}" />

在模块build.gradle文件的defaultConfig加上PlaceHolder,作用是声明CHANNEL_VALUE是可替换值的PlaceHolder,同时为其设置yanbober默认值。

?
android {
    ......
 
    defaultConfig {
        ......
        manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
    }  
}

在模块的build.gradle文件里添加ProductFlavors配置。ProductFlavors其实就是可定义的product特性,与Manifest Merger使用就可以在一次编译过程中产生多个具有自己特性配置的版本。下面这个配置的作用就是为每个渠道包产生不同的CHANNEL_VALUE的值。

android {
    ......
 
    defaultConfig {
        ......
        manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
    }  
    productFlavors {
        yanbober{}
        wandoujia{}
        xiaomi{}
        baidu{}
    }
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [ CHANNEL_VALUE:name ]
    }
}

批量生成多渠道包:进入工程目录下运行gradlew assembleRelease。可以看到编译一共产生了4个apk,分别对应在productFlavors段定义的4个渠道。反编译打开 AndroidManifest.xml就会发现CHANNEL这一段的配置已经被修改。

生成单个渠道包:打开AS的Gradle Tasks面板模块有很多任务,直接双击对应的耽搁渠道任务生成对应的apk。用命令行单独生成xiaomi渠道使用gradlew assemblexiaomiRelease就好了。

好了,Gradle的基本情况就说到这,具体可以阅读官网或者查阅其他资料,Gradle的使用需要经验的积累。

原文地址:https://www.cnblogs.com/hwaggLee/p/5118837.html