安卓工程 打包 32位和64位说明
python
ndk {
// abiFilters 'armeabi','arm64-v8a' 32位和64位
// abiFilters 'arm64-v8a' 纯64位
}
常用类型说明
-
armeabi-v7a 第7代及以上的ARM处理器(ARM32位),市面上大多数手机使用此CPU类型。
-
arm64-v8a 第8代、64位ARM处理器(ARM64位),最近两年新发的设备使用此CPU类型,可以兼容使用armeabi-v7a的so库。
-
x86 少部分平板使用x86,AS模拟器中选了intel x86时使用x86处理器,以及其它常用三方模拟器通常使用x86
如何判断apk的位数常规方法
把apk 文件转为zip,然后读取lib 文件加的子文件类型
举个例子
解压后的zip
纯64位的是
32位和64位兼容版
利用脚本python实现
代码
python
import zipfile
import shutil
import os
# APK文件路径
apk_file_path = '/Users/app-release.apk'
# 输出的ZIP文件路径
zip_file_path = '/Users/app-release.zip'
# 读取APK文件
with zipfile.ZipFile(apk_file_path, 'r') as apk_zip:
# 创建一个新的ZIP文件
with zipfile.ZipFile(zip_file_path, 'w') as zip_output:
# 遍历APK文件中的每个文件
for filename in apk_zip.namelist():
# 读取文件内容
with apk_zip.open(filename, 'r') as file:
# 将文件内容写入新的ZIP文件
zip_output.writestr(filename, file.read())
print('转换完成')
# 特定子目录的路径
target_dir = 'lib/'
# 使用zipfile模块打开ZIP文件
with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
# 列出ZIP文件中的所有文件和文件夹
zip_info_list = zip_ref.infolist()
# 存储亲儿子目录的名称
sub_dirs = []
# 遍历zip_info_list,查找目标目录的亲儿子目录
for zip_info in zip_info_list:
# 检查当前文件是否在目标目录中
if zip_info.filename.startswith(target_dir) and '/' in zip_info.filename[len(target_dir):]:
# 获取亲儿子目录的名称
sub_dir_name = zip_info.filename[len(target_dir):].split('/')[0]
sub_dirs.append(sub_dir_name)
# 转换为集合以去除重复的子目录名称
unique_sub_dirs = set(sub_dirs)
# 打印亲儿子目录的信息
print(f"亲儿子目录数量: {len(unique_sub_dirs)}, 亲儿子目录名称: {', '.join(unique_sub_dirs)}")
# 原始APK文件的路径
source_apk_path = apk_file_path
# 目标路径和文件名
target_directory = '/Users/release/'
target_file_name = '64位.apk'
if len(unique_sub_dirs)==2:
target_file_name = '32位_64位.apk'
target_apk_path = os.path.join(target_directory, target_file_name)
# 复制文件
shutil.copy2(source_apk_path, target_apk_path)
# 重命名文件(如果需要的话,上面的shutil.copy2已经复制并保留了元数据)
# os.rename(source_apk_path, target_apk_path)
print(f'文件已复制并重命名为: {target_apk_path}')