python 打安卓APK渠道包,分分钟千把个

目前安卓APK打渠道包,主要有3种方式,

一、传统手动, 一个一个的改渠道号,然后改一个打一个,这种只有当渠道数不多时用,如果渠道有几百甚至上千个,估计眼睛都会花手都会麻,还不知道何时何月才能完成

二、gradle配置,可以先把所有的渠道都在gradle里面配置好,然后执行打包,就会一个一个的去编译,直接到打完,一般情况打一个包需要半分到一分钟,如果100个包需要2个小时,1000个包需要一天,我的神啊,这种方式只能用于渠道包不是很多的情况下

三、接下来讲讲本文的重点方法,Python打包,原理很简单,就是把一个APK文件解压后放入一个渠道命名的空文件,然后再把这些文件压缩回APK,经过使用,确实非常方便快捷,一分钟打1000个绝对不是问题,下面有图有真相,我打了大概500个渠道包,耗时15秒,牛逼吧!大笑如图:



 下面贴下打包的Python代码,目的就是把APK解压,然后利用渠道号文件,生成对应渠道的APK

import sys,os,shutil,zipfile,time
apkVersion="1.0"
srcFileName="source.apk"
apksDir="apks"
destDir=os.path.abspath('.')
target_file="channel.apk"

file=open("channel.txt")

def writeChannelToApk(filename,channel):
		z=zipfile.ZipFile(filename,'a',zipfile.ZIP_DEFLATED)
		empty_channel_file="META-INF/channel_{channe}".format(channe=channel)
		if not os.path.exists(target_file):
			open(target_file,'a').close()
		z.write(target_file,empty_channel_file)
		z.close()
		print "writeChannelToApkchannel"+channel+","+filename+"\n"

def cpFile(srcPath,fileName):
	destPath = destDir + os.path.sep + fileName
	if os.path.exists(srcPath) and not os.path.exists(destPath):
		shutil.copy(srcPath,destPath)
		

		
if not os.path.exists(srcFileName):
	print "source file "+srcFileName+" not exists"
	sys.exit(1)


start = time.clock()

if not os.path.exists(apksDir):
	os.makedirs(apksDir)

for line in file:
	channel=line.strip('\n').strip()
	targetFileName=apksDir+"/hoolay_"+channel+".apk"
	print "copyfile:"+targetFileName
	cpFile(srcFileName,targetFileName)
	writeChannelToApk(targetFileName,channel)
end = time.clock()

print("The function run time is : %.03f seconds" %(end-start))


#heliao-app-91-5.1.1


接下来是Java文件代码,目的是根据APK中的渠道文件获取渠道号

package com.hoolay.core.util;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.text.TextUtils;

import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ManifestUtil {

    private static final String SP_KEY = "device_channel";
    public static final String START_FLAG = "META-INF/channel_";

    /**
     * 获取META-INFO下面的渠道
     *
     * @param context
     * @return
     */
    public static String getChannel(Context context) {
        SharedPreferences sp = context.getSharedPreferences("hoolay_sp", Context.MODE_PRIVATE);
        String channel = sp.getString(SP_KEY, null);
        if (!TextUtils.isEmpty(channel)) {
            return channel;
        }
        ApplicationInfo appinfo = context.getApplicationInfo();
        String sourceDir = appinfo.sourceDir;
        ZipFile zipfile = null;
        try {
            zipfile = new ZipFile(sourceDir);
            Enumeration<?> entries = zipfile.entries();
            while (entries.hasMoreElements()) {
                ZipEntry entry = ((ZipEntry) entries.nextElement());
                String entryName = entry.getName();
                if (entryName.contains(START_FLAG)) {
                    channel = entryName.replaceAll(START_FLAG, "");
                    sp.edit().putString(SP_KEY, channel).apply();
                    return channel;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (zipfile != null) {
                try {
                    zipfile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return "";

    }
}

下面是渠道号,按需自行增删

360
appChina
wandoujia
91
baidu
QQ
3G
eoe
anzhi
163
hiapk
jifeng
xiaomi
meizu
oppo
lenovo


打好的APK:




说下Windows下怎么运行运行Python脚本,首先要安装Python工具,我这里用的2.7,当然也可以用其他版本,可能会影响的python语法,有语法问题,自行修改,

安装好配置下环境变量,然后在命令提示符里面检查下:输入   python   


如果有上提示,说明就好了,都完事了就可以运行Python脚本了,接着需要进入到python脚本所在的文件目录,因为这个脚本当前用的是相对路径,然后输入:python  batch_apk.py 

回车后就会看到在打包了,如果提示有语法错误或者找不到某个文件,说明前置任务还没完成,请自行百度和检查,好了,各位童鞋,


最后我把打包工具的下载链接贴上

点击打开链接

http://download.csdn.net/detail/msn465780/9572954


后续问题请看这篇文章

点击打开链接

http://www.jianshu.com/p/52a3c3187dcc



Android 新一代多渠道打包神器

https://zhuanlan.zhihu.com/p/26674427 点击打开链接


新一代开源Android渠道包生成工具Walle

https://tech.meituan.com/android-apk-v2-signature-scheme.html   点击打开链接




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值