gpt4 book ai didi

java - 适用于 Android 开发环境的 Windows XP

转载 作者:行者123 更新时间:2023-12-01 15:07:52 25 4
gpt4 key购买 nike

澄清:我之前的 Android 开发环境是 Win7 机器,使用命令行构建工具以及随 Git 安装的 MinGW bash shell。我正在尝试在一台古老的 WinXP 机器上创建类似的环境。

原始问题:

我正在为我的 Android 开发环境设置一台旧的 Windows XP 机器。 (是的,我知道我希望我有办法购买一台新的 Win7——或者更好的 Win8——机器。我正在用目前拥有的东西凑合着。)我当前的问题是,当我运行我的 ant -f build-android.xml debug 我收到以下错误:

-dex:
[dex] Found Deleted Target File
[dex] Converting compiled files and external libraries into c:\devel\src\java\bbct\bin\classes.dex...
[dx] ************ java_exe=
[dx] The system cannot find the path specified.
[dx]
[dx] ERROR: No suitable Java found. In order to properly use the Android Developer
[dx] Tools, you need a suitable version of Java JDK installed on your system.
[dx] We recommend that you install the JDK version of JavaSE, available here:
[dx] http://www.oracle.com/technetwork/java/javase/downloads
[dx]
[dx] You can find the complete Android SDK requirements here:
[dx] http://developer.android.com/sdk/requirements.html
[dx]

通过一些侦探工作,我发现 -dex 目标运行 ${android.platform.tools.dir}/dx${bat} ,其中依次运行 ..\tools\lib\find_java.bat 部分内容如下:

rem Useful links:
rem Command-line reference:
rem http://technet.microsoft.com/en-us/library/bb490890.aspx

rem Check we have a valid Java.exe in the path. The return code will
rem be 0 if the command worked or 1 if the exec failed (program not found).
for /f %%a in ('%~dps0\find_java.exe -s') do set java_exe=%%a
if not defined java_exe goto :CheckFailed

从命令行运行 find_java.exe -s 给出

c:/PROGRA~1/Java/JDK16~1.0_3\bin\java.exe

这是我的 JDK 安装的正确位置。但是,当我在上面的批处理脚本 fragment 中的 forif 命令之间添加 echo 语句时,我可以看到 java_exe 变量是未设置或为空。我已经在 Win7 机器上成功编译了我的 Android 应用程序,所以我相信问题是上面的 for 命令对于 WinXP 环境不正确。我该如何更改它才能使其在 WinXP 中工作?如果问题不是 WinXP 特有的,那么问题出在哪里以及如何修复它?

最佳答案

简短回答:

简短的回答是,我认为我在 WinXP 命令行解释器中发现了一个错误。至少,Win7 中的行为与 WinXP 不同。我首先讨论并分解问题的原因。最后,我将对 find_java.bat 提出修复建议。 Android SDK 附带的脚本。

长答案:

有问题的行实际上是 find_java.bat 中的 for 循环脚本:

for /f %%a in ('%~dps0\find_java.exe -s') do set java_exe=%%a

根据MS docs ,此处适用的语法适用于用于迭代文件名的 for 循环:

for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]

让我们来分解一下:

  • 我们没有使用 "ParsingKeywords"
  • 如果在批处理脚本中使用此命令,那么我们需要 %%在变量名前面。如果我们从命令行运行它,那么只有一个 %被使用。
  • 在我们的情况下,'%~dps0\find_java.exe -s'描述“文件名集”。此应该评估为运行 find_java.exe -s 的输出.

    • 正在运行 find_java.exe在我的 WinXP 机器上手动从 MinGW 命令行给出正确的输出。
    • 接下来我修改了 find_java.bat文件如下:

      • rem@echo off开头的命令。 (这没有在OP中显示。)这会在执行时打印出批处理文件中的每个命令。
      • 添加了一个 echo 命令来查看 java_exe 的值

      运行修改后的find_java.bat直接文件,我用的是原生WinXP cmd命令行。 (我还应该使用 MinGW 中的 ant 脚本尝试此操作。)相关输出为

      C:\Program Files\Android\android-sdk\tools\lib>for /F %a in ('C:\PROGRA~1\ANDROID\ANDROI~1\tools\lib\FIND_J~1\find_java.exe -s') do set java_exe=%a
      The system cannot find the path specified.

      C:\Program Files\Android\android-sdk\tools\lib>echo ************ java_exe=
      ************ java_exe=

      如您所见,java_exe是空的。我还找到了路径C:\PROGRA~1\ANDROID\ANDROI~1\tools\lib\FIND_J~1\find_java.exe有点奇怪;应该是C:\PROGRA~1\ANDROID\ANDROI~1\tools\lib\find_java.exe , 反而。进一步的调查揭示了正在发生的事情:

      • %0、%1、%2 等引用命令行参数
      • 语法 %~[modifiers][#] 提供了一些有关如何处理命令行参数的附加参数。特别是 modifiers 的值这里包括

        • d = 展开驱动器盘符
        • p = 展开路径名
        • s = 使用短 8.3 DOS 名称扩展

        我们的想法是我们想要运行 find_java.exe可执行文件与 find_java.bat 位于同一目录中此代码所在的脚本。 %0指的是批处理脚本的名称。现在由于某种原因,WinXP 命令行解释器在此扩展中包含了批处理脚本的文件名,而不仅仅是扩展它所在的路径。由于路径不正确,find_java.exe永远不会执行并且 java_exe变量从未设置为有效值。另一方面,Win7只是扩展了批处理脚本的路径,一切都运行得很好。

    • command设置 java_exe 的值稍后在另一个脚本中使用的变量。

解决方案:当我删除s时来自 '%~dps0\find_java.exe -s' 的修饰符给出正在执行的批处理文件的路径,不带文件名。但是,现在路径中可能存在空格和其他特殊字符。为了解决这个问题,我只需在适当的位置添加双引号即可。最终的 for 命令如下所示:

for /f %%a in ('"%~dp0\find_java.exe" -s') do set java_exe=%%a

由于删除 s 时行为发生变化修饰符,我相信 WinXP 命令行解释器中存在错误。

关于java - 适用于 Android 开发环境的 Windows XP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com