Gradle命令编译Android Studio工程项目并签名

news/2024/11/8 16:07:26 标签: android studio, android, ide, gradlew

文章目录

gradlew_1">gradlew命令

gradlew 是一个脚本文件,它允许你在没有全局安装 Gradle 的情况下运行 Gradle 构建。这个脚本在多平台上可用,对于 Windows 系统来说是 gradlew.bat 文件,而对于 Unix、Linux 和 macOS 系统来说则是 gradlew 脚本文件。

  1. ./gradlew build 这个命令会执行项目的构建过程,包括编译代码、运行测试等
  2. ./gradlew tasks 显示项目中所有可用的 Gradle 任务。
  3. ./gradlew clean 清除之前的构建输出,如编译后的类文件、JAR 文件等。
  4. ./gradlew assembleDebug 可以指定要运行的具体任务,例如 assembleDebug 用于构建调试版本的应用。
  5. ./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 detector
    androidx.appcompat.view.OnClickXmlDetector

The full lint text report is located at:
  /Users/temp/Documents/project/test/app/build/intermediates/lint_intermediate_text_report/debug/lint-results-debug.txt

FAILURE: 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”)
}
}

gradlewdebug_apk_39">gradlew编译debug apk

./gradlew :app:assembleDebug
生成如下apk文件:
在这里插入图片描述

gradlewrelease_apk_43">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/bash

ANDROID_SDK=/Users/temp/Library/Android/sdk
echo $#

function usage {
    echo "$0 keystore alis pass apk"
}

if [ $# -ne 4 ]; then
    usage
    exit
fi

key=$1
alis=$2
pass=$3
apk=$4

echo "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_86">gradlew注意事项

  1. 在首次运行 gradlew 时,它会自动下载指定版本的 Gradle 并将其存储在本地缓存中,因此可能需要一些时间。
  2. 如果你的项目依赖于互联网上的资源(如远程仓库中的库),确保在运行 gradlew 命令前有稳定的网络连接。
    作者:帅得不敢出门

http://www.niftyadmin.cn/n/5744119.html

相关文章

笔记整理—linux驱动开发部分(6)platform平台总线

与前文提到的usb、IIC、PCI总线不同,platform总线是一种虚拟抽象的总线,不存在物理层面上的一个名为platform的总线。 cup与外部设备通信有两种方法,地址总线或接口(32位范围是0~2^32-1);专用接口连接&…

深度学习经典模型之Network in Network

1 Network in Network 1.1 模型介绍 ​ Network In Network (NIN)是由 M i n L i n Min Lin MinLin等人提出,在CIFAR-10和CIFAR-100分类任务中达到当时的最好水平,因其网络结构是由三个多层感知机堆叠而被成为NIN [ 5 ] ^{[5]} [5]。NIN以一种全新的角…

【华为机试题】 [Python] 贪心的商人

代码 # 其实就是贪心算法求每个商品的最大利润,最后再和商品数相乘就好了 from unittest.mock import patchclass Solution:def func(self, number, days, item_max_num, item_price):max_money 0for i in range(number):max_money item_max_num[i] * self.compu…

大数据数据存储层MemSQL, HBase与HDFS

以下是对 MemSQL、HBase 和 HDFS 的详细介绍,这些工具在分布式数据存储和处理领域有着重要作用。 1. MemSQL MemSQL(现称为 SingleStore)是一种分布式内存数据库,兼具事务处理(OLTP)和分析处理(OLAP)的能力,专为高性能实时数据处理设计。 1.1 核心特点 内存优先存储…

Unity中IK动画与布偶死亡动画切换的实现

在Unity游戏开发中,Inverse Kinematics(IK)是创建逼真角色动画的强大工具。同时,能够在适当的时候切换到布偶物理状态来实现死亡动画等效果,可以极大地增强游戏的视觉体验。本文将详细介绍如何在Unity中利用IK实现常规…

docker-compose.yml 文件来配置 Redis

你可以创建一个 docker-compose.yml 文件来配置 Redis,确保 Redis 在启动时使用指定的密码和相关配置。以下是配置文件的示例: version: 3.8services:redis:image: redis:latestcontainer_name: redis-serverports:- "6379:6379"environment:…

Spark中的宽窄依赖-宽窄巷子

1、什么是依赖关系? 2、什么是宽窄依赖? 窄依赖:Narrow Dependencies 定义:父RDD的一个分区的数据只给了子RDD的一个分区 【不用经过Shuffle】 特点:一对一或者多对一,不经过Shuffle,性能相对…

vue3 pdf base64转成文件流打开

vue3 pdf base64转成文件流打开 1、先下载依赖 “vue-pdf”: “^4.3.0”, “canvas”: “^2.11.2”, “pdfh5”: “^1.4.0”, “pdfjs-dist”: “2.5.207”, 2、文件流转换 const getList async () > {const res await TH36({query_type: 2,start_date: data.start_date,…