用Python脚本执行安卓打包任务
这个样例是基于windows系统写的python打包安卓的脚本:
一、配置AndroidStudio下的打包任务
1.在Android项目根目录下的build.gradle文件配置生成Release包的任务:
task cleanAll(type: Delete) {delete rootProject.buildDirrootProject.subprojects.each { subproject ->delete subproject.buildDir} }task qudao1Release dependsOn(cleanAll,':app:assemble千年血战篇_officialOfficialRelease', )
1.1 cleanAll : 任务是打包前清空项目缓存的,直接copy就行
1.2 qudao1Release : 任务就是我们打包任务的名称,
1.3 :app:assemble千年血战篇_officialOfficialRelease 任务是我们gradlew执行的生成apk的指令,
这个指令可以在AndroidStudio里右侧窗口gradle树里找到,如下图:
1.4 如下图 :
assemble千年血战篇_officialOfficialRelease 就是我们要执行的release打包任务
1.5 把这个任务copy出来配置在上面1.3讲的位置就好
1.6 在androidStudio下的终端 执行我们的任务:qudao1Release, 执行命令时需要加前缀:.\gradlew。任务回车即可执行打包
二:利用python启动打包任务,我这里用的Python2.7.2版本
1.首先写一个可执行的doc文件,新建一个txt文本,内如如下:
@echo off @REM 安卓项目路径 cd /d "D:\app\as_project\new_version\GameDemo" .\gradlew qudao1Release pause
1.2 D:\app\as_project\new_version\GameDemo: 为我们安卓项目的路径
1.3 .\gradlew qudao1Release :就是我们上面执行的任务指令
1.4 保存后修改文件名尾缀:.bat ,然后保存,如下图所示:
1.5 其实这里我们直接双击这个buildApk文件,就可以执行安卓自动打包了,也不用打开AndroidStudio。但是如果你需要自己写一个完成流程的自动打包脚本,还需要监听这个打包任务是否执行完成,就需要用到python了。
2. 利用python启动这个doc文件:
"""编译生成apk参数::bat: 可执行文件 """ def build_apk(bat):try:# 获取当前脚本的目录script_dir = os.path.dirname(os.path.abspath(__file__))# 构建.bat文件的完整路径bat_file_path = os.path.join(script_dir, bat)result = subprocess.call([bat_file_path])# 判断任务是否执行成功if result == 0:print("build apk 任务执行成功")else:print("任务执行失败,退出状态码为:", result)except subprocess.CalledProcessError as e:print("The command failed with return code "+e.returncode)print("Standard Error:"+e.stderr)
2.1 这个build_apk方法里的bat参数就是我们上面建的bat文件的文件名,例如我的是buildApk.bat。
2.2 在python文件里的main方法里调用 : build_apk('buildApk.bat'),切记这里要使用单引号。
2.3 把buildApk.bat文件放在python文件的同级目录下,这样你的python脚本才能调用到他。
2.4 通过终端进入到你的python文件下,输入:python xx.py。你的脚本就可以执行了,如下图
2.5 其实到2.4就完成了这个打包任务,这在构建自动打包平台时最关键的流程就通了,启动任务时只需要启动你的脚本就可以了
2.6 如果你的项目放在git上,希望每次打包时保证项目是最新的代码,那么在打包之前,也可以Python执行git pull 方法,再进行build_apk任务
def git_pull(repo_directory):"""在指定的仓库目录中执行 git pull 命令。:param repo_directory: 包含Git仓库的本地目录路径"""try:# 更改当前工作目录到指定的Git仓库目录os.chdir(repo_directory)# 执行 git pull 命令result = subprocess.call(['git', 'pull'])# 判断任务是否执行成功if result == 0:print("build apk 任务执行成功")else:print("任务执行失败,退出状态码为:", result)except subprocess.CalledProcessError as e:# 如果 git pull 命令失败,则捕获异常并打印错误信息print("Error executing git pull: {e}")except Exception as e:# 捕获其他可能的异常并打印错误消息print("An unexpected error occurred: {e}")
源码链接:
Python脚本: 用pyhton写的打包安卓APK的脚本
相关文章:

