【问题标题】:Windows XP for an Android develepmont environment适用于 Android 开发环境的 Windows XP
【发布时间】:2012-10-04 21:16:13
【问题描述】:

说明: 我之前的 Android 开发环境是一台 Win7 机器,它使用命令行构建工具和与 Git 一起安装的 MinGW bash shell。我正在尝试在一台古老的 WinXP 机器上创建一个类似的环境。

原问题:

我正在为我的 Android 开发环境设置一台旧的 Windows XP 机器。 (是的,我知道我希望我有能力购买一台新的 Win7 或更好的 Win8 机器。我正在使用我目前拥有的机器。)我目前的问题是当我运行 @987654321 时@我收到以下错误:

-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 又运行..\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 安装的正确位置。但是,当我在上述批处理脚本 sn-p 中的 forif 命令之间添加 echo 语句时,我可以看到 java_exe 变量未设置或为空。我已经在 Win7 机器上成功编译了我的 Android 应用程序,所以我认为问题在于上面的 for 命令对于 WinXP 环境不正确。如何更改它以使其在 WinXP 中工作?如果问题不是特定于 WinXP,那么问题出在哪里,我该如何解决?

【问题讨论】:

  • 我知道这不是一个直接的解决方案,但是如果您因为缺少 Win7 或 8 的许可证而运行 XP,为什么不直接运行 Ubuntu?我认为它对 Android 开发更友好。
  • @dennisdrew 我正在考虑运行某种 Linux 风格。最大的问题是这台机器没有互联网连接,所以我在我的 USB ATM 上安装东西。我不确定它对 Linux 的效果如何......
  • @Code-Guru :我运行 XP 但我使用 Eclipse 进行 Android 开发。我知道这不能回答您的问题,但经过相当简单的设置后,无需运行命令行工具或批处理文件。
  • @Squonk 即使我决定使用 Eclipse,我仍然想知道我目前的设置有什么问题。
  • @Code-Guru :我明白这一点。我唯一的观点是因为我更喜欢 IDE——我已经使用脚本和批处理文件很长时间了,并且经常发现在开发环境中使用它们可能会带来更多的麻烦而不是它们的价值。 Eclipse 并不完美,但我更喜欢一种“可视化”设置我的 IDE 的方式,而不是编辑脚本和批处理文件。正如我所说,它不能解决您的具体问题,但它是让 IMO 为您工作的好选择。

标签: java android windows development-environment


【解决方案1】:

简答:

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

长答案:

违规行实际上是来自 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 的输出。

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

      • rem 在开头删除了 @echo off 命令。 (这在 OP 中没有显示。)这会在执行时打印出批处理文件中的每个命令。
      • 添加了一个回显命令来查看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 变量的值,该变量稍后将在另一个脚本中使用。

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

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

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

【讨论】:

    【解决方案2】:

    将 c:/PROGRA~1/Java/JDK16~1.0_3\bin\ 添加到 Path 环境变量中

    【讨论】:

    • 感谢您的建议。该目录已经在 PATH 变量中,因为手动运行find_java.exe -s 会给出预期的输出。但是,运行相同的命令(嵌入在 bash 脚本中的 for 循环中,如 OP 所示)不会给出相同的输出。
    猜你喜欢
    • 2017-06-04
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2023-03-13
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多