Gradle命令编译Android Studio工程项目并签名
文章目录
- gradlew命令
- gradlew编译debug apk
- gradlew编译release apk
- apksigner签名apk
- gradlew注意事项
gradlew命令
gradlew 是一个脚本文件,它允许你在没有全局安装 Gradle 的情况下运行 Gradle 构建。这个脚本在多平台上可用,对于 Windows 系统来说是 gradlew.bat 文件,而对于 Unix、Linux 和 macOS 系统来说则是 gradlew 脚本文件。
- ./gradlew build 这个命令会执行项目的构建过程,包括编译代码、运行测试等
- ./gradlew tasks 显示项目中所有可用的 Gradle 任务。
- ./gradlew clean 清除之前的构建输出,如编译后的类文件、JAR 文件等。
- ./gradlew assembleDebug 可以指定要运行的具体任务,例如 assembleDebug 用于构建调试版本的应用。
- ./gradlew build --offline 在没有网络连接的情况下使用缓存中的依赖项来构建项目。
命令行下进入Android Studio工程目录,所有命令都在这里执行
理论上直接输入./gradlew build就可以进行项目的构建过程,包括编译代码、运行测试等。
但是因为它包含的比较多,可能Android Stduio中能编译过的项目用指令后就出错了
> Task :app:lintDebug FAILED
Lint found 61 errors, 1313 warnings. First failure:/Users/temp/Documents/project/test/app/src/main/res/layout/activity_call_test.xml: Error: The lint detectorandroidx.appcompat.view.OnClickXmlDetectorThe full lint text report is located at:/Users/temp/Documents/project/test/app/build/intermediates/lint_intermediate_text_report/debug/lint-results-debug.txtFAILURE: Build failed with an exception.* What went wrong:
Execution failed for task ':app:lintDebug'.
> Lint found errors in the project; aborting build.Fix the issues identified by lint, or create a baseline to see only new errors:
android {
lint {
baseline = file(“lint-baseline.xml”)
}
}
gradlew编译debug apk
./gradlew :app:assembleDebug
生成如下apk文件:

gradlew编译release apk
./gradlew :app:assembleRelease

apksigner签名apk
查看Android sdk目录下的build-tools

这里有多个版本,选一个就行,签名工具就是里面的apksigner
/Users/temp/Library/Android/sdk//build-tools/30.0.2/apksigner
写入脚本sign_apk.sh
#!/bin/bashANDROID_SDK=/Users/temp/Library/Android/sdk
echo $#function usage {echo "$0 keystore alis pass apk"
}if [ $# -ne 4 ]; thenusageexit
fikey=$1
alis=$2
pass=$3
apk=$4echo "apksigner.jar sign --ks $key --ks-key-alias $alis --ks-pass pass:$pass --key-pass pass:$pass --out sign.apk $apk"
java -jar /Users/temp/Library/Android/sdk//build-tools/30.0.2/build-tools/30.0.2/apksigner sign --ks $key --ks-key-alias $alis --ks-pass pass:$pass --key-pass pass:$pass --out sign.apk $apk
假设sign_apk.sh放在 ~/Downloads目录下
签名文件是debug.keystore
别名是alias_name
密码是mypass
要签名的apk是app/build/intermediates/apk/debug/app-debug.apk
则对其签名命令如下:
~/Downloads/sign_apk.sh ./debug.keystore alias_name mypass .//app/build/intermediates/apk/debug/app-debug.apk
gradlew注意事项
- 在首次运行 gradlew 时,它会自动下载指定版本的 Gradle 并将其存储在本地缓存中,因此可能需要一些时间。
- 如果你的项目依赖于互联网上的资源(如远程仓库中的库),确保在运行 gradlew 命令前有稳定的网络连接。
作者:帅得不敢出门
相关文章:
Gradle命令编译Android Studio工程项目并签名
文章目录 gradlew命令gradlew编译debug apkgradlew编译release apkapksigner签名apkgradlew注意事项 gradlew命令 gradlew 是一个脚本文件,它允许你在没有全局安装 Gradle 的情况下运行 Gradle 构建。这个脚本在多平台上可用,对于 Windows 系统来说是 g…...
lua入门教程:垃圾回收
Lua的垃圾回收机制是一种自动内存管理方式,用于回收不再被程序访问的对象,从而避免内存泄漏。以下是一个关于Lua垃圾回收机制的详细教程: 一、Lua垃圾回收机制概述 Lua使用自动内存管理,这意味着程序员不需要手动释放内存。Lua的…...
基于前后端分离架构,SaaS云平台与私有云部署的智慧校园源码,java电子班牌源码
基于前后端分离架构,SaaS云平台与私有云部署的智慧校园源码,java电子班牌源码,自主研发,自主版权,上百个学校应用案例,支持二次开发。 在信息技术飞速发展的今天,教育领域也迎来了一场革命性的变…...
知识总结五
一、C深浅拷贝 浅拷贝:只复制对象的成员变量的值,如果成员变量包含指针,则只复制指针值,不复制指针所指向的数据。深拷贝:复制对象的成员变量的值,并且如果成员变量包含指针,则还复制指针所指向…...
一、初识C语言(1)
1.C语言识别的是二进制语言 C语言是一门计算机语言,计算机是硬件,硬件分通电(1)和 未通电(0)两种情况,所以C语言识别的都是0 / 1信号,也就是二进制语言。 2.C语言文件类型以及基本框…...
petty 状态管理库文档
自研 Petty 状态管理库产生背景 petty 是一款适用于 vue2.5以下版本(目前已兼容vue2.5x 以上版本)的状态管理库,能够在 vue 2这种配置项的代码中,去实现类似于 vue3 里的 pinia、React 里的hook的调用形式,用函数式的…...
SpringMVC学习记录(三)之响应数据
SpringMVC学习记录(三)之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…...
ENSP GVRP动态学习VLAN
手工配置的VLAN称为静态VLAN,通过GVRP协议创建的VLAN称为动态VLAN。 GVRP有三种注册模式,不同的模式对静态VLAN和动态VLAN的处理方式也不同。 GVRP的三种注册模式分别定义如下: Normal模式:允许动态VLAN在端口上进行注册…...
怎么给llama3.2-vision:90b模型进行量化剪枝蒸馏
对 LLaMA 3.2 Vision: 90B 模型进行量化、剪枝和蒸馏,涉及到模型的压缩和优化技术,以减少其计算量和内存占用。以下是实现这些步骤的一般流程: 1. 量化 (Quantization) 量化的目的是减少模型的精度(如从FP32到INT8)&…...
flutter 专题四 Flutter渲染流程
一、 Widget - Element - RenderObject关系 二、 Widget 、Element 、RenderObject 分别表示什么 2.1 Widget Widget描述和配置子树的样子 Widget就是一个个描述文件,这些描述文件在我们进行状态改变时会不断的build。但是对于渲染对象来说,只会使用最…...
刘艳兵-DBA028-您可以在 ORCL1 和 ORCL2 数据库都运行其实例的主机上安装“独立服务器的 Oracle 网格基础结构“。哪两个陈述是正确的?
您可以在 ORCL1 和 ORCL2 数据库都运行其实例的主机上安装"独立服务器的 Oracle 网格基础结构"。哪两个陈述是正确的?(选择两个) A 在完成“用于独立服务器的Oracle Grid Infrastructure”安装后,必须使用crsctl sta…...
前端三件套-css
一、元素选择器 元素选择器:利用标签名称。p,h1-h6...... 行内样式(内联样式):例如<p style"color:red;font-size:50px"> id选择器:针对某一个特定的标签来使用。以#定义。 class(类&a…...
实验(未完成)
一、拓扑图 二、需求及分析 1、需求 按照图示的VLAN及IP地址需求,完成相关配置。 要求SW1为VLAN 2/3的主根及主网关,SW2为VLAN 20/30的主根及主网关。 SW1和SW2互为备份。 可以使用super vlan。 上层通过静态路由协议完成数据通信过程。 AR1为企…...
Python基础学习_01
目录 1、注释 2、数字和数学计算 3、变量 4、字符串 5、打印 6、本节总结 1、注释 • 什么是注释? 1)注释就是用自然语言向代码阅读者说明代码的功能和意义 • 注释 1)单行注释使用 # 为开头;并且不能换行…...
鸿萌数据迁移服务: 企业服务器整机在线热迁移, 实现不停机业务转移
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据存储、数据恢复、数据备份、数据迁移等解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 鸿萌数据迁移业务为众多企业顺利高效…...
【C】无类型指针及函数指针
一、无类型指针 (1)无类指针只包含内存地址,不知道内存地址从存放数据是什么类型: void *ptrNULL; (2)可以其他类型赋给无类型指针,但是无类型指针赋给有类型指针会警号; …...
VR的左右眼渲染方法
VR的左右眼视频渲染shader unity_StereoEyeIndex 结点可以判断当前渲染的时候左眼还是右眼,所以可以通过着色器来更根据当前眼睛使用不同的渲染方式达到左右眼渲染不同。 Shader "Unlit/VRVideoPlay" {Properties{_MainTex ("Texture", 2D) …...
爬虫-------字体反爬
目录 一、了解什么是字体加密 二. 定位字体位置 三. python处理字体 1. 工具库 2. 字体读取 3. 处理字体 案例1:起点 案例2:字符偏移: 5请求数据 - 发现偏移量 5.4 多套字体替换 套用模板 版本1 版本2 四.项目实战 1. 采集目…...
vue2组件封装和UI组件的二次封装,方法,属性,ref的传递
封装组件使用v-model 使用方法props接受value值,当值发生变化的时候再通过this.$emit("input", newValue),则实现了简单组件的v-model封装,如果不使用第三方UI可以接受到的值使用watch或者计算属性保存,然后再通过事件派发自己保存…...
喜报!景联文科技成功通过DCMM数据管理能力成熟度二级认证
10月30日,中国电子信息行业联合会公示了新一批DCMM贯标企业,景联文科技成功通过DCMM数据管理能力成熟度二级认证(乙方认证)。 DCMM是《数据管理能力成熟度评估模型》的简称,是我国在数据管理领域首个正式发布的国家标准…...
【架构心法】撕碎“实验室完美”的傲慢!直视滚刀与高压现场的物理混沌,论工业级控制系统的“防御性悲观主义”
摘要:在纯净的实验室里,“1”永远是“1”,“0”永远是“0”。但在重型机械的施工现场,物理法则充满了不可预测的恶意。无数工程师带着“代码没 Bug 就不会死机”的天真走向现场,最终却在震动、高温与电磁噪声的围剿下全…...
Intv_AI_MK11 Android应用集成指南:在移动端调用AI模型服务
Intv_AI_MK11 Android应用集成指南:在移动端调用AI模型服务 1. 移动端AI集成的价值与挑战 想象一下,你的Android应用突然拥有了理解用户意图、自动生成图片描述甚至进行自然对话的能力。这正是Intv_AI_MK11这类云端AI模型能为移动应用带来的变革。但在…...
OpenClaw定时任务:千问3.5-9B实现每日自动化流程
OpenClaw定时任务:千问3.5-9B实现每日自动化流程 1. 为什么需要定时任务自动化 去年冬天的一个深夜,我正熬夜准备第二天的重要汇报材料,突然发现需要从三个不同平台导出数据并整理成统一格式。手动操作到凌晨两点时,我意识到这种…...
DevExpress 2020.1中文汉化保姆级教程:从注册到配置全流程详解
DevExpress 2020.1中文汉化全流程实战指南:从零开始打造本地化开发环境 在软件开发领域,DevExpress作为一套功能强大的.NET控件库,因其丰富的UI组件和高效的数据可视化能力而广受开发者青睐。然而对于非英语母语的开发者而言,面对…...
Unity性能优化实战:用Job System并行处理海量数据,告别主线程卡顿
Unity性能优化实战:用Job System并行处理海量数据,告别主线程卡顿 当你的游戏场景中出现成千上万的粒子在飞舞,或是数百个NPC同时进行复杂的AI决策时,是否经常遇到帧率骤降的困扰?作为Unity开发者,我们每天…...
Qwen3-14B中文古诗创作效果:格律合规、意象统一、风格仿写展示
Qwen3-14B中文古诗创作效果:格律合规、意象统一、风格仿写展示 1. 引言:当AI遇见古诗创作 古诗创作一直被视为人类独有的艺术表达形式,需要深厚的文化底蕴和语言功底。然而,随着大语言模型的发展,AI在古诗创作领域展…...
人脸识别快速上手:Retinaface+CurricularFace镜像教程,简单易学
人脸识别快速上手:RetinafaceCurricularFace镜像教程,简单易学 1. 理解人脸识别黄金组合 在开始动手之前,我们先花两分钟了解Retinaface和CurricularFace这对黄金搭档: Retinaface:就像一位专业的摄影师,…...
28 openclaw负载均衡实现:应对高并发场景的解决方案
背景/痛点在OpenClaw项目中,随着业务规模的扩大,单节点处理能力逐渐成为瓶颈。特别是在高并发场景下,如秒杀活动、实时数据推送等,如何合理分配负载、避免单点故障、提升整体吞吐量,成为架构设计的核心挑战。传统的负载…...
Beyond ChatGPT: Building Physical World AI with PaLM-E and VoxPoser (Hands-on Guide)
从语言模型到物理世界操作:PaLM-E与VoxPoser实战指南 当ChatGPT在对话中展现出惊人的语言理解能力时,一个更激动人心的问题浮现:如何让AI系统突破虚拟界限,在物理世界中执行复杂任务?这正是PaLM-E与VoxPoser这类多模态…...
嵌入式AI开发实战:从MCU到模型部署全流程
1. 嵌入式AI开发实战:从入门到项目落地作为一名在嵌入式领域摸爬滚打多年的工程师,我深知AI技术给这个传统行业带来的变革。记得2018年第一次接触基于MCU的简单图像识别时,那种"原来嵌入式设备也能做AI"的震撼感至今难忘。如今&…...
