文档章节

Android Studio 构建系统基础(三)

大邦123
 大邦123
发布于 2016/04/20 21:56
字数 1107
阅读 57
收藏 0

Android Studio构建系统基础

基础知识

项目创建成功后会自动下载Gradle,这个过程特别慢,建议翻墙。下载的Gradle在Windows平台会默认在 C:\Documents and Settings\<用户名>.gradle\wrapper\dists目录,这个目录下有个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的使用需要经验的积累。


本文转载自:http://www.open-open.com/lib/view/open1433387390635.html#articleHeader6

共有 人打赏支持
大邦123
粉丝 2
博文 5
码字总数 250
作品 0
浦东
后端工程师
私信 提问
Android Studio 3.3 稳定版发布

Android Studio 3.3 稳定版发布了,此版本更关注基础功能的改进,而非重大新特性。 上个稳定版发布以来,Android Studio 共解决了超过 200 个用户提交的问题,主要更新内容包括: 为 Naviga...

h4cd
02/01
0
1
Android JNI学习(二)——实战JNI之“hello world”

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
2018/05/09
0
0
给 Android 开发者的 Gradle 入门指南

本文的目的是为您提供关于 Gradle 的高级概述,以及在开发 Android 应用程序时如何适应整个构建系统。 我将通过 Gradle 和 Gradle 的 Android 插件的基础知识,以及新的 Android 项目附带的默...

oschina
2017/11/22
3K
2
Android开发工具Android Studio、Android SDK和Genymotion完全配置

所谓“工欲善其事,必先利其器”。Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试...

游走于代码之间
2018/08/17
0
0
重磅更新!Android Studio 2.3 预览版发布

Android Studio 2.3 在 Canary 通道 发布了,这是进入下一个 Android Studio 主要版本工作的早期预览。此版本包含大量错误修复和一些新功能。 以下是此版本中的一些主要更改的重点: IDE:基...

王练
2016/11/12
20.1K
28

没有更多内容

加载失败,请刷新页面

加载更多

单点登录实现原理(SSO)

简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些...

echojson
16分钟前
0
0
介绍Python中6个序列的内置类型

1、Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和 xrange 对象。序列通用的操作包括:索引、长度、组合(序列相加)...

问题终结者
36分钟前
0
0
用python自制微信机器人,定时发送天气预报

0 引言 前段时间找到了一个免费的天气预报API,费了好段时间把这个API解析并组装成自己想用的格式了,就想着如何实现每天发送天气信息给自己。最近无意中发现了wxpy库,用它来做再合适不过了...

上海小胖
54分钟前
7
0
深入理解java虚拟机-垃圾收集器与内存分配策略

垃圾收集器与内存分配策略 引用计数法 就是给对象添加一个计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1,计数器为0的对象就是不可能再被使用的。 缺点:无法...

须臾之余
今天
8
0
Python+Appium自动化测试环境搭建

1.Android SDK 下载SDK并配置系统环境变量ANDROID_HOME。 2.Appium 2.1 直接下载安装 官网下载安装appium-desktop-setup.exe。 2.2 通过npm下载安装 appium本质是一个nodejs库所以要先安装n...

维他ViTa
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部