【问题标题】:running android dx quits batch script运行 android dx 退出批处理脚本
【发布时间】:2020-01-25 21:59:47
【问题描述】:

我正在尝试直接从命令行构建 Android 应用程序,而不使用 Gradle 等任何构建系统。

我编写了一个小批量程序,它将完成从源代码构建 apk 文件所需的所有基本任务。这是我的批处理文件:

@echo off
set /P build_tools_version="Enter build tools version : "
set /P android_version="Enter Android version : "
set /P package="Enter package name : "

%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\aapt      package -f -m -J %cd%\src -M %cd%\AndroidManifest.xml -S %cd%\res -I %ANDROID_SDK_ROOT%\platforms\android-%android_version%\android.jar
echo aapt
javac -d %cd%\obj -source 1.8 -target 1.8 -classpath %cd%\src -bootclasspath %ANDROID_SDK_ROOT%\platforms\android-%android_version%\android.jar %cd%\src\%package:.=\%\*.java
echo javac
%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\dx        --dex --output=%cd%\classes.dex %cd%\obj
echo dx

%ANDROID_SDK_ROOT% 指向 Android SDK 目录。

当我运行这个脚本时,它会被执行到dx 命令。 echo 语句和dx 命令之后的命令不会被执行。
我做错了什么?

【问题讨论】:

  • 更多信息会有所帮助,而不是无意义的代码,(现已删除)。它是否输出aaptjavac,但不输出dx?或者只是aapt
  • 它输出aaptjavac,但不输出dx
  • 嗯,你已经被告知原因了,那是因为%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\dx 真的是%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\dx.bat,这意味着你需要Call 它,如果你想让控制权返回到发起者完成后的批处理文件。打开命令提示符窗口并输入call /? 以读取其使用信息。

标签: android batch-file


【解决方案1】:

这个批处理脚本有一个明显的问题:

这些echo 语句毫无用处,因为变量从来都不是set

在 Windows 上,这应该是 aapt.exe / aapt2.exejavac.exedx.bat / d8.bat

你至少应该定义你使用的变量:

set javac=%JAVA_HOME%\bin\javac.exe
set aapt=%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\aapt.exe
set aapt2=%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\aapt2.exe
set dx=%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\dx.bat
set d8=%ANDROID_SDK_ROOT%\build-tools\%build_tools_version%\d8.bat

要从.bat 调用.bat,您需要使用call

删除@echo off 可能对调试有用。

【讨论】:

  • 那些echo 语句仅用于测试。
  • 非常感谢。我使用call 命令运行dx.bat 并且它有效。
猜你喜欢
  • 2014-12-03
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多