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

news2024/10/8 12:28:13

安卓apk 脚本判断32位和64位兼容,还是纯64位_apk打包兼容32位和64位的-CSDN博客

转java代码:

package cn.silence;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ApkProcessor {

    public static void main(String[] args) {
        String apkFilePath = "C:\\Users\\12095\\Desktop\\apk\\20241008082912.apk"; // APK文件路径
        String zipFilePath = "C:\\Users\\12095\\Desktop\\apk\\20241008082912.zip"; // 输出的ZIP文件路径
        String targetDir = "lib/"; // 特定子目录的路径

        try {
            // 步骤1:将APK转换为ZIP
            convertApkToZip(apkFilePath, zipFilePath);
            System.out.println("转换完成");

            // 步骤2:在ZIP中查找子目录
            Set<String> uniqueSubDirs = findSubDirsInZip(zipFilePath, targetDir);

            // 步骤3:根据子目录数量复制并重命名APK文件
            copyAndRenameApk(apkFilePath, uniqueSubDirs.size());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void convertApkToZip(String apkFilePath, String zipFilePath) throws IOException {
        try (ZipInputStream apkZip = new ZipInputStream(new FileInputStream(apkFilePath));
             ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
            ZipEntry entry;
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((entry = apkZip.getNextEntry()) != null) {
                zipOutput.putNextEntry(new ZipEntry(entry.getName()));
                while ((bytesRead = apkZip.read(buffer)) != -1) {
                    zipOutput.write(buffer, 0, bytesRead);
                }
                zipOutput.closeEntry();
            }
        }
    }

    private static Set<String> findSubDirsInZip(String zipFilePath, String targetDir) throws IOException {
        Set<String> subDirs = new HashSet<>();
        try (ZipInputStream zipInput = new ZipInputStream(new FileInputStream(zipFilePath))) {
            ZipEntry entry;
            while ((entry = zipInput.getNextEntry()) != null) {
                String entryName = entry.getName();
                if (entryName.startsWith(targetDir) && entryName.substring(targetDir.length()).contains("/")) {
                    String subDirName = entryName.substring(targetDir.length()).split("/")[0];
                    subDirs.add(subDirName);
                }
            }
        }
        System.out.println("亲儿子目录数量: " + subDirs.size() + ", 亲儿子目录名称: " + String.join(", ", subDirs));
        return subDirs;
    }

    private static void copyAndRenameApk(String sourceApkPath, int subDirCount) throws IOException {
        String targetDirectory = "C:\\Users\\12095\\Desktop\\apk\\"; // 目标目录
        String targetFileName = (subDirCount == 2) ? "32位_64位.apk" : "64位.apk"; // 根据子目录数量设置文件名
        Path targetApkPath = Paths.get(targetDirectory, targetFileName);

        Files.copy(Paths.get(sourceApkPath), targetApkPath, StandardCopyOption.REPLACE_EXISTING);
        System.out.println("文件已复制并重命名为: " + targetApkPath);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始构建:Python自定义脚本自动化你的日常任务

从零开始构建&#xff1a;Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言&#xff0c;被广泛应用于各种自动化任务中。通过编写 Python 脚本&#xff0c;你可以轻松地将日常重复性工作自动化&#xff0c;例如文件操作、数据处理、网络爬虫、系统…

Mac 电脑设置键盘 Command键

Mac 电脑设置键盘 Command键 如果 mac 电脑连接的第三方键盘&#xff0c;有些键盘没有 command 按键&#xff0c;导致有些功能没有办法使用&#xff0c;比如你想复制粘贴发现也不可以。这个时候你需要设置一个按键为 command 按键。 比如上图中是把 Alt 键设置为 Command 键。 …

DHCP安装

步骤 1&#xff1a;安装DHCP服务器 在系统上安装DHCP服务。以下是安装命令&#xff1a; # 安装DHCP软件包 yum install dhcp步骤 2&#xff1a;配置DHCP服务器 安装完成后&#xff0c;需要配置DHCP服务器来绑定MAC地址和IP地址。 # 备份原始的DHCP配置文件 cp /etc/dhcp/dh…

华为 HCIP-Datacom H12-821 题库 (33)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1.VLAN Pool 只要通过一个 SSID 就能够同时支持多个业务 VLAN&#xff0c;从而缩小广播域&#…

[含文档+PPT+源码等]精品大数据项目-基于python爬虫实现的大数据岗位的挖掘与分析

大数据项目——基于Python爬虫实现的大数据岗位的挖掘与分析&#xff0c;其背景主要源于以下几个方面&#xff1a; 一、大数据时代的来临 随着互联网、物联网、云计算等技术的快速发展&#xff0c;数据呈现出爆炸式增长。根据国际数据公司&#xff08;IDC&#xff09;的预测&…

送给fans的一封感谢信

引言 首先&#xff0c;十分感谢&#xff0c;这几个月里粉丝的点赞和关注。我同时手里也有很多资料。也像跟大家分享&#xff0c;促进大家一起进步。可以加我企鹅2101750384。或者绿泡泡qier3451841065 &#xff08;加好友验证的时候&#xff0c;记得填“胡萝卜不甜”&#xff0…

241006-Gradio中Chatbot通过CSS自适应调整高度

A. 最终效果 B. 参考代码 import gradio as grCSS """ .contain { display: flex; flex-direction: column; } .gradio-container { height: 100vh !important; } #component-0 { height: 100%; } #chatbot { flex-grow: 1; overflow: auto;} #tab_item_4 { …

LeetCode-871 最低加油次数

重启力扣每日一题系列&#xff01; 因为过去两个月里掉粉掉的好严重&#xff0c;我想大抵是因为更新的频率不如上半年了&#xff0c;如果我重启了每日一题系列那岂不是至少是每日一更☝&#x1f913;&#xff1f; 也不是每天都更&#xff0c;我有两不更&#xff0c;特难的就不…

LIN总线学习大全(基于CANoe和CAPL)

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

Linux操作系统——概念扫盲I

目录 虚拟机概念刨析 在那之前&#xff0c;询问什么是虚拟化&#xff1f; 现在来看看什么是虚拟机 虚拟机有啥好的 小差&#xff1a;那JVM也叫Java Virtual Machine&#xff0c;有啥区别呢&#xff1f; Reference 虚拟机概念刨析 我们下面来简单聊聊虚拟机这个概念。对于…

一款开源Ai语音合成TTS工具:Fish Speech

在人工智能和语音技术日新月异的今天&#xff0c;Fish Speech项目以其卓越的性能和广泛的应用前景&#xff0c;成为了开源语音合成领域的一颗璀璨新星。 该项目由Fish Audio团队倾力打造&#xff0c;旨在为研究者、开发者和普通用户提供一个高质量、易用且功能强大的语音合成解…

Docker13-图形工具Portainer

零、文章目录 Docker13-图形工具Portainer 1、图形化管理工具 Docker 的图形化管理工具可以帮助用户更直观地管理 Docker 容器、镜像、网络和数据卷等。 选择哪个工具取决于您的具体需求&#xff0c;比如是否需要支持远程管理、是否需要集成 Kubernetes、是否偏好桌面应用或…

JVS·智能BI数据可视化图表:普通列表与分组列表配置全解析

使用场景 在可视化配置中&#xff0c;很多场景中需要图形和详细信息的融合展示&#xff0c;那么在图表中可以新增普通列表与分组列表的配置。如下图所示&#xff1a; 配置说明 1、新增组件&#xff1a;配置入口如下图所示&#xff0c;新增组件时&#xff0c;选择普通列表与分…

电脑屏幕录屏怎么弄?4个方法教会你录制

电脑屏幕录屏怎么弄&#xff1f;电脑屏幕录屏是一项非常实用的技能&#xff0c;它在学习、工作和娱乐中扮演着不可或缺的角色。通过录屏&#xff0c;我们可以轻松记录并分享操作步骤、会议内容、游戏过程等&#xff0c;极大地丰富了我们的表达和沟通方式。同时&#xff0c;录屏…

mysql 慢查询日志、设置单条数据最大 packet 插入大小指令

检查是否开启慢查询日志 show variables like "%slow%";slow_query_log为 ON 表示已经开启慢查询日志记录。 slow_query_log_file&#xff1a;慢查询日志文件存放地址 设置慢查询 sql 记录阈值 大于 1s 的 sql 都会被记录到日志文件里面。系统默认 10s。mysql 重…

3、Redis Stack扩展功能

文章目录 一、了解Redis产品二、申请RedisCloud实例三、Redis Stack体验1、RedisStack有哪些扩展&#xff1f;2、Redis JSON1、Redis JSON是什么2、Redis JSON有什么用3、Redis JSON的优势 3、Search And Query1、传统Scan搜索2、Search And Query搜索 4、Bloom Filter1、布隆过…

【Python_PySide6学习笔记(三十八)】基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton

基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton 基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton前言正文1、Qt样式表1.1 Qt样式表1.2 样式属性 2、设置Qt样式表3、tQCircularButton类4、使用示例 基于QPushButton实现自定义的圆形按键指示灯类tQ…

系统规划与管理——1信息系统综合知识(3)

文章目录 1.3 信息系统1.3.1 信息系统定义1.3.2 信息系统的生命周期1.3.3 信息系统常用的开发方法 1.3 信息系统 1.3.1 信息系统定义 信息系统是一种以处理信息为目的的专门的系统类型。信息系统可以是手工的&#xff0c;也可以是计算机化的。计算机化的信息系统的组成部件包…

【JVM调优】JVM高频参数和最优实践

JVM高频参数 一、常用参数配置1. 堆内存设置方式1&#xff08;Java8及之前&#xff09;方式2&#xff08;Java9及之后&#xff09; 2. 新生代和老年代设置3. 垃圾收集器选择4. 调试和日志5. Metaspace设置6. 其他重要参数 二、参数设置最佳实践三、GC日志参数设置日志解析Minor…

构建宠物咖啡馆:SpringBoot框架的实现策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于Spring Boot的宠物咖啡馆平台的设计与…