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

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

【问题讨论】:

  • 例如./gradlew assembleRelease、./gradlew assembleDebug
  • 如果你有多个构建变体,那么你应该去 ./gradlew assembleYourVariantRelease

标签: android-studio gradle command-line android-gradle-plugin


【解决方案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 上运行 ./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的回答。

          一步一步的过程:

          1. 打开终端
          2. 将目录更改为您的项目(cd PathOfYourProject)
          3. 复制并粘贴此命令并回车:

            chmod +x gradlew
            
          4. 正如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 日测试。您可以完全从头开始。

                先决条件

                1. 下载 git
                2. 安装 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
                    

                    【讨论】:

                      猜你喜欢
                      • 2011-08-05
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-10-28
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-08-16
                      相关资源
                      最近更新 更多