返回介绍

8.5 批量打渠道包

发布于 2024-08-17 23:46:12 字数 3881 浏览 0 评论 0 收藏 0

所谓的渠道包,从代码层面讲,就是AndroidManifest中的UMENG_CHANNEL这个key的值,将其替换为相应的渠道号,比如360市场,这个值就是360Android,然后再进行打包。

从商业角度讲,360Android这个渠道号是财务部门用来和360市场做结算的,我们每月会根据友盟上360Android这个渠道有多少下载量(或激活量),来向360公司支付相应的推广费用,于是无线推广部门应运而生,他们的一部分工作就是干这个事情,有的渠道包是手动上传到各大市场,有的渠道包是分发给市场的工作人员,由他们帮忙发布。

除了发布到各大市场,渠道包的另一种出现场景是,外链。比如说公司网站首页上会提供下载;比如说推广活动的Html链接;比如说公交车站、电梯上的二维码(它其实也是一个Html链接)。我们会把这些链接对应的渠道包都放在公司的服务器上,以提供下载。

我们需要建立批量打渠道包的机制。目前,批量打渠道包有两种方式,接下来我会逐一介绍。

8.5.1 基于apk包批量生成渠道包

基于一个apk包,我们将其反编译,然后遍历渠道列表获取每一个渠道号,修改Android-Manfest.xml中的渠道号后,重新进行打包工作,包括签名、混淆和对其操作,如图8-5所示。

对图8-5中的打包流程详细分析如下:

1)反编译apk文件。

apktool.bat d--no-src–


f"C:\jianqiang_app.apk""temp"

反编译apk文件后,在temp目录中能看到AndroidManifest.xml文件。

2)for循环渠道列表,逐个打渠道包。

2.1)替换AndroidManifest.xml中的渠道号。

图8-5 基于apk包批量生成渠道包的流程图

2.2)将反编译后的文件重新编译成apk,放到apk_temp目录下:

apktool.bat b "temp" "apk_temp\unsigned-App名称


.apk"

2.3)签名apk文件。

java -jar SignApk.jar "C: \a.b" 
  "123456" "JianqiangApp" "123456" 
  "apk_temp\unsigned-appname.apk" 
  "apk_temp\unzipAligned-appname.apk"

2.4)对要发布的apk文件进行对齐操作。

zipalign.exe -v 4 
  "apk_temp\unzipAligned-App名称


.apk"
  "apk_temp\App名称


-渠道号


.apk"

2.5)把打好的渠道包重命名为:App名称_渠道号.apk,然后将其转移到output\App名称\App名称_渠道号.apk。

上述这些操作都有相应的Android SDK命令,我们可以使用任何语言编写一个程序来一次执行这些命令。

这里我们可以使用友盟提供的渠道批量打包工具,它是基于C#来实现的上述批量打包流程。 [1]

8.5.2 基于代码批量生成渠道包

对于基于代码进行打包的方法,我们在前面的章节介绍过build.xml,但是这个脚本每次只能打一个包,我们需要写一个新的脚本batchbuild.xml,它会依次执行以下操作:

1)读取channel.txt文件中的渠道列表。

<target name="foreach_manager">
  <loadfile property="listVerText" 
    srcfile="${app.source.path}/${channel.filename}" 
    encoding="GBK" />  
  <propertyregex override="true" property="apk-channel" 
    input="${listVerText}" regexp="\r\n" replace=";"/>
  <!—


 遍历


${apk-channel}打包


 —


>
  <foreach target="build-apk" param="channelName" 
    list="${apk-channel}" delimiter=";"/>
</target>

2)执行for循环语句,执行build.xml脚本文件中build-apk这个target。

2.1)替换AndroidManifest.xml中的渠道号。

2.2)执行build.xml脚本进行打包。

2.3)将打好的包并转移到指定的目录build/1.1.0下面,1.1.0为版本号。

2.4)清理打包过程中生成的临时文件,为打下一个渠道包做准备。

<target name="build-apk">
  <echo>build-path:${build-path}, 目录


:${channelName} ,
    渠道


:${channelName}</echo>
  <!-- 创建放


APK的目录


(FFFFFF就是为了进行一次字符串的


override操作


) -->
  <propertyregex override="true" property="build-path" 
    input="${build-path}/${channelName}FFFFFF" 
    regexp="FFFFFF" replace="" />
  <echo>创建目录


:${build-path}</echo>
  <mkdir dir="${build-path}" />
  <!-- 替换


Manifest中的


UMENG_CHANNEL字段


 -->
  <replaceregexp file="AndroidManifest.xml"
    match="(android:name="UMENG_CHANNEL
      "\s+android:value=")(.*)(")"
    replace="\1${channelName}\3"
    encoding="UTF-8"
    byline="false"/>
  <!--开始打包


  -->
  <ant antfile="build.xml" inheritAll="true" target="zipalign" />
  <!-- 移动


APK至相应目录


 -->
  <copy file="${basedir}/${output.dir}/${appname}_for_android_
        ${android_version}_${temp.dir}.apk"
    tofile="${build-path}/${appname}_${appversion}_
        ${channelName}.apk" />
  <!-- 清理生成的临时文件,为


build下一个渠道包做准备


 -->
  <cleanTmpFolder />
</target>

上述流程如图8-6所示。

我们只要执行下述命令,就可以批量打渠道包了:

c:\ProjectForAntBuild>ant –


buildfile batch_build.xml

图8-6 基于代码批量生成渠道包的流程图

[1] 该工具下载地址:https://github.com/umeng/umeng-muti-channel-build-tool。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文