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

安卓工程 打包 32位和64位说明

        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实现

代码

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

效果

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值