zoukankan      html  css  js  c++  java
  • 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的使用需要经验的积累。

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/5118837.html
Copyright © 2011-2022 走看看