百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

看完这篇Gradle,你才能去面腾讯(看完这篇gradle,你才能去面腾讯视频)

cac55 2024-10-01 07:54 15 浏览 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你的学习效率

相关推荐

Linux :远程访问的 16 个最佳工具(一)

通过远程桌面协议(RDP)可以访问远程Linux桌面计算机,这是Microsoft开发的专有协议。它为用户提供了一个图形界面,可以通过网络连接连接到另一台/远程计算机。FreeRDP是...

Guacamole安装部署_guacamole简单搭建

Guacamole安装部署Guacamole简介Guacamole是提供连接远程桌面的解决方案的开源项目(也可以说是一个远程桌面网关),通过浏览器就能远程操作服务器,适用于Chrome、Firefox...

1-FreeRTOS入门指南_freertos+lwip

本专栏是根据官方提供的文档进行FreeRTOS的各个功能函数的说明,以及函数的使用本专栏不涉及动手操作,只是对原理进行说明,FreeRTOS基础知识篇更新完成会对如何在开发板上进行上手实战操作。这里不...

Windows暂停远程桌面,这些工具可替代

Windows暂停远程桌面,这些工具可替代近日,Windows官方宣布将于2025年5月27日起,在Windows10和Windows11应用商店中下架“Microsoft远程桌面”应用。这一消...

现在做 Web 全景合适吗?_前端全景

作者:前端藏经阁转发链接:https://www.yuque.com/xwifrr/uxqg5v/cgclx0前言Web全景在以前带宽有限的条件下常常用来作为街景和360°全景图片可查看。它可以...

网页直连,MSTSC远程控制Windows新姿势!

不用安装软件,打开浏览器就能远程办公?今天要聊的是一种颠覆传统的远程控制玩法,直接用网页连接Windows电脑,无需下载客户端,手机、平板、Mac甚至Linux都能轻松操作。这可不是吹牛,结合MSTS...

QQ出现大面积盗号,原因已查明,请抓紧改密码

你没有看错,QQ又上了微博热搜,这次比较严重了,QQ出现大面积盗号,多个QQ群出现yellow信息,其次导致多位成员被踢出,并且还被封号处理,到底怎么回事?请继续往下看。在6月26日晚上10点左...

我在淘宝花10块钱,买到了能玩“宝可梦”的Q群机器人

十一月雨|文我是个没事喜欢逛淘宝的人,虽然是个不怎么好的习惯,但总是能够发现一些奇奇怪怪的东西,这次我发现的是一种Q群机器人。Q群机器人,大多是基于腾讯SmartQQ协议实现的一种能自动回复、自定...

Metasploit最实用的攻击模块&quot;Meterpreter&quot;

Meterpreter命令详解Meterpreter是Metasploit渗透测试平台框架中功能最强大的攻击载荷模块,在最新的Metasploitv4.5.0版本中,攻击载荷模块已经达到了25...

手机QQ再更新,上线了一个想让人“无法回避”的新功能

近日,手机QQ更新了V8.2.6.700版本,苹果iOS版和安卓版手机QQ上线了一个新功能:可以实时显示对方的手机电量以及充电状态。开通电量显示也很简单,长按主页左上方的头像,在在线状态中选择我的电量...

「网络安全」常见攻击篇(20)——点击劫持

什么是点击劫持?点击劫持(Clickjacking)技术又称为界面伪装攻击(UIredressattack),是一种视觉上的欺骗手段。通常有两种方式:攻击者使用一个透明的iframe,覆盖...

曾利用驱动人生升级通道传播的木马下载器攻击方法再次升级

一、概述御见威胁情报中心1月25日再次监测到曾利用驱动人生升级通道传播的木马下载器攻击方法再升级。本次升级主要变化在于攻击模块,木马在之前的版本上,新增计划任务“DnsScan”,在其中将永恒之蓝攻击...

QQ飞车手游:点券首个功能性宠物上架,实战稳定触发还不快入手?

随着版本的逐渐更新,点券宠物在道具模式发挥逐渐越来越小,曾经探讨点券宠物在道具是不是真的没有用?直到出现了波斯猫改变了,我对点券宠物在道具模式的看法,如今又一个强势点券宠物来袭,而且特性触发简单,还是...

工单系统设计实战(上):核心配置与效能提升

流程的标准化并非终点,而是研发效能持续革命的基石。当工单系统真正成为研发团队的“神经中枢”,每一次需求的精准流转、每一行代码的受控提交、每一次版本的可靠发布,都将汇聚成驱动产品持续进化的强大动力...

6个编辑PDF文档内容的工具(软件+网站)

在日常办公、学习和生活中,PDF文件因其格式稳定、跨平台兼容性强等特点,被广泛应用。但有时我们拿到PDF文件后,却发现需要修改其中的内容,总感觉有点难搞。其实PDF文档编辑修改也很简单,这里分享6个软...

取消回复欢迎 发表评论: