安卓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}')

效果

相关推荐
AI_Gump8 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
疯华整猫13 小时前
否决 Flutter 提案那天,我发现自己也说不清 Framework 管什么
android
传奇开心果编程1 天前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
慕容雪_1 天前
Capacitor8-Android打包完整手册
android·打包·capacitor
阿杰m1 天前
Android源码第十三章:Bluetooth——沿一次发现走到控制器
android
booboosui1 天前
派活给另一个 AI:前后两次文件夹快照,就是交付清单
android
普通人62 天前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
好的佩奇2 天前
Dart 之集合元素
android·flutter·dart
Easyhood2 天前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
FlightYe2 天前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash