zoukankan      html  css  js  c++  java
  • 使用Gradle构建Android工程

    Gradle是以Groovy语言为基础,基于DSL语法的构建工具,它通过插件的方式定制工程构建过程。Google开发了Android Gradle插件,使用Gradle构建Android工程。
    Gradle构建Android工程,我们可以在Android studio中使用,也可以在命令行中使用,也可以集成到持久化集成工具中。
     
    Gradle构建Android工程的配置文件名是build.gradle,存放在工程的根目录下。
    一个Android工程(Project)是由一个或多个组件(Module)组成,工程和组件都分别有各自的build.gradle
     
    Android工程的build.gradle
    一般情况下,我们不需要修改Android工程的build.gradle,工程级别的build.gradle定义gradle的基本配置。
    buildscript->dependencies 中声明gradle依赖的Android插件以及版本号
    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()
    }
    }
     
    Android组件的build.gradle
    一般情况下,我们用到的Android组件有两种,Application和library
    下面是构建Application的build.gradle的例子 
    apply plugin: 'com.android.application'

    android {
    compileSdkVersion 23
    buildToolsVersion "21.1.2"

    defaultConfig {
    applicationId "com.han.myexampleapp2"
    minSdkVersion 8
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    }
    buildTypes {
    release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }
    }

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    }
     
    在上面例子中,
    apply plugin: 'com.android.application' 表示gradle要使用Android插件来构建。
    android{} 中定义android相关的构建选项
    compileSdkVersion 表示要使用的Android sdk的版本
    buildToolsVersion 表示编译工具的版本,编译工具使用SDK Manager管理(Android studio->Tools->Android->SDK Manager)
    defaultConfig 用来配置基本的构建属性和manifest(AndroidManifest.xml)属性。可以配置的属性如下表所示,如果属性在defaultConfig配置,相应的AndroidManifest.xml中的设置项会被覆盖。
    applicationId "com.han.myexampleapp2" applicationId属性用来标识Android application的唯一标识。
    关于build.gradle中的applicationId与AndroidManifest.xml的packageName的不同,可以参考这篇文章
    https://chaosleong.gitbooks.io/gradle-for-android/content/appendix/applicationid_versus_packagename.html


    下表是defaultConfig可以配置的属性:
    Property Name  Default value in DSL object  Default value
     versionCode  -1  value from manifest if present
     versionName  null  value from manifest if present
     minSdkVersion  -1  value from manifest if present
     targetSdkVersion  -1  value from manifest if present
     applicationId  null  value from manifest if present
     testApplicationId  null  applicationId + “.test”
     testInstrumentationRunner  null  android.test.InstrumentationTestRunner
     signingConfig  null  null
     proguardFile  N/A (set only)  N/A (set only)
     proguardFiles  N/A (set only)  N/A (set only) 

    buildTypes配置怎样构建和打包组件,默认情况下,gradle会构建两种类型: release和debug
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    proguardFiles 声明使用的Proguard文件,
    getDefaultProguardFile('proguard-android.txt')包含了默认的Proguard配置。
    在'proguard-rules.pro'文件中,我们可以添加自定义的proguard配置,
    'proguard-rules.pro'文件在组件根目录下。
    minifyEnabled 控制gradle在构建时是否进行代码混淆,true为构建时执行代码混淆

    下表是buildTypes可以配置的属性
     Property name  Default values for debug  Default values for release / other
     debuggable  true  false
     jniDebuggable  false  false
     renderscriptDebuggable  false  false
     renderscriptOptimLevel  3  3
     applicationIdSuffix  null  null
     versionNameSuffix  null  null
     signingConfig  android.signingConfigs.debug  null
     zipAlignEnabled  false  true
     minifyEnabled  false  false
     proguardFile  N/A (set only)  N/A (set only)
     proguardFiles  N/A (set only)  N/A (set only)

    dependencies元素声明了要构建的组件依赖关系。
    compile fileTree(dir: 'libs', include: ['*.jar']) 表示依赖libs目录下的所有.jar文件
    compile 'com.android.support:appcompat-v7:23.0.1' 标识依赖版本是23.0.1的android support库
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    }
     
    依赖support-v4库的例子
    compile 'com.android.support:support-v4:23.0.1'
     
    依赖library组件的例子
    library路径是工程根目录下的lib文件夹
     compile project(":lib")
     
     
    Signing配置
    声明signingConfigs.release的签名配置,
    在buildTypes.release 中使用签名
    android {
    signingConfigs {
    release {
    storeFile file('release.keystore')
    }
    }

        buildTypes {
    release {
    ...
    signingConfig signingConfigs.release
    }
    }
    }
     
    Product Flavor
    当同一个app组件需要构建两种不同版本时,需要用到Product flavor,
    下面的例子,声明了两种product flavor,demo和full,
    两种product flavor构建不同的app,包名分别是"com.buildsystemexample.app.demo"和"com.buildsystemexample.app.full"
     
    android {
        ...
        defaultConfig { ... }
        signingConfigs { ... }
        buildTypes { ... }
        productFlavors {
            demo {
                applicationId "com.buildsystemexample.app.demo"
                versionName "1.0-demo"
            }
            full {
                applicationId "com.buildsystemexample.app.full"
                versionName "1.0-full"
            }
        }
    }
     
    productFlavors和defaultConfig是相同的类型,也就是可配置的属性相同。在实际应用中,defaultConfig配置flavor相同的属性,
    flavor不同的属性在各自flavor中声明。
     
    Build Variant
    Product flavor + Build type = BuildVariant
    gradle根据用户选择的BuildVariant,进行构建
    比如Product flavor 有 flavor1 和 flavor2 两种,
    Build type 有debug 和 release 两种,
    则 build variant 会有四种, 分别是 flavor1Debug, flavor1Release,  flavor2Debug, flavor2Relese
     
    如果工程没有定义product flavor, gradle会使用默认的flavor, build variant就是 build type名字。
     
    源文件目录
    src/main 默认的源文件目录
    src/<buildType> 构建<buildType>时用到的源文件目录,可选的
    src/<productFlavor> 构建<productFlavor>时用到的源文件目录, 可选的
     
    build.gradle与Android Studio的关系
     
    在Android studio 右键选中组件,如下图所示
    android studio 展示的组件属性跟build.gradle是对应的,修改了android studio中的配置,会自动更新到build.gradle;反之也一样。
    执行构建
    Gradle执行构建有两种方法
    1. 在Android studio中,选择Gradle选项卡,双击assemble<build_type>,执行构建。
    比如本文的例子,在app组件下,选择assembleDebug,构建debug版本的apk
    选择assembleRelease,构建release版本的apk
    2. 在命令行中执行构建
    在terminal中,cd到工程的根目录下
    执行./gradlew :app:assembleDebug , 构建app组件的debug版本。
    一个工程下可能有多个组件,所以使用:<组件名>来选择构建哪个组件
     
    构建整个工程,执行./gradlew assembleDebug
     
    执行clean
    ./gradlew clean
     
    查看所有任务
    ./gradlew tasks
     
     
  • 相关阅读:
    Java字符串跟ASCII码互转
    java 一款可以与ssm框架完美整合的web报表控件
    使用<c:set>标签配置项目路径
    Linux下部署tomcat及tomcat war包应用程序
    支付宝app支付服务端流程
    文本数据增量导入到mysql
    java 读取mysql中数据 并取出
    实现读取文本数据,在将数据导入mysql
    给一个整形数组,给出一个值,当这个值是数组某些数字的和,求出数组下标的值
    文本数据和mysql 里面的数据比较
  • 原文地址:https://www.cnblogs.com/tonyhan/p/4819767.html
Copyright © 2011-2022 走看看