通过命令行构建 Android Studio 应用

Posted

技术标签:

【中文标题】通过命令行构建 Android Studio 应用【英文标题】:Build Android Studio app via command line 【发布时间】:2014-08-15 09:20:17 【问题描述】:

我想构建一个 android Studio 应用(Gradle 构建系统),但我想通过命令行来实现。

【问题讨论】:

例如./gradlew assembleRelease、./gradlew assembleDebug 如果你有多个构建变体,那么你应该去 ./gradlew assembleYourVariantRelease 【参考方案1】:

Android Studio 会自动在您的项目的根目录中创建一个Gradle wrapper,这就是它调用 Gradle 的方式。包装器基本上是一个脚本,它调用实际的 Gradle 二进制文件并允许您使 Gradle 保持最新,这使得使用版本控制更容易。要运行 Gradle 命令,您只需使用项目根目录中的 gradlew 脚本(或 Windows 上的 gradlew.bat)后跟要运行的任务的名称。例如,要构建 Android 应用程序的调试版本,您可以从存储库的根目录运行 ./gradlew assembleDebug。在默认项目设置中,生成的 apk 然后可以在 app/build/outputs/apk/app-debug.apk 中找到。在 *nix 机器上,你也可以运行 find . -name '*.apk' 来找到它,如果它不存在的话。

【讨论】:

我花了 2 个多小时才明白从命令行运行 Gradle 的正确方法是什么 我从命令行c:\path_to_my_app\gradlew.bat ./gradlew assemblyDebug 运行了它,它显示了正在下载services.gradle.org/distributions/gradle-2.10-all.zip。它卡在那里。我错过了什么? 您也可以使用./gradlew installArm7Debug 安装应用程序。其他任务很容易从./gradlew tasks找到 我编译了项目并使用./gradlew assembleDebug./gradlew installDebug命令将其上传到Android设备。在 AndroidStudio 中有一个控制台可以实时监控所有 Android 设备活动(例如,如果 Android 设备崩溃,控制台会打印异常跟踪)。如何在终端上获得这个监控设施? 如何防止 gradle 下载 -> 下载 services.gradle.org/distributions/gradle-2.xyz-all.zip 。我注意到 gradle 可以很好地构建 android 项目,但是在命令行上存在代理设置问题。可以通过放置代理设置来解决(但现在我没有那个特权)但我只想绕过下载的东西..我该怎么做?【参考方案2】:

试试这个(仅限 OS X):

brew install homebrew/versions/gradle110gradle build

您可以使用gradle tasks 查看当前项目的所有可用任务。这里不需要Android Studio

【讨论】:

确保一开始就安装了自制软件! "不需要 Android Studio"——除非你需要 Android SDK。无论如何,我正在尝试构建的项目确实需要它。【参考方案3】:

使用 Gradle 构建设置构建您的应用程序有两种构建类型:一种用于调试您的应用程序 - 调试 - 一种用于构建您的最终包以进行发布 - 发布模式。

在调试模式下构建

首先使用 CMD 导航到 Android Studio 项目根文件夹

运行这个命令gradlew.bat assembleDebug

输出窗口如下所示

在发布模式下构建签名的 apk

编辑 build.gradle 文件以在发布模式下构建您的项目:

 android 
 ...
 defaultConfig  ... 
 signingConfigs 
     release 
         storeFile file("myreleasekey.keystore")
         storePassword "password"
         keyAlias "MyReleaseKey"
         keyPassword "password"
     
 
 buildTypes 
     release 
         ...
         signingConfig signingConfigs.release
     
 

运行这个命令gradlew.bat assembleRelease

【讨论】:

构建成功后有没有办法自动启动应用程序? 构建后我找不到任何自动启动应用程序的方法 @DhavalJivani 您是说在模拟器中启动它?如果是这样,那只是简单的 adb 命令。您甚至可以针对要启动的特定活动。 developer.android.com/studio/command-line/adb.html @DhavalJivani 在自动化测试中测试 android 应用程序的最佳方法是什么?至于 web,我们在 python 和 node 中有 selenium。【参考方案4】:

1。安装 Gradle 和 Android SDK

要么

按照您认为合适的方式安装它们 在 Windows 上运行 ./gradlewgradlew.bat chmod +x ./gradlew 可能是必要的

从现在开始,gradle 指的是无论您选择哪种方式运行 Gradle。 相应地替换。

2。设置 Android SDK

如果您手动安装了 SDK

export ANDROID_HOME=<install location> 如果不是自动完成,您可能需要将其放入您的 ~/.profile

接受许可:yes | sdkmanager --licenses

sdkmanager 可以在 $ANDROID_HOME/tools/bin 中找到 sdkmanager 可能必须以 root 身份运行

尝试运行gradle

如果有关于未找到许可证或 SDK 的投诉,请修复 目录权限 chown -R user:group $ANDROID_HOME 如果你鲁莽和/或唯一的用户:chmod 777 -R $ANDROID_HOME

3。建筑

gradle tasks 列出了所有可以运行的任务 :app:[appname] 是所有任务的前缀,您将在 Gradle 中看到 构建时的日志 运行任务时可以排除这个

一些基本任务

gradle assemble: 构建您的应用程序的所有变体 生成的 .apks 位于 app/[appname]/build/outputs/apk/[debug/release] gradle assembleDebugassembleRelease:仅构建调试或发布版本 gradle installDebuginstallRelease 构建并安装到连接的设备 已安装adb 连接启用了 USB 调试和 USB 文件传输的设备 运行adb devices,检查您的设备是否已列出并且设备 旁边

根据更改自动构建和安装

这避免了必须连续运行相同的命令

gradle -t --continue installDebug
-t:又名--continuous,文件更改后自动重新运行任务 --continue:出错后继续。防止发生错误时停止

运行gradle -h获取更多帮助

【讨论】:

【参考方案5】:

您可能也想安装它!

构建

gradlew

(在 Windows 上 gradlew.bat

然后安装

adb install -r exampleApp.apk

-r 使其替换现有副本,如果安装在模拟器上,请添加-s

奖金

我在 ~/.bash_profile 中设置了一个别名,使其成为 2char 命令。

alias bi="gradlew && adb install -r exampleApp.apk"

(构建和安装的缩写)

【讨论】:

【参考方案6】:

在 Linux 上从命令行为 Android Studio 项目运行 Gradle 的备忘单:

cd <project-root>
./gradlew
./gradlew tasks
./gradlew --help

应该让你开始..

【讨论】:

【参考方案7】:

对于 Mac 使用此命令

  ./gradlew task-name

【讨论】:

【参考方案8】:

仅适用于 MAC 用户

扩展Vji的回答。

一步一步的过程:

    打开终端 将目录更改为您的项目(cd PathOfYourProject)

    复制并粘贴此命令并回车:

    chmod +x gradlew
    

    正如Vji 建议的那样:

    ./gradlew task-name
    

    别忘了在 /gradlew 之前添加 .(DOT)

【讨论】:

【参考方案9】:

Official Documentation is here:

要构建调试 APK,请打开命令行并导航到项目目录的根目录。要启动调试构建,请调用 assembleDebug 任务:

gradlew assembleDebug

这会在project_name/module_name/build/outputs/apk/ 中创建一个名为module_name-debug.apk 的APK。

【讨论】:

【参考方案10】:

MacOS 变体

./gradlew <moduleName>:assemble<build_variant>
//e.g
./gradlew <moduleName>:assembleDebug

*./ 表示当前目录

[More info]

【讨论】:

【参考方案11】:

我也遇到了同样的问题,看来google改了很多。

我可以告诉你纯粹通过命令行从头开始安装的步骤。 我于 2021 年 2 月 22 日在 Ubuntu 上对其进行了测试。

创建 sdk 文件夹

export ANDROID_SDK_ROOT=/usr/lib/android-sdk
sudo mkdir -p $ANDROID_SDK_ROOT

安装openjdk

sudo apt-get install openjdk-8-jdk

下载安卓sdk

转到https://developer.android.com/studio/index.html 然后仅使用命令行工具 点击Linux链接,接受协议而不是下载右键复制链接地址

cd $ANDROID_SDK_ROOT
sudo wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip
sudo unzip commandlinetools-linux-6858069_latest.zip

移动文件夹

将解压后的目录从 cmdline-tools 重命名为 tools, 并将其放在 $ANDROID_SDK_ROOT/cmdline-tools 下, 所以现在它应该看起来像:$ANDROID_SDK_ROOT/cmdline-tools/tools。 在它里面,你应该有: NOTICE.txt bin lib source.properties。

设置路径

PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin

这对我没有影响,因此下一步

浏览到 sdkmanager

cd $ANDROID_SDK_ROOT/cmdline-tools/tools/bin

接受许可

yes | sudo sdkmanager --licenses

创建构建

最后,在你的项目中运行它

chmod 777 gradlew
sudo ./gradlew assembleDebug

这会在 //build/outputs/apk/debug 处创建一个名为 -debug.apk 的 APK 该文件已使用调试密钥签名并与 zipalign 对齐, 这样您就可以立即将其安装到设备上。

最后的步骤

这是最后的步骤。使用这些内容制作 2 个 .sh 文件。在两者之前使用chmod 777。不需要 sudo。

下载_APK_Code_NOSUDO4.sh

# Don't forget to do chmod 777 Download_APK_Code_NOSUDO2.sh
#!/bin/bash

if [ -d "camera-samples" ]; then
  echo "############################# Deleting older code base.      ######################################"
  rm -rf camera-samples
fi

echo "###########################     Download Source Code: Start ... #####################################"
git clone git://git.quicinc.com/camera-samples -b iot-concam-apk.lnx.1.1
echo "##########################      Download Source Code: Done . . . ####################################"

Build_App_NOSUDO4.sh

# Don't forget to do chmod 777 Build_App_NOSUDO2.sh
#!/bin/bash

currentDir=$(pwd)
export ANDROID_SDK_ROOT=$(pwd)

# echo "############################################   Install JDK ...  ################################################"
# apt-get install openjdk-8-jdk

if [ -e "commandlinetools-linux-6858069_latest.zip" ]; then
  echo "############################# Deleting older zip file.      ######################################"
  rm -rf commandlinetools-linux-6858069_latest.zip
fi
echo "###########################################   Download Command Line Tools .. ###################################"
wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip
echo "###########################################   Download Command Line Tools Done .. ##############################"

if [ -d "cmdline-tools" ]; then
  echo "############################# Deleting older cmdline-tools.      ######################################"
  rm -rf cmdline-tools
fi
echo "###########################################   Unzip Command Line Tools Start .. #################################"
unzip commandlinetools-linux-6858069_latest.zip
echo "###########################################   Unzip Command Line Tools Done .. #################################"


echo "###########################################   Creating Directory Structure .. #################################"
mv cmdline-tools tools
mkdir cmdline-tools
cp -r  tools cmdline-tools/
rm -rf tools/


PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin
echo "##########################################   Updated Path : $PATH ###############################################"

cd $ANDROID_SDK_ROOT/cmdline-tools/tools/bin

echo "##########################################   Accept All Licenses .. #############################################"
yes | sdkmanager --licenses

cd $currentDir/camera-samples/Camera2Video
echo "sdk.dir = $ANDROID_SDK_ROOT" > local.properties

echo "########################################     Building APK . . . #################################################"
chmod 777 gradlew
./gradlew assembleDebug
echo "#######################################      Building APK Done. . .  ############################################"

echo "##################################### APK generated here:  $currentDir/app/build/outputs/apk/debug/app-debug.apk ###################################"
##########################################################

运行这些命令。

chmod 777 Download_APK_Code_NOSUDO4.sh
chmod 777 Build_App_NOSUDO4.sh
./Download_APK_Code_NOSUDO4.sh
./Build_App_NOSUDO4.sh

参考文献

https://gist.github.com/guipmourao/3e7edc951b043f6de30ca15a5cc2be40

Android Command line tools sdkmanager always shows: Warning: Could not create settings

"Failed to install the following Android SDK packages as some licences have not been accepted" error

https://developer.android.com/studio/build/building-cmdline#sign_cmdline

//////////////////////////////

Windows

以下是通过 Powershell 用于 Windows 的步骤。于 2021 年 3 月 6 日测试。您可以完全从头开始。

先决条件

    下载 git 安装 JDK。我用的是 jdk-8u281-windows-x64.exe

使用这些内容创建一个文件 DownloadAndBuild.ps1。


$location = Get-Location

if (Test-Path "$location\camera-samples") 
    Write-Host "########################### Deleting older code base: Start. ################################"
    Remove-Item -Force -Recurse -Path "$location\camera-samples"
    Write-Host "########################### Deleting older code base: Done. #################################"

Write-Host "########################## Download Source Code: Start. #####################################"
git clone https://source.codeaurora.org/quic/la/camera-samples -b iot-concam-apk.lnx.1.1
Write-Host "########################## Download Source Code: Done. ####################################"


if (Test-Path "$location\commandlinetools-win-6858069_latest.zip") 
    Write-Host "########################### Deleting older zip file: Start. ################################"
    Remove-Item -Force -Recurse -Path "$location\commandlinetools-win-6858069_latest.zip"
    Write-Host "########################### Deleting older zip file: Done. #################################"

Write-Host "########################## Download Command Line Tools: Start. #####################################"
$client = new-object System.Net.WebClient
$client.DownloadFile("https://dl.google.com/android/repository/commandlinetools-win-6858069_latest.zip","commandlinetools-win-6858069_latest.zip")
Write-Host "########################## Download Command Line Tools: End. #####################################"

if (Test-Path "$location\cmdline-tools") 
    Write-Host "########################### Deleting older folder: Start. ################################"
    Remove-Item -Force -Recurse -Path "$location\cmdline-tools"
    Write-Host "########################### Deleting older folder: Done. #################################"

Write-Host "########################## Extract Command Line Tools: Start. #####################################"
Expand-Archive "$location\commandlinetools-win-6858069_latest.zip" -DestinationPath "$location"
Write-Host "########################## Extract Command Line Tools: End. #####################################"



Write-Host "########################## Create Directory Structure: Start. #####################################"
Rename-Item -Path "$location\cmdline-tools" -newName "$location\tools"
New-Item -ItemType Directory -Force -Path "$location\cmdline-tools"
Move-Item -Path "$location\tools" -Destination "$location\cmdline-tools"
Write-Host "########################## Create Directory Structure: End. #####################################"

Write-Host "########################## Accept Licenses: Start. #####################################"
Set-Location -Path $location/cmdline-tools/tools/bin
for($i=0;$i -lt 100;$i++)  $response += "y`n"; $response | ./sdkmanager.bat --licenses
Write-Host "########################## Accept Licenses: End. #####################################"


Write-Host "########################## Build APK: Start. #####################################"
Set-Location -Path $location/camera-samples/Camera2Video
$Env:ANDROID_SDK_ROOT = $location
.\gradlew assembleDebug
Write-Host "########################## Build APK: End. #####################################"

Write-Host "##################################### APK generated here:  $location/camera-samples/Camera2Video/app/build/outputs/apk/debug/app-debug.apk ###################################"
PAUSE

右键单击并通过 Powershell 运行。 这将通过 git 下载一个 Android 项目,安装 SDK 并构建 Android 应用程序。

根据您的方便进行编辑。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 我在这里添加了完整的答案。【参考方案12】:

注意,您也可以在 Android Studio 中通过单击 gradle 窗口,然后单击“大象”按钮来执行此操作。这将打开一个名为“运行任何东西”的新窗口(也可以通过在“到处搜索”中搜索该名称来找到),您可以在其中手动键入任何您想要的 gradle 命令。不是“相当”的命令行,但通常提供更多我需要的比 Windows 命令行。

这允许您为 gradle 任务等提供可选参数。

【讨论】:

【参考方案13】:

enter code here使用下面的 gradle 和 adb 命令创建脚本文件,执行脚本文件

./gradlew clean

./gradlew assembleDebug ./gradlew installDebug

adb shell am start -n applicationID/启动器活动的完整路径

【讨论】:

【参考方案14】:

为所有这些答案增加价值,

许多人在构建成功后询问了在 AVD 中运行 App 的命令。

adb install -r path-to-your-bild-folder/yourAppName.apk

【讨论】:

以上是关于通过命令行构建 Android Studio 应用的主要内容,如果未能解决你的问题,请参考以下文章

4.4Android Studio在命令行运行Gradle

4.4Android Studio在命令行运行Gradle

使用 android studio 项目在命令行上使用 Gradle 构建失败:Xlint 错误

通过命令行构建 Visual Studio 项目

Android Studio 构建/清理

android-studio如何通过命令行运行gradle编译命令