0
点赞
收藏
分享

微信扫一扫

Android Studio之Gradle多渠道打包,android面试2020

心智的年轮 2022-02-05 阅读 64

友盟多渠道打包

===========

废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段:

<meta-data

android:name=“UMENG_CHANNEL”

android:value=“Channel_ID” />

里面的 Channel_ID 就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。

第一步 在 AndroidManifest.xml 里配置 PlaceHolder

<meta-data

android:name=“UMENG_CHANNEL”

android:value="${UMENG_CHANNEL_VALUE}" />

第二步 在 build.gradle 设置 ProductFlavors

android {

productFlavors {

xiaomi {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: “xiaomi”]

}

_360 {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: “_360”]

}

baidu {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: “baidu”]

}

wandoujia {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: “wandoujia”]

}

}

}

或者批量修改

android {

productFlavors {

xiaomi {}

_360 {}

baidu {}

wandoujia {}

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

}

很简单,直接执行 ./gradlew assembleRelease , 然后就可以静静的等待打包完成。

assemble结合Build Variants来创建task

===================================

assemble 这个命令会结合 Build Type 创建自己的task,如:

  • ./gradlew assembleDebug

  • ./gradlew assembleRelease

除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor 。

如我们想打包wandoujia渠道的release版本,执行如下命令就好了:

./gradlew assembleWandoujiaRelease

如果我们只打wandoujia渠道版本,则:

./gradlew assembleWandoujia

此命令会生成wandoujia渠道的Release和Debug版本

同理我想打全部Release版本:

./gradlew assembleRelease

这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

总之,assemble 命令创建task有如下用法:

**assemble**: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。

**assemble**: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。

**assemble**: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。

完整的gradle脚本

===============

最后来一份我在项目中使用的完整的gradle文件配置:

apply plugin: ‘com.android.application’

def releaseTime() {

return new Date().format(“yyyy-MM-dd”, TimeZone.getTimeZone(“UTC”))

}

android {

compileSdkVersion 21

buildToolsVersion ‘21.1.2’

defaultConfig {

applicationId “com.boohee.*”

minSdkVersion 14

targetSdkVersion 21

versionCode 1

versionName “1.0”

// dex突破65535的限制

multiDexEnabled true

// 默认是umeng的渠道

manifestPlaceholders = [UMENG_CHANNEL_VALUE: “umeng”]

}

lintOptions {

abortOnError false

}

signingConfigs {

debug {

// No debug config

}

结尾

最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)

接下来是资料清单:(敲黑板!!!

领取通道在这里给你们摆上了~

点击我的GitHub免费获取

1.数据结构和算法

2.设计模式

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

[外链图片转存中…(img-wCEGkVNx-1644026700514)]

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

[外链图片转存中…(img-p7omACTJ-1644026700515)]

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-48f8VAz1-1644026700515)]

举报

相关推荐

0 条评论