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

效果

相关推荐
SRC_BLUE_171 小时前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道4 小时前
Android打包流程图
android
镭封5 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰4876 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛6 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二6 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫6 小时前
Android开发中的隐藏控件技巧
android
Winston Wood8 小时前
Android中Activity启动的模式
android
众乐认证8 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto
三杯温开水8 小时前
新的服务器Centos7.6 安卓基础的环境配置(新服务器可直接粘贴使用配置)
android·运维·服务器