Android分渠道多应用名打包方案
发布日期:2021-06-23 19:02:47 浏览次数:12 分类:技术文章

本文共 3033 字,大约阅读时间需要 10 分钟。

转载请注明出处

Author:ruanjianjiagou@163.com

背景

为优化APP在商店的应用排名,往往在不同的应用商店会有不同的AppName,需求方要求,某一个名字可能对应多个渠道。应为企业级应用会选择在上线的APP最后一步选择加密方案,所以修改App名称应该放在加密之前,由此有以下打包方案。


本文主要讲解多渠道打包方案,打包的准备工作不在此篇展开。

准备工作

  • 根据市场要求的AppName 的包
  • 对应包的加密工作
  • 产物目录如下规则存放

    ···package文件夹
    ·
    ······A文件夹
    ·
    ·····name1.apk 自定义文件名
    ·····该文件名对应的渠道配置信息

    ······B文件夹

    ·
    ·····name2.apk 自定义文件名
    ·····该文件名对应的渠道配置信息
    ····python脚本

以上文件目录详情如下图所示


根目录的python脚本如下

说明:主要是遍历每个文件夹中的apk包和对应的渠道信息生成对应的包放在根据文件名生成的文件夹中
最后将中间文件删除
注:本打包方案适用于signerVersion v1的签名方式

#!/usr/bin/python# coding=utf-8import zipfileimport shutilimport os# 空文件 便于写入此空文件到apk包中作为channel文件src_empty_file = 'info/czt.txt'# 创建一个空文件(不存在则创建)#f = open(src_empty_file,'w') #f.write('111')#f.close()# 获取当前目录中所有的apk源包src_apks = []def eachFile2(filepath):    print "我要读取的文件路径"+filepath    eachFile3(filepath)def eachFile(filepath):    pathDir =  os.listdir(filepath)    for allDir in pathDir:        child = os.path.join('%s/%s/' % (filepath, allDir))     #   print child        if os.path.isdir(child):             eachFile2(child)def eachFile3(path):    dirs = os.listdir(path)    print 'eachFile3'    for file in dirs:        dirs_cook = path+'/'+file        print os.path.isfile(dirs_cook)        if os.path.isfile(dirs_cook):            extension = os.path.splitext(file)[1][1:]            if extension in 'apk':                src_apks.append(file)                print '执行正常'# python3 : os.listdir()即可,这里使用兼容Python2的os.listdir('.')#获取当前文件夹路径 filePath = os.path.split(os.path.realpath(__file__))[0]#执行方法eachFile(filePath)for file in os.listdir('.'):    if os.path.isfile(file):        extension = os.path.splitext(file)[1][1:]        if extension in 'apk':            src_apks.append(file)#获取渠道列表channel_file = 'info/channel.txt'f = open(channel_file)lines = f.readlines()f.close()for src_apk in src_apks:    # file name (with extension)    src_apk_file_name = os.path.basename(src_apk)    # 分割文件名与后缀    temp_list = os.path.splitext(src_apk_file_name)    # name without extension    src_apk_name = temp_list[0]    # 后缀名,包含.   例如: ".apk "    src_apk_extension = temp_list[1]    #分割版本号    mylist = src_apk_name.split('-')    version = mylist[1]    # 创建生成目录,与文件名相关    output_dir = src_apk_name + '/'    # 目录不存在则创建    if not os.path.exists(output_dir):        os.mkdir(output_dir)    # 遍历渠道号并创建对应渠道号的apk文件    for line in lines:        # 获取当前渠道号,因为从渠道文件中获得带有\n,所有strip一下        target_channel = line.strip()        f = open(src_empty_file,'w')         f.write(target_channel)        f.close()        # 拼接对应渠道号的apk        target_apk = output_dir + mylist[0] + "-" + target_channel + "-" + mylist[1] + src_apk_extension          # 拷贝建立新apk        shutil.copy(src_apk,  target_apk)        # zip获取新建立的apk文件        zipped = zipfile.ZipFile(target_apk, 'a', zipfile.ZIP_DEFLATED)        # 初始化渠道信息        empty_channel_file = "META-INF/channel"        # 写入渠道信息        #zipped.write(src_empty_file, empty_channel_file)        print(target_channel)        zipped.writestr(empty_channel_file, target_channel)        # 关闭zip流        zipped.close()

暂存后续文件目录补充。

转载地址:https://blog.csdn.net/u014513456/article/details/74783579 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:小米手机无法打包的解决方案
下一篇:友盟分享本地图片到微信无法调起微信解决方案

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月05日 21时40分32秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章