xapk介绍
参考 https://www.jianshu.com/p/8d62ee2a5cb7
xapk和apk类似,是android的一种打包应用程序的方法。使用这种方式打成的包以.xapk结尾.可以将.xapk后缀直接改为zip后缀,然后使用解压缩工具解压xapk包。xapk有两种组织方式:
- xapk=核心apk+obb文件夹
- xapk=核心apk+一个或多个其他apk
两种方式都包含一个核心apk,该apk的名字一般就是包名.apk,是应用必须的骨架包。在核心apk+obb文件夹的组合中,只包含一个apk,即核心apk,应用需要的音视频,图片等资源则抽离成若干个obb文件,存放在obb文件夹下。在核心apk+一个或多个其他apk的组合中,会将不同语言配置,so库等数据抽离成若干个单独的apk。在Google play中下载的应用,大部分都是这两种形式。
以下安装方法暂不涉及OBB 数据
方案1 install-multiple
个人使用方案
参考
https://android.stackexchange.com/questions/221204/how-to-install-xapk-apks-or-multiple-apks-via-adb
1.1 python脚本处理xapk
先用python脚本处理xapk,将其解压为文件夹,包含主apk和副apk
import os
import zipfile
import shutil
# 原始文件名:例如PA01-0018-com.nra.flyermaker-90.xapk
# 希望从中解压并提取出主apk:com.nra.flyermaker.apk
# 并将com.nra.flyermaker.apk命名为PA01-0018-com.nra.flyermaker-90.apk
# 获取当前目录下所有.xapk文件
xapk_files = [file for file in os.listdir('.') if file.endswith('.xapk')]
# 循环处理每个文件
for file in xapk_files:
print(file)
# PA01-0018-com.nra.flyermaker-90.xapk
# 解压缩到当前目录下的与文件同名的文件夹中
with zipfile.ZipFile(file, 'r') as zip_ref:
folder_name = os.path.splitext(file)[0]
zip_ref.extractall(folder_name)
# 在解压缩后的文件夹中找到apk文件并进行重命名
folder_files = os.listdir(folder_name)
apk_files = [name for name in folder_files if name.endswith('.apk')]
for apk_file in apk_files:
# 找到解压后的主apk
if os.path.splitext(apk_file)[0] in os.path.splitext(file)[0]:
print(apk_file)
# com.nra.flyermaker.apk
apk_path = os.path.join(folder_name, apk_file)
print("old apk name : " + apk_path)
# old apk name : PA01-0018-com.nra.flyermaker-90/com.nra.flyermaker.apk
new_apk_path = os.path.join(folder_name, folder_name+'.apk')
print("new apk name : " + new_apk_path)
# new apk name : PA01-0018-com.nra.flyermaker-90/PA01-0018-com.nra.flyermaker-90.apk
os.rename(apk_path, new_apk_path)
# 将./PA01-0018-com.nra.flyermaker-90/PA01-0018-com.nra.flyermaker-90.apk 移动至 ./PA01-0018-com.nra.flyermaker-90.apk
shutil.move(new_apk_path, "./"+folder_name+'.apk')
# 删除./PA01-0018-com.nra.flyermaker-90/文件夹
shutil.rmtree(folder_name)
以FamilyLink为例,文件夹如下
1.2 adb install-multipl
处理后将其全部adb安装到设备,即adb install-multipl
APK_PATH为本地实际文件夹
bat脚本如下
@echo off
setlocal enabledelayedexpansion
set APK_PATH=E:\2025p\Other\Third\xxx
set FILES=
for %%f in (%APK_PATH%\*.apk) do (
set FILES=!FILES! "%%f"
)
adb install-multiple !FILES!
方案2
pm install-create
好像本质上和上述内容是一样的,都是安装所有apk到设备,但因为我解压xapk后的apk太多了,暂时没有尝试,后续再更新。
参考
https://alysoninno.cn/android/install-apk-splits-package/
整体参考
https://blog.csdn.net/Xiers0907/article/details/141476210