用Python脚本执行安卓打包任务
这个样例是基于windows系统写的python打包安卓的脚本: 一、配置AndroidStudio下的打包任务 1.在Android项目根目录下的build.gradle文件配置生成Release包的任务: task cleanAll(type: Delete) {delete rootProject.buildDirrootProject.subprojects.e…...
制作安装k8s需要的离线yum源
制作安装k8s需要的离线yum源 添加docker在线源制作安装k8s命令行工具需要的离线yum源传到内网k8s节点,通过如下命令导出镜像: 要全内网环境安装docker、k8s和相关依赖,需要在内部提供安装k8s、docker需要的yum源 添加docker在线源 yum-confi…...

Node学习记录-events
来自:https://juejin.cn/post/7285915718666354723 和 https://nodejs.cn/api/events.html Nodejs核心API都是采用异步事件驱动架构,在该架构中,某些类型的对象(触发器)触发命名事件,导致调用Function对象(…...

Java Collection/Executor DelayedWorkQueue 总结
前言 相关系列 《Java & Collection & 目录》《Java & Executor & 目录》《Java & Collection/Executor & DelayedWorkQueue & 源码》《Java & Collection/Executor & DelayedWorkQueue & 总结》《Java & Collection/Executor &a…...

《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字
《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字 《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字基本概念服务端客户端 基于 Linux 平台的 "Hello world!" 服务端和客户端基于 Linux 的文件操作打开文件关闭文件…...

服务端监控工具:Nmon使用方法
在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的一环。这篇博客,介绍下服务端监控工具:nmon的使用方法。 一、认识nmon 1、简介 nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行…...

Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)
前言:多线程编程已经广泛开始使用,其可以充分利用系统资源来提升效率,但是线程安全问题也随之出现,它直接影响了程序的正确性和稳定性,需要对其进行深入的理解与解决。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解…...
基础设施即代码(IaC)在Python自动化运维中的应用探讨
基础设施即代码(IaC)在Python自动化运维中的应用探讨 目录 🌐 IaC概念与工具介绍🐍 使用Python实现基础设施自动化📦 版本控制与基础设施管理的最佳实践🔄 部署环境的一致性与可复现性 1. 🌐 …...
浅谈路由器
路由器是一种网络设备,它在网络中起着至关重要的作用,主要功能包括: 1、数据转发:路由器的主要任务是将数据包从一个网络转发到另一个网络。它根据数据包的目的地址来决定将数据包发送到哪个网络。 2、路径选择:路由器…...

openGauss数据库-头歌实验1-1 初识openGauss
一、历史与特性 任务描述 本关任务:了解openGauss的发展历史以及相关特性。 相关知识 为了完成本关任务,你需要掌握:1.openGauss的发展历程,2.openGauss的功能特性。 发展历程 2019年9月19日在华为全联接大会上,…...

QT找不到ffmpeg链接库解决方法
error: undefined reference to avformat_network_init() 一个神奇的报错,查了很久,检查步骤: 1、检查了 pro工程文件 2、链接库的真实性和正确性 在main.cpp中调用没有报错,在其它cpp文件中调用就报错。 破案了,…...

消息队列-Rabbitmq(消息发送,消息接收)
将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不…...

2、顶点着色器之视图矩阵
1、作用:将物体从世界坐标系转换到相机坐标系,相当于从世界坐标系转换到相机的局部(本地)坐标系。 2、基于LookAt函数的视图矩阵: 相机位置eye:(ex,ey,ez),世界坐标系下的位置 目标位置center:(cx,cy,cz…...
crontab实现2026年开始每个月1号执行一次
要在 crontab 中设置一个任务,使其从 2026 年开始每个月的 1 号执行一次,可以使用以下格式: 0 0 1 * * <你的命令>这条规则的解释如下: 0 0:表示在每个月的 1 号的零点(00:00)执行。1&a…...

计算机网络803-(5)运输层
目录 一.运输层的两个主要协议:TCP 与 UDP 1.TCP/IP 的运输层有两个不同的协议: 2.端口号(protocol port number) (1)软件端口与硬件端口 (2)TCP 的端口 (3)三类端口 二.用户…...

八 MyBatis中接口代理机制及使用
八、MyBatis中接口代理机制及使用 实际上,第七章所讲内容mybatis内部已经实现了。直接调用以下代码即可获取dao接口的代理类: AccountDao accountDao (AccountDao)sqlSession.getMapper(AccountDao.class);使用以上代码的前提是:AccountMa…...

【解决】Ubuntu18.04 卸载python之后桌面异常且终端无法打开,重启后进入tty1,没有图形化界面
我因为python版本太过于混乱 (都是为了学习os) ,3.6—3.9版本我都安装了,指向关系也很混乱,本着“重装是最不会乱”的原则,我把全部版本都卸载了。然后装了3.9 发现终端打不开了,火狐浏览器的图…...

OpenEmbedded、yocto和poky是什么关系?
Yocto项目是基于OpenEmbedded构建系统发展而来的。Yocto采用了OpenEmbedded的许多核心概念和工具,比如BitBake构建工具。BitBake在这两个系统中都是用于解析和处理recipes文件,这些recipes文件包含了软件包构建的指令、依赖关系、安装步骤等内容。 它们…...

记录页面——一个蛮好看的登录页(uni-app)
效果图 <template><view class"container"><view class"flex-col login-box"><view class"flex-col" style"width: 80%"><view class"flex-col"><text class"welcome-text-font&qu…...

Android文件选择器[超级轻量级FilePicker测试没有问题][挣扎解决自带文件管理器获取不到绝对地址问题而是返回msf%3A1000038197]
超级轻量级FilePicker测试没有问题 本文摘录于:https://blog.csdn.net/gitblog_00365/article/details/141449437只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 今天真的是发了疯的找文件管理器,因为调用系统自带的文件管理…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...