Android 多渠道打包知识
原创...大约 2 分钟
国内 Android 应用常常要分发到多个应用商店,使用 Android Studio 正确配置 build.gradle 与 AndroidManifest.xml 文件可以一步打包多个渠道。
本文实现的多渠道打包可实现不同渠道:
- 有不同的项目 id(applicationId)
- 不同 App 名称(android:label)
- 不同 App 图标(android:icon)
- 等等
1.友盟配置
*具体配置请参考 UMeng 官方文档。
作为第三方统计平台,国内很多软件都使用的是 Umeng 的产品,故而大多数软件多渠道打包配置如下:
- 添加依赖
../app/build.gradle
dependencies {
//友盟 sdk
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:analytics:latest.integration'
...}
- 修改 AndroidManifest.xml
<application>
...
<!--友盟初始化appkey和channel-->
<meta-data android:value="${APP_KEY}" android:name="UMENG_APPKEY"/>
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
</application>
- 修改 build.gradle
android {
productFlavors {
beta {}
baidu {}
zhushou91 {} //不能以数字开头
anzhi {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name
,APP_KEY:umenInfo['APP_KEY']]
//这里有一个知识点,用 build.gradle 读取 properties 文件信息,用于将部分信息统一放置在本地配置文件中,避免泄漏,若无此类要求可直接使用 APP_KEY:'da15d26d1a'等
}
//解决 flavor Dimensions 问题 http://blog.csdn.net/syif88/article/details/75009663
flavorDimensions "versionCode"
}
//其他 umeng 要求的配置
这样编译完之后,通过通过 build>Generate Signed APK...便可以打包不同渠道的 apk,在友盟统计平台上统计各个渠道的 App 信息了。
2.Android Studio 实现多渠道打包
方法 1 要求依赖 umeng 模块,使用场景难免有些受限,其实我们也可以自己实现多渠道打包,方法 1 使用的应该也是此原理。
- AndroidManifest.xml
在需要根据渠道不同而变化的地方使用${KEY}
形式替换掉原先的值。
例如:
<application
android:label="${APP_NAME}"
...>
<meta-data android:name="APP_TEXT" android:value="${APP_TEXT}"/>//可以在java文件中获取到
- app/build.gradle
productFlavors {
beta {applicationId = "cf.android666.mykotlin.beta"//每个渠道有不同的包名
manifestPlaceholders = [APP_NAME : name ,APP_TEXT:'beta']
}
baidu {applicationId = "cf.android666.mykotlin.baidu"
manifestPlaceholders = [APP_NAME:'A APP',APP_TEXT:'baidu']
}
}
- 在 java 中获取
meta-data
(非必须)
《Android 获取 Manifest 中<meta-data>元素的值》 - CSDN 博客 https://blog.csdn.net/zhang31jian/article/details/29868235
//application 中的 meta-data
var appInfo = context.packageManager.getApplicationInfo(context.packageName,
PackageManager.GET_META_DATA)
//service、receiver 中的 meta-data
var appInfo = context.packageManager.getServiceInfo(ComponentName(context,MService::class.java),
PackageManager.GET_META_DATA)
var appName = appInfo.metaData.getString("APP_NAME")
3.生成多个渠道文件夹
还有一种方法,通过在项目中生成多个渠道的文件夹,在里面替换对应的资源文件,从而实现多渠道打包不同项目名,不同 icon 等等
在../app/src/目录下新建对应渠道文件夹,和 main 同级
在该渠道目录下新建对应的资源目录,在打包时自动替换对应资源
目录树如下
src
--baidu
----res/drawable
--beta
--main
----res/drawable
4.More
此外还有美团的多渠道打包技术等
具体可参考文章:美团 Android 自动化之旅—生成渠道包
文章标题:《Android 多渠道打包知识》
本文地址: https://jixiaoyong.github.io/blog/posts/a3a3dc4c.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。转载请注明出处!