python打包apk_使用Python多渠道打包apk

使用Python生成多渠道包

往apk包中追加到一个空文件到META-INF目录以标识渠道,Android中获取此文件即可获得App的下载渠道

首先在info文件夹新建一个qdb.txt的空文本文件

新建channel.txt存放渠道来源

662652-20170218104839613-682235498.png

运行Python代码即可将目录下的apk生成多渠道文件包

662652-20170218105008472-1501177044.png

Python代码如下:

#!/usr/bin/python

# coding=utf-8

import zipfile

import shutil

import os

# 空文件 便于写入此空文件到apk包中作为channel文件

src_empty_file = 'info/qdb.txt'

# 创建一个空文件(不存在则创建)

f = open(src_empty_file, 'w')

f.close()

# 获取当前目录中所有的apk源包

src_apks = []

# python3 : os.listdir()即可,这里使用兼容Python2的os.listdir('.')

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]

# 创建生成目录,与文件名相关

output_dir = 'output_' + 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()

# 拼接对应渠道号的apk

target_apk = output_dir + src_apk_name + "-" + target_channel + 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/qdb_{channel}".format(channel = target_channel)

# 写入渠道信息

zipped.write(src_empty_file, empty_channel_file)

# 关闭zip流

zipped.close()

Android中读取文件取得渠道ID

/** 获取渠道ID **/

public String getChannelId() {

Context context = cordova.getActivity().getApplicationContext();

//从apk包中获取

ApplicationInfo appinfo = context.getApplicationInfo();

String sourceDir = appinfo.sourceDir;

//默认放在meta-inf/里, 所以需要再拼接一下

String key = "META-INF/qdbchannel";

String ret = "";

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.startsWith(key)) {

ret = entryName;

break;

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (zipfile != null) {

try {

zipfile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

String[] split = ret.split("_");

String channel = "";

if (split != null && split.length >= 2) {

channel = ret.substring(split[0].length() + 1);

}

return channel;

}

附上查看apk内文件方法

新建一个压缩包

打开压缩包

在压缩包内回退双击进入apk文件即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是两种Python打包apk的方式: 1. 使用python-for-android打包apk 可以使用python-for-android工具为Android创建一个包。具体步骤如下: 1)安装依赖项 ```shell sudo apt-get update sudo apt-get install build-essential ccache git libncurses5:i386 libstdc++6:i386 zlib1g:i386 openjdk-8-jdk unzip ant ``` 2)安装python-for-android ```shell sudo pip install python-for-android ``` 3)创建一个新项目 ```shell p4a apk --private /path/to/your/project --package org.test.myapp --name "My Application" --version 0.1 --bootstrap=sdl2 ``` 其中,/path/to/your/project是你的项目路径,org.test.myapp是你的应用程序包名称,My Application是你的应用程序名称,0.1是你的应用程序版本号,sdl2是你的应用程序引导程序。 4)构建APK ```shell cd /path/to/your/project p4a apk --private . --package org.test.myapp --name "My Application" --version 0.1 --bootstrap=sdl2 --debug ``` 其中,--debug选项用于构建调试版本的APK。 2. 使用Buildozer打包apk 可以使用Buildozer工具自动完成整个过程。具体步骤如下: 1)安装依赖项 ```shell sudo apt-get update sudo apt-get install -y python3-pip build-essential git python3-setuptools libffi-dev ``` 2)安装Buildozer ```shell sudo pip3 install buildozer ``` 3)创建一个新项目 ```shell buildozer init ``` 4)编辑buildozer.spec文件 ```shell nano buildozer.spec ``` 在文件中设置应用程序名称、版本、包名、依赖项等。 5)构建APK ```shell buildozer android debug deploy run ``` 其中,debug选项用于构建调试版本的APK,deploy选项用于将APK部署到连接的设备上,run选项用于在设备上运行应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值