看完这篇Gradle,你才能去面腾讯(看完这篇gradle,你才能去面腾讯视频)
cac55 2024-10-01 07:54 17 浏览 0 评论
码个蛋(codeegg)第 652 次推文
作者:厘米姑娘
原文:https://www.jianshu.com/p/1274c1f1b6a4
上次的Gradle这么差还来面腾讯?还有印象没?由于文章干货太满,限于公众号的篇幅留了个关子。今天就把下面部分奉献给大家。老鼠拉大锨--大头在后台!
六.Android Gradle插件
1.概述
Android Gradle插件继承于Java插件,具有Java插件的所有特性,也有自己的特性,看下官方介绍:
可以很容易地重用代码和资源
可以很容易地创建应用的衍生版本
可以很容易地配置、扩展以及自定义构建过程
和IDE无缝整合
2.插件分类
App应用工程:生成可运行apk应用;id: com.android.application
Library库工程:生成aar包给其他的App工程公用;id: com.android.library
Test测试工程:对App应用工程或Library库工程进行单元测试;id: com.android.test
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特有的常用任务:
connectedCheck任务:在所有连接的设备或者模拟器上运行check检查
deviceCheck任务:通过API连接远程设备运行checks
lint任务:在所有ProductFlavor上运行lint检查
install、uninstall任务:在已连接的设备上安装或者卸载App
signingReport任务:打印App签名
androidDependencies任务:打印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
作用:用于定义所有的默认配置,是一个ProductFlavor,若ProductFlavor没有被特殊定义,默认使用defaultConfig块指定的配置
常用配置:
b.buildTypes
作用:是构建类型,在Android Gradle中内置了debug和release两个构建类型,差别在于能否在设备上调试和签名不同
每一个BuildType都会生成一个SourceSet以及相应的assemble<BuildTypeName>任务
常用配置:
c.signingConfigs
作用:配置签名设置,标记App唯一性、保护App
可以对不同构建类型采用不同签名方式:debug模式用于开发调试,可以直接使用Android SDK提供的默认debug签名证书;release模式用于发布,需要手动配置
常用配置:
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)
type:字段类型
name:字段常量名
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 Variant)=构建类型(Build Type)+构建渠道(Product Flavor)
Build Type有release、debug两种构建类型
Product Flavor有baidu、google两种构建渠道
Build Variant有baiduRelease、baiduDebug、googleRelease、googleDebug四种构件产出
构建渠道(Product Flavor)还可以通过dimension进一步细化分组
assemble开头的负责生成构件产物(Apk)
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. 使用共享库
android sdk库:系统会自动链接
共享库:独立库,不会被系统自动链接,使用时需要在AndroidManifest通过<uses-library>指定
//声明需要使用maps共享库,true表示如果手机系统不满足将不能安装该应用
<uses-library
android:name="com.google.android.maps"
android:required="true"
/>
add-ons库:存于add-ons目录下,大部分由第三方厂商或公司开发,会被自动解析添加到classpath
optional可选库:位于platforms/android-xx/optional目录下,通常为了兼容旧版本的API,使用时需要手动添加到classpath
b. 批量修改生成的apk文件名
<一>类型:
applicationVariants :仅仅适用于Android应用Gradle插件
libraryVariants :仅仅适用于Android库Gradle插件
testVariants :以上两种Gradle插件都使用
<二>示例:
applicationVariants是一个DomainObjectCollection集合,通过all方法遍历每一个ApplicationVariant,这里有googleRelease和googleDebug两个变体;然后判断名字是否以.apk结尾,如果是就修改其文件名。示例中共有。
c.动态生成版本信息
原始方式:由defaultConfig中的versionName指定
分模块方式:把版本号等配置抽出放在单独的文件里,并用ext{}括起来,通过apply from将其引入到build.gradle,版本信息就被当作扩展属性直接使用了
从git的tag中获取
从属性文件中动态获取和递增
d.隐藏签名文件信息
<一>必要性:为保证签名信息安全,最好直接放在项目中,而是放在服务器上
<二>一种思路:
服务器:配置好环境变量,打包时直接使用
本地:直接使用android提供的debug签名
在signingConfigs加入以下判断
signingConfigs {
if (System.env.KEYSTORE_PATH != ) {
//打包服务器走这个逻辑
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)
type:资源类型,如有string、id、bool
name:资源名称,以便在工程中引用
value:资源值
productFlavors{
google{
resValue 'string', 'channel_tips', 'google渠道欢迎你'
}
}
以google为例,在debug模式下,资源文件保存目录:build/generated/res/resValues/google/debug/values/generated.xml
f.Java编译选项
通过compileOptions{}闭包进行编译配置,可配置项:
encoding:配置源文件的编码
sourceCompatibility:配置Java源代码的编译级别
targetCompatibility:配置生成Java字节码的版本
android{
compileOptions{
encoding = 'utf-8'
sourceCompatibility = JavaVersion.VERSI0N_ 1_ 6
targetCompatibility = JavaVersion.VERSION_ 1_ 6
}
}
g. adb选项配置
通过adbOptions{}闭包进行adb配置,可配置项:
<一>timeOutInMs:设置执行adb命令的超时时间,单位毫秒
<二>installOptions:设置adb install安装设置项
-l:锁定该应用程序
-r:替换已存在的应用程序,即强制安装
-t:允许测试包
-s:把应用程序安装到SD卡上
-d:允许进行降级安装,即安装版本比手机自带的低
-g:为该应用授予所有运行时的权限
android{
adbOptions{
timeOutInMs = 5*1000
installOptions '-r', '-s'
}
}
h.DEX选项配置
通过dexOptions {}闭包进行dex配置,可配置项:
incremental:配置是否启用dx的增量模式,默认值为false
javaMaxHeapSize:配置执行dx命令时为其分配的最大堆内存
jumboMode:配置是否开启jumbo模式
preDexLibraries:配置是否预dex Libraries库工程,默认值为true,开启后会提高增量构建的速度
threadCount:配置Android Gradle运行dx命令时使用的线程数量
近期文章:
谁的Bug指给了我?害我损失5W奖金!
码妞:Java那么多锁,能锁住灭霸吗?
谷歌遭反垄断调查;5G牌照正式发放;IBM大裁员;百度又一高管离职
今日问题:
腾讯大佬弥补了你的Gradle漏洞了吧?
快来码仔社群解锁新姿势吧!社群升级:Max你的学习效率
相关推荐
- 服务器用的CPU和个人电脑用的CPU有什么区别?一篇文章告诉你!
-
服务器cpu和普通cpu的区别你的电脑CPU是‘短跑健将’,服务器CPU却是‘铁人三项选手’——它不追求瞬间爆发力,而要7×24小时扛住千军万马的数据洪流!想知道为什么企业机房敢收天价服务费?答案全藏...
- “吃鸡”新版本第1天,玩家进入游戏点击“立即更新”,后悔了!
-
欢迎诸位小伙伴们来到天哥开讲的《和平精英》“精英小课堂”~每逢两三个月,这款游戏就会迎来一次大版本迭代更新,很多朋友会在第一时间更新版本,前往全新的主题模式里一探究竟。不过也有一些老玩家并不会立刻更新...
- 中关村在线·aigo存储杯《无畏契约》全国高校争霸赛招募启事
-
以青春之名,燃电竞之火1赛事背景与宗旨在金秋送爽的9月,芊芊学子们即将回归校园生活。为了给精彩的校园生活锦上添花,由中关村在线与aigo存储联合主办的《无畏契约》全国高校争霸赛正式启幕,旨在为全国高...
- 【生肖狗】9.7-9.10提醒:人算不如天算,转变即是转机
-
九月上旬的风,带着秋意的清爽,也带着几分不可捉摸的变数。对于生肖狗的朋友们来说,9月7日到9月10日这四天,格外需要留意“计划与变化”的碰撞——你们向来习惯提前规划,做事稳妥周全...
- 转转客服IM系统的WebSocket集群架构设计和部署方案
-
本文由转转技术李帅分享,原题“转转客服IM的WebSocket集群部署方案”,下文有修订和重新排版。1、引言转转作为国内头部的二手闲置交易平台,拥有上亿的用户。用户在使用转转app遇到问题时,一般可以...
- 上线3天Steam好评率86%,《时间旅者:重生曙光》开启生存恐怖新篇章
-
这里究竟发生了什么?末日降临,真正的故事悄然启幕。目前,生存恐怖类游戏《时间旅者:重生曙光(Cronos:TheNewDawn)》已在PC(Steam、EpicGamesStore)、P...
- 什么神仙洗衣机让我一天有28小时?拆开松下「大四洗」藏了啥秘密
-
说起家庭洗衣的烦恼,想必很多人都有过类似的经历:贴身内衣要单独洗,宝宝的口水巾得小心呵护,宠物玩具怕藏污纳垢,床单被套又体积庞大,把这些东西混在一起洗担心越洗越脏,分开洗又得反复操作,洗完烘、烘完再洗...
- 爆料人挖出GTA6注册的奇葩域名 延续经典讽刺风格
-
等待《侠盗猎车手6》的日子跨越了数个春秋,在游戏圈期盼着这部可能成为史上最重磅游戏的过程中,每过一段时间就会有些许消息浮出水面。最新线索来自数据挖掘者Tez2在GTA论坛的发现,他可能偶然发现了关于...
- 跟着故事去旅行——读《驼峰间:旅行、探险与征服》
-
作者:郭冰茹《驼峰间》记录了旅行家伊本·白图泰有生之年流传的一则寓言,说一对父子被关进了监狱,有一天儿子问父亲他们每天吃的都是些什么肉,父亲说有牛、羊和骆驼,并且详细地描述了每种动物的特点。但不管父亲...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- 跳票6年后,「丝之歌」首发把Steam服务器干爆了 | 玩点好的
-
文丨果脯樱花隧道昨天晚上22点,「鸽」了6年的《空洞骑士:丝之歌》终于上线,算是了却不少玩家的执念。毕竟,这款游戏实在让人等了太多太多年,而且曾有过多次定档后跳票的「案底」,不知道把多少人都整出了P...
- 对标魔兽失败!腾讯版“魔兽”运营一年多后,宣布国际服凉凉
-
大家好,这里是正惊游戏,我是正惊小弟。有很多游戏都想干掉《魔兽世界》,但是大部分魔兽杀手都知道自己不是魔兽的对手,不过是想蹭一下人气而已。腾讯也有一款曾经想对标魔兽的大作,可是上线才一年半国际服就宣布...
- 408 Request Timeout:服务器等待客户端发送请求的时间过长。
-
408RequestTimeout是HTTP状态码之一,表示客户端在发送请求时,服务器等待的时间过长,最终放弃了处理该请求。此问题通常与网络延迟、客户端配置、服务器设置或者应用程序的性能有关...
- 梦幻西游:9.9维护解读,全新时间服锁定129级
-
梦幻西游:9.9维护解读,全新时间服锁定129级9月9日维护解读。1、教师节活动开启,一共7天。挂机,答题,收笔墨纸砚,收海马,搞起来。或者是提前收点家具,教师节期间体力珍贵,家具会涨价。又或者是教师...
- 只是拆掉一面墙,空间就立马大变样,这种设计思路,值得学习
-
你有没有过这样的经历?刚买的房子户型图看起来方方正正,装修完却发现——玄关鞋柜只能塞在角落,进门就撞墙;餐厅正好在过道中间,吃饭像走流程;明明有四个房间,却有一个空着没用,像块食之无味的鸡肋;客餐厅之...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 服务器用的CPU和个人电脑用的CPU有什么区别?一篇文章告诉你!
- “吃鸡”新版本第1天,玩家进入游戏点击“立即更新”,后悔了!
- 中关村在线·aigo存储杯《无畏契约》全国高校争霸赛招募启事
- 【生肖狗】9.7-9.10提醒:人算不如天算,转变即是转机
- 转转客服IM系统的WebSocket集群架构设计和部署方案
- 上线3天Steam好评率86%,《时间旅者:重生曙光》开启生存恐怖新篇章
- 什么神仙洗衣机让我一天有28小时?拆开松下「大四洗」藏了啥秘密
- 爆料人挖出GTA6注册的奇葩域名 延续经典讽刺风格
- 跟着故事去旅行——读《驼峰间:旅行、探险与征服》
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)