安卓apk 脚本判断32位和64位兼容,还是纯64位

安卓工程 打包 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}')

效果

相关推荐
Mr Lee_35 分钟前
attribute android:enableOnBackInvokedCallback not found
android
Jomurphys37 分钟前
Compose - 使用 Reorderable
android
帅得不敢出门43 分钟前
Android Framework在mk中新增类似PRODUCT_MODEL的变量并传递给buildinfo.sh及prop属性中
android·linux·前端
似霰1 小时前
AIDL Hal 开发笔记7----AIDL HAL 的升级
android·framework·hal
黄大包1 小时前
android MQTT封装
android·mqtt·mt
2501_916007475 小时前
跨平台 App 安全,Flutter、RN、Unity、H5 混合应用加固
android·ios·小程序·https·uni-app·iphone·webview
hinewcc6 小时前
Linux电源管理 - wakelocks
android·linux
你怎么知道我是队长6 小时前
win11系统查看设备配置
android·java·javascript
DevangLic6 小时前
【确认是否安装了 C++ 工具】
android·java·c++
2501_916007476 小时前
不越狱如何查看iOS 应用的详细信息及其文件目录结构
android·macos·ios·小程序·uni-app·cocoa·iphone