android 渠道包 占位符配置,Android打包
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
打包的事,之前很少做,也了解的比较少,今天好好看了看,总结一下,以后要是用到了,或许可以少走些弯路。
多渠道打包
友盟多渠道打包
友盟在 Github 也有相对应的文档,主要是利用 Android Gradle 中的 ProductFlavor 功能添加的多个渠道。
首先在 AndroidManifest.xml 中添加1
接着在 app 的 build.gradle 中添加:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20productFlavors {
anzhi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "anzhi"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}
yingyongbao {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
}
huawei {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
上面的配置看起来有点蠢,可以抽取出来,用一个方法来实现:1
2
3
4
5
6
7
8
9
10
11productFlavors {
anzhi {}
baidu {}
c360 {}
yingyongbao {}
huawei {}
xiaomi {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
另外,签名的配置肯定不能少,也是在 app 的 build.gradle 文件中:1
2
3
4
5
6
7
8signingConfigs {
release {
storeFile file("demo.jks")
storePassword "123123"
keyAlias "123123"
keyPassword "123123"
}
}
jks 和 keystore 俩文件,前者是 Android Studio 生成的,后者是 Eclipse 生成的,使用的时候两者都是可以的。
在 buildTypes 中加入对生成的 apk 的命名方式:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
File outputDirectory = new File(outputFile.parent);
def fileName
if (variant.buildType.name == "release") {
fileName = "caixiangji_${variant.productFlavors[0].name}.apk"
} else {
// fileName = "app_v${defaultConfig.versionName}_${packageTime()}_beta.apk"
fileName = "caixiangji_${variant.productFlavors[0].name}_beta.apk"
}
output.outputFile = new File(outputDirectory, fileName)
}
}
}
然后在 AS 自带的 Terminal 下输入:1gradlew assembleRelease
不过有可能出现一些问题,我在 mac 下就遇到过,例如:1-bash :gradlew command not found
那么有可能是权限问题,执行1sudo chmod +x gradlew
还有,在 mac 下执行当前目录下的命令要在前面加上 “./“。
当然也有可能是你没有配置好环境变量,按步骤设置一遍就好了。
如果一切顺利,那么差不多等上 10 分钟可能就打包好了。其实除了命令行,也可以直接使用图形化窗口操作,双击运行即可。
美团的多渠道打包
Walle : Android Signature V2 Scheme 签名下的新一代渠道包打包神器。
打包速度相对前者来说,真的是特特别快。
集成步骤 Github 上的文档写的也挺详细的了。
配置build.gradle
在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:1
2
3
4
5buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.5'
}
}
并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR1
2
3
4
5apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.5'
}
配置插件1
2
3
4
5
6
7
8walle {
// 指定渠道包的输出路径
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定制渠道包的APK的文件名称
apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
}
这里是将渠道的配置文件单独抽取出来了,所以需要在 app 文件夹下新建一个文件 channel ( Text 类型),在里面配置渠道的信息,例如:
最后可以打包了,所有渠道的:1./gradlew clean assembleReleaseChannels
或者是单独的渠道 (华为):1./gradlew clean assembleReleaseChannels -PchannelList=huawei
也可以直接用界面操作。
3 分钟不到, 10 多个不同渠道的包就打完了。
输出的位置是在 outputs/channels ,也可以自己配置。
多渠道使用 Walle 的情况下,我们可以基于 buildTypes 和 productFlavors 使用多版本和多环境的打包。
多版本
基于buildTypesdebug:调试版本,无混淆
release:发布版本,有混淆、压缩1
2
3
4
5
6
7
8
9
10
11
12
13
14buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.test
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.test
}
}
多环境
基于productFlavorsdevelop:开发环境,开发和自测时使用
check:测试环境,克隆一份生产环境的配置,在这里测试通过后,再发布到生产环境。
product:生产环境,正式提供服务的。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29productFlavors {
//开发环境
develop {
buildConfigField "int", "ENV_TYPE", "1"
applicationId 'com.zhanglf.servertest.develop'
manifestPlaceholders = [
app_name: "开-Demo",
app_icon: "@mipmap/dev_launcher"
]
}
//测试环境
check {
buildConfigField "int", "ENV_TYPE", "2"
applicationId 'com.zhanglf.servertest.check'
manifestPlaceholders = [
app_name: "测-Demo",
app_icon: "@mipmap/check_launcher"
]
}
//生产环境
product {
buildConfigField "int", "ENV_TYPE", "3"
applicationId 'com.zhanglf.servertest.product'
manifestPlaceholders = [
app_name: "Demo",
app_icon: "@mipmap/pro_launcher"
]
}
}
在 mainfest 中使用占位符:1
2android:icon="${app_icon}"
android:label="${app_name}"
不同渠道 资源替换问题
一种比较想到的方式是就是通过代码的方式获取渠道信息,再通过该信息,分配不同的资源。但是该方式的缺点是,不同的资源在打包的时候都被放进了 apk 中。1String channel = WalleChannelReader.getChannel(this.getApplicationContext());
另一种方式就是根据不同的渠道在打包的时候就将对应的资源分配好了,上面的多环境中的 icon 和 app_name 占位符的方式就是如此。
具体实现:
在项目工程的 src 文件夹下创建对应渠道的文件夹,下面存放资源文件,如下:
这样通过不同渠道打包的时候,资源文件会自动覆盖 main 中的资源,而且 main 中的或者是别的渠道中的文件都不会再该渠道的包中出现,从而更加节省空间。
android 渠道包 占位符配置,Android打包相关推荐
- android 多个占位符,基于android布局中的常用占位符介绍
大家在做布局文件是肯定会遇到过下面的这种情况 填充出现问题,所以需要用到占位符规范填充 汉字常用占位符: android:layout_width="wrap_content" a ...
- Android渠道包自动发布市场,Android Gradle实现打包指定渠道后自动上传到fir
fir分三个主要步骤1.获取fir上传凭证 2.上传APK+APP logo图标 3.获取最新的下载地址供别人下载 注:python使用的是requests网络请求库 1.获取fir上传凭证 imag ...
- 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#manifestPlaceholders 清单文件占位符配置 )
文章目录 一.ProductFlavor#manifestPlaceholders 清单文件占位符配置 Android Plugin DSL Reference 参考文档 : 文档主页 : https ...
- Android 渠道包 动态生成 apk 名称
Android 渠道包 动态生成 apk 名称 低版本打包配置 buildTypes {release {minifyEnabled trueshrinkResources truezipAlignE ...
- Android Gradle manifestPlaceholders 占位符详解
Android Gradle manifestPlaceholders 占位符详解 在实际项目中,AndroidManifest里十几个地方的值是需要动态的改变(生成apk文件的时候).如果每次去改也 ...
- Android渠道包测试方案
###Android渠道包测试方案 有段时间没有写过明显关于测试相关的文章了,最近听说Android渠道包也会出现问题,于是就用python写了一个相关的测试脚本.于是乎,就有了此文... 想法说来也 ...
- spring 属性占位符_Spring属性占位符配置器–一些不太明显的选项
spring 属性占位符 Spring的PropertySourcesPlaceholderConfigurer用于从XML或Java Config中定义的Spring bean定义外部化属性. Pl ...
- Spring属性占位符配置器–一些不太明显的选项
Spring的PropertySourcesPlaceholderConfigurer用于从XML或Java Config中定义的Spring bean定义外部化属性. PlaceholderConf ...
- android渠道包加固,Android多渠道打包和加固那些事
多渠道两种打包方式: 一.利用android studio的productFlavors去多渠道打包.速度慢,让人崩溃.但与市场上的一些加固无缝接入. 二.利用美团的walle,快速高效,但是在加固上 ...
最新文章
- python工程~多个python文件如何运行
- 皮一皮:如何将紫薯变成绿薯?
- 确定多重选择列表控件 (List Control) 中的选定内容
- 项目: flappy bird
- 为什么“消费降级”突然火了?数字基尼系数给你一点理论支撑
- Julia: readdlm
- 【转】js如何准确获取当前页面url网址信息
- c语言谭浩强第五版 第五章习题14 牛顿迭代法求方程根
- 建模没有用『灵敏度分析』,一半儿的报名费已经飞了
- python快速编程入门教材免费阅读,Python快速编程入门(第2版)
- 【BZOJ3295】【CQOI2011】动态逆序对(CDQ分治)
- 【Java 8 新特性】Java LocalDate 和 Epoch 互相转换
- 百度AI接口测试案列一:车牌识别
- 第三方百度地图----显示所在位置
- 超强的在线设计Logo工具:Logo Creator_logo_UE
- 计算机组成原理概念学习DAY3——内部存储器
- 用Xftp和Xshell本地链接华为云主机
- 【2022年】Win11修改锁屏界面、登录界面背景图片方法(亲测有效)
- linux 键盘测试程序员,程序员之家打字测试
- 阿里云centOS7安装好Nginx设置外网可以访问80端口