Android进阶开发Android开发经验谈Android开发

2.【干货篇】Gradle这么差还来面腾讯?

2019-06-14  本文已影响16人  881ef7b85f62

上一篇:【干货篇】Gradle这么差还来面腾讯?

六.Android Gradle插件

1.概述

Android Gradle插件继承于Java插件,具有Java插件的所有特性,也有自己的特性,看下官方介绍:

2.插件分类

3.项目结构

|-example
| |-build.gradle| |-example.iml
| |-libs
| |-proguard-rules.pro 混淆配置文件
| |-src
|  |-androidTest
|    |-java Android单元测试代码
|  |-main
|    |-java App主代码
|    |-res 资源文件
|    |-AndroidManifest.xml 配置文件
| |-test
|  |-java 普通单元测试代码

4.内置任务

<一>Java插件内置任务:如build、assemble、check等

<二>Android特有的常用任务:

5.应用实例

//应用插件,Android Gradle属于Android发布的第三方插件
buildscript{
repositories{
 jcenter()
}
dependencies{
 classpath 'com.android.tcols.build:gradle:1.5.0'
}
}
apply plugin:'com.android.application'
//自定义配置入口,后续详解
android{
compileSdkVersion 23 //编译Android工程的SDK版本
buildToolsVersion "23.0.1" //构建Android工程所用的构建工具版本

defaultConfig{
 applicationId "org.minmin.app.example"
 minSdkVersion 14
 targetSdkVersion 23
 versionCode 1
 versionName "1.0"
}
buildTypes{
release{
 minifyEnabled false
 proguardFiles getDefaultPraguardFile('proguard-andrcid.txt'), 'proguard-rules.pro'
 }
}
}
//配置第三方依赖
dependencies{
 compile fileTree(dir:'libs', include:['*.jar'])
 testCompile 'junit:junit:4.12'
 compile 'com.android.support:appcorpat-v7:23.1.1'
 compile 'com.android.support:design:23.1.1'
}

a.defaultConfig

b.buildTypes

c.signingConfigs

android {
 signingConfigs {
 release{
  storeFile file('myFile.keystore')
  storePassword 'psw'
  keyAlias 'myKey'
  keyPassword 'psw'
 }
 }
}

d.productFlavors

//定义baidu和google两个渠道,并声明两个维度,优先级为abi>version>defaultConfig
android{
 flavorDimensions "abi", "version"
 productFlavors{
  google{
  dimension "abi"
 }
 baidu{ 
 dimension "version"
 } 
}

e.buildConfigFiled

作用:在buildTypes、ProductFlavor自定义字段等配置

方法:buildConfigField(String type,String name,String value)

android{
 buildTypes{
 debug{
  buildConfigField "boolean", "LOG_DEBUG", "true"
  buildConfigField "String", "URL", ' "http://www.ecjtu.jx.cn/" '
 }
 }
}

6.多项目构建

和Java Grdle多项目构建一样的,通过settings.gradle配置管理多项目;在每个项目都有一个build.gradle,采用项目依赖就能实现多项目协作。

项目直接依赖一般适用于关联较紧密、不可复用的项目,如果想让项目被其他项目所复用,比如公共组件库、工具库等,可以单独发布出去。

7.多渠道构建

a.基本原理

Build Type有release、debug两种构建类型

Product Flavor有baidu、google两种构建渠道

Build Variant有baiduRelease、baiduDebug、googleRelease、googleDebug四种构件产出

assembleBaidu:运行后会生成baidu渠道的release和debug包
assembleRelease:运行后会生成所有渠道的release包
assembleBaiduRelease:运行后只会生成baidu的release包

b.构建方式:

通过占位符manifestPlaceholders实现:

//AndroidManifest
<meta-data 
 android: value="Channel ID" 
 android:name="UMENG_ CHANNEL"/>
 //build.gradle
 android{
 productFlavors{
 google{
  manifestPlaceholders.put("UMENG_ CHANNEL", "google")
 }
 baidu{
  manifestPlaceholders.put("UMENG_ CHANEL", "baidu")
 }
}
//改进:通过productFlavors批量修改
android{
 productFlavors{
  google{
 }
 baidu{
 }
 ProductFlavors.all{ flavor->
  manifestPlaceholders.put("UMENG_ CHANEL", name) 
 } 
}

8.高级应用

**a. **使用共享库

//声明需要使用maps共享库,true表示如果手机系统不满足将不能安装该应用
<uses-library
 android:name="com.google.android.maps"
 android:required="true" 
/>

**b. **批量修改生成的apk文件名

<一>类型:

<二>示例:

applicationVariants是一个DomainObjectCollection集合,通过all方法遍历每一个ApplicationVariant,这里有googleRelease和googleDebug两个变体;然后判断名字是否以.apk结尾,如果是就修改其文件名。示例中共有。

c.动态生成版本信息

d.隐藏签名文件信息

<一>必要性:为保证签名信息安全,最好直接放在项目中,而是放在服务器上

<二>一种思路:

signingConfigs {
 if (System.env.KEYSTORE_PATH != null) {
  //打包服务器走这个逻辑
  storeFile file(System.env.KEYSTORE_PATH)
  keyAlias System.env.ALIAS
  keyPassword System.env.KEYPASS
  storePassword System.env.STOREPASS
 } else {
  //当不能从环境变量取到签名信息时,使用本地debug签名
  storeFile file('debug.keystore')
  storePassword 'android'
  keyAlias 'androiddebugkey'
  keyPassword 'android'
 }
}

e.动态添加自定义的资源

<一>针对res/values中的资源,除了使用xml定义,还可以通过Android Gradle定义

<二>方法:resValue(String type, String name, String value)

productFlavors{
 google{
  resValue 'string', 'channel_tips', 'google渠道欢迎你'
 }
}

以google为例,在debug模式下,资源文件保存目录:build/generated/res/resValues/google/debug/values/generated.xml

f.Java编译选项

通过compileOptions{}闭包进行编译配置,可配置项:

android{
 compileOptions{
  encoding = 'utf-8'
  sourceCompatibility = JavaVersion.VERSI0N_ 1_ 6
  targetCompatibility = JavaVersion.VERSION_ 1_ 6
 }
}

g.adb选项配置

通过adbOptions{}闭包进行adb配置,可配置项:

<一>timeOutInMs:设置执行adb命令的超时时间,单位毫秒

<二>installOptions:设置adb install安装设置项

android{
 adbOptions{
  timeOutInMs = 5*1000
  installOptions '-r', '-s'
 }
}

h.DEX选项配置

通过dexOptions {}闭包进行dex配置,可配置项:

好文推荐:寒冬下2年android的搞笑求职历程 有需要关于Android进阶方面的学习高级技术大纲以及免费教学视频资料的可以私信我【领取资料】哦!

上一篇下一篇

猜你喜欢

热点阅读