通过命令行构建 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/gradle110
gradle 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 上运行./gradlew
或 gradlew.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
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 assembleDebug
或 assembleRelease
:仅构建调试或发布版本
gradle installDebug
或 installRelease
构建并安装到连接的设备
已安装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 应用的主要内容,如果未能解决你的问题,请参考以下文章