android 实现本地一键打包,告别繁琐的studio操作

前言

在实际开发项目中,我们的工程目录往往是多个app在一个工程下的,每次打包都需要手动的用studio点击Build->Generate Signed Bundle or APK->APK 选择app,签名等,甚至有的app签名还不一样,还需要手动的来回切换,非常麻烦。所以,我就考虑采用多渠道打包+shell脚本的方式,来实现一行命令打包。

先来看看我的工程目录结构,有11个app,且签名还不一样。用android studio打包,操作非常繁琐。

然后最终实现的效果是:

在git bash 里面输入 sh package.sh 

或者是指定输出目录:

下面我们来看看实现过程:

1,配置groovy脚本

在app下的build.gradle 里面配置如下:

plugins {id 'com.android.application'
}android {namespace 'com.yuanzhen.packageapplication'compileSdk 33defaultConfig {applicationId "com.yuanzhen.packageapplication"minSdk 24targetSdk 33versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"flavorDimensions "pack"  //配置多渠道}productFlavors {test1 {applicationId "com.yuanzhen.packageapplication"dimension "pack"manifestPlaceholders = [appName: "packageapplication"]}}signingConfigs {release {storeFile file("keystore/release.jks")storePassword '123456'keyAlias 'code'keyPassword '123456'v1SigningEnabled truev2SigningEnabled true}debug {storeFile file("keystore/debug.jks")storePassword '123456'keyAlias 'code'keyPassword '123456'v1SigningEnabled truev2SigningEnabled true}}buildTypes {release {buildConfigField("boolean", "API_DEBUG", "false")minifyEnabled falsesigningConfig signingConfigs.releaseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}debug {buildConfigField("boolean", "API_DEBUG", "true")minifyEnabled falsesigningConfig signingConfigs.debugproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}applicationVariants.all {def buildType = it.buildType.nameif(buildType =="release"){if(project.hasProperty('OUT_PUT_PATH')){//自定义输出路径it.getPackageApplication().outputDirectory = new File("${OUT_PUT_PATH}")}else {//as工具默认的路径it.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath+ "/output_apk")}}}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}dependencies {implementation 'androidx.appcompat:appcompat:1.4.1'implementation 'com.google.android.material:material:1.5.0'implementation 'androidx.constraintlayout:constraintlayout:2.1.3'testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

其他app配置和上面相同,根据实际情况自己调整

从上面的配置情况,我们可以知道,使用命令

gradle assembletest1Release   -POUT_PUT_PATH=D:/out_apk 

可以将packageapplication这个应用打包出来

2,配置gradle环境变量

这个就不多说了,不会的可以百度

3,编写shell脚本

新建一个package.sh脚本放在项目根目录下

shell 脚本有不熟悉的可以参考Android需要掌握的shell脚本基础

package.sh如下:

echo 开始cleangradle cleanecho clean结束if [ ! -n "$1" ] ;then
echo 开始app1打包
gradle  assembletest1Release -POUT_PUT_PATH=D:/out_apk
echo app1打包完成echo 开始app2打包
gradle  assembletest2Release    -POUT_PUT_PATH=D:/out_apk
echo app2打包完成echo 开始app3打包
gradle  assembletest3Release        -POUT_PUT_PATH=D:/out_apk
echo app3打包完成echo 全部打包完成 请在D:/out_apk查看打包内容
else
echo 开始app1打包
gradle  assembletest1Release -POUT_PUT_PATH=$1
echo app1打包完成echo 开始app2打包
gradle  assembletest2Release    -POUT_PUT_PATH=$1
echo app2打包完成echo 开始app3打包
gradle  assembletest3Release        -POUT_PUT_PATH=$1
echo app3打包完成echo 全部打包完成 请在$1查看打包内容
fi

4,打包

因为Linux中sh是链接到bash上的,所以sh与bash在功能上是没有区别的,相当于bash解析器是sh的增强版本,所以Windows用户可以在 git bash中运行脚本,苹果用户可以直接在命令窗口运行脚本

单个程序的打包和上面的一键打包是一样的,这里就不再详说了。

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

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

相关文章

iTOP-RK3588开发板Android12 设置系统默认不休眠

修改文件&#xff1a; device/rockchip/rk3588/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults. xml 文件&#xff0c;如下图所示&#xff1a; - <integer name"def_screen_off_timeout">60000</integer> <integer name&q…

设计模式(一)

1、适配器模式 &#xff08;1&#xff09;概述 适配器中有一个适配器包装类Adapter&#xff0c;其包装的对象为适配者Adaptee&#xff0c;适配器作用就是将客户端请求转化为调用适配者中的接口&#xff1b;当调用适配器中的方法时&#xff0c;适配器内部会调用适配者类的方法…

【【萌新的STM32学习25--- USART寄存器的介绍】】

萌新的STM32学习25- USART寄存器的介绍 STM32–USART寄存器介绍&#xff08;F1&#xff09; 控制寄存器1 &#xff08;CR1&#xff09; 位13&#xff1a; 使能USART UE 0&#xff1a; USART分频器和输出被禁止 1&#xff1a; USART模块使能 位12 &#xff1a; 配置8个数据位…

分类算法系列③:模型选择与调优 (Facebook签到位置预测)

目录 模型选择与调优 1、介绍 模型选择&#xff08;Model Selection&#xff09;&#xff1a; 调优&#xff08;Hyperparameter Tuning&#xff09;&#xff1a; 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…

Maven报错 [ERROR] Malformed \uxxxx encoding.

IDEA刷新项目&#xff0c;报错[ERROR] Malformed \uxxxx encoding. 现象 1.控制台报错 [ERROR] Malformed \uxxxx encoding.2.项目代码大部分爆红 3.Pom文件不爆红 4.IDEA未能构建Dependencies 尝试清除IDEA缓存无效&#xff0c;重新克隆项目无效&#xff0c;更换低版本mav…

Vue2里监听localstorage里值的变化

有的时候,我们需要根据本地缓存在localstorage里值的变化做出相应的操作,这就需要我们监听localstorage: 首先,我们在src下的libs文件夹下新建一个stroage.js用于重写setItem事件,当使用setItem的时候,触发,window.dispatchEvent派发事件 const Stroage = {// 重写set…

考生作弊行为分析算法

考生作弊行为分析系统利用pythonyolo系列网络模型算法框架&#xff0c;考生作弊行为分析算法利用图像处理和智能算法对考生的行为进行分析和识别&#xff0c;经过算法服务器的复杂计算和逻辑判断&#xff0c;算法将根据考生行为的特征和规律&#xff0c;判定是否存在作弊行为。…

Git基础教程-常用命令整理:学会Git使用方法和错误解决

目录 一、了解Git的基本概念 二、Git的安装和配置 Git的安装 Git的配置 用户信息 文本编辑器 差异分析工具 查看配置信息 三、Git的基本操作 基本原理 基本操作命令 基本操作示例 场景一&#xff1a;创建新仓库 场景二&#xff1a;拉取并编辑远程仓库 四、常见问…

开源PHP 代挂机源码,可对接QQ、网易云、哔哩哔哩、QQ空间、等级加速等等

本程序运行环境PHP5.6 95dg/config.php修改系统数据库 进入数据库绑定 你搭建的域名即可 部署完成 进入数据库 找到data 输入绑定授权域名即可进行授权打开此网站 网站是无对接接口 需要您自行找对接接口即可 本源码有点乱 有实力的铁铁 可以修改一下哦&#xff01;

Springboot动态修改日志级别

在开发和运维过程中&#xff0c;我们经常需要调整日志级别来查看不同级别的日志信息。传统的做法是修改配置文件&#xff0c;然后重启应用程序。但是&#xff0c;在分布式系统中&#xff0c;重启应用程序可能比较麻烦&#xff0c;而且也影响了业务的正常运行。 Springboot提供…

Spring MVC介绍

MVC模式是什么 MVC 模式&#xff0c;全称为 Model-View-Controller&#xff08;模型-视图-控制器&#xff09;模式&#xff0c;它是一种软件架构模式&#xff0c;其目标是将软件的用户界面&#xff08;即前台页面&#xff09;和业务逻辑分离&#xff0c;使代码具有更高的可扩展…

造测试数据

对应sql&#xff1a; from openpyxl import Workbook from faker import Faker# 创建一个Workbook对象 workbook Workbook() # 获取默认的活动工作表 sheet workbook.active# 创建一个Faker对象 fake Faker()# 写入表头 header [Name, Address, Email] sheet.append(heade…

ChatGPT 与 Python进行动态可视化分析

Python数据分析目前最为热门的岗位操作。 想使用Python进行可视化分析,但是又不想写代码,测试,验证。可以交给ChatGPT,open AI 来进行操作。 这样的动态图显示,我们只需要给ChatGPT发送一个指令,人工智能就能很快的实现这一操作。 请使用Python与Echarts做一个动态可视…

【LeetCode】3. 无重复字符的最长子串

3. 无重复字符的最长子串&#xff08;中等&#xff09; 方法&#xff1a;滑动窗口 哈希表 思路 这道题主要用到思路是&#xff1a;滑动窗口 什么是滑动窗口&#xff1f; 其实就是一个队列,比如例题中的 abcabcbb&#xff0c;进入这个队列&#xff08;窗口&#xff09;为 ab…

Vue安装过程的困惑解答——nodejs和vue关系、vue的项目结构

文章目录 一、为什么在使用vue前要下载nodejs&#xff1f;二、为什么安装nodejs后就能使用NPM包管理工具&#xff1f;三、为什么是V8引擎并且使用C实现&#xff1f;四、为什么会安装淘宝镜像&#xff1f;五、什么是webpack模板&#xff0c;为什么需要他&#xff1f;六、vue项目…

GIT命令只会抄却不理解?看完原理才能事半功倍!

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 系列文章目录一、Git 的特征1. 文件系统2. 分布式 二、GIT的术语1. 区域术语2. 名词术语1. 提交对象2. 分支3. HEAD4. 标签&#xff0…

无涯教程-Android - Linear Layout函数

Android LinearLayout是一个视图组&#xff0c;该视图组将垂直或水平的所有子级对齐。 Linear Layout - 属性 以下是LinearLayout特有的重要属性- Sr.NoAttribute & 描述1 android:id 这是唯一标识布局的ID。 2 android:baselineAligned 此值必须是布尔值&#xff0c;为…

chatGPT训练过程

强化学习基础 强化学习是指智能体在不确定环境中最大化其获得的奖励从而达到自主决策的目的。其执行过程为&#xff1a;智能体依据策略决策从而执行动作&#xff0c;然后感知环境获取环境的状态&#xff0c;进而得到奖励(以便下次再到相同状态时能采取更优的动作)&#xff0c;…

Dockerfile COPY的奇怪行为:自动解包一级目录

记录一下今天遇到的坑&#xff1a;Dockerfile 这两天在部署项目的时候&#xff0c;新加进去了一个驱动&#xff0c;需要将2个文件夹以及1个文件COPY进镜像&#xff0c;大刀阔斧一个Dockerfile就写完了&#xff0c;结果COPY进去的文件有问题&#xff0c;Dockerfile的内容如下&am…

数据治理-元数据管理

概念 元数据是关于数据的数据&#xff0c;元数据对于数据管理和数据使用来说是必不可少的。所有大型组织都会产生和使用大量的数据&#xff0c;在整个组织中&#xff0c;不同的人拥有不同层面的数据知识&#xff0c;但没有人知道关于数据的一切。因此&#xff0c;必须将这些信息…