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

效果

相关推荐
网络研究院16 分钟前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
凉亭下23 分钟前
android navigation 用法详细使用
android
小比卡丘3 小时前
C语言进阶版第17课—自定义类型:联合和枚举
android·java·c语言
前行的小黑炭4 小时前
一篇搞定Android 实现扫码支付:如何对接海外的第三方支付;项目中的真实经验分享;如何高效对接,高效开发
android
落落落sss5 小时前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
代码敲上天.6 小时前
数据库语句优化
android·数据库·adb
GEEKVIP8 小时前
手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
android·macos·ios·智能手机·电脑·手机·iphone
model200510 小时前
android + tflite 分类APP开发-2
android·分类·tflite
彭于晏68910 小时前
Android广播
android·java·开发语言
与衫11 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql