跳至主要內容

Android 多渠道打包知识

JI,XIAOYONG...大约 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/29868235open in new window

//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 自动化之旅—生成渠道包open in new window

文章标题:《Android 多渠道打包知识》
本文作者: JI,XIAOYONG
发布时间: 2018/03/25 22:17:57 UTC+8
更新时间: 2023/12/30 16:17:02 UTC+8
written by human, not by AI
本文地址: https://jixiaoyong.github.io/blog/posts/a3a3dc4c.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。转载请注明出处!
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8