【问题标题】:Android-ndk - simple build script for ndk-build for cygwinAndroid-ndk - 用于 cygwin 的 ndk-build 的简单构建脚本
【发布时间】:2011-11-30 18:20:56
【问题描述】:

我正在尝试制作一个可以在 Windows 和 unix 系统上运行的简单构建脚本。 如果是 windows,脚本将从 cygwin 运行,否则只是一个标准 shell。

脚本将执行以下操作:

  1. 将目录变量 SDK_ROOT 设置为 '/cygdrive/C/PROGRA~2/Android/android-sdk/'
  2. 将目录变量 NDK_ROOT 设置为 '/cygdrive/C/PROGRA~2/android-ndk-r6b'
  3. cd Android/bin/
  4. 运行 javah -d ../../test/mytest/ -classpath .:$SDK_ROOT/platforms/android-8/android.jar com.test.MyTest
  5. cd ..
  6. 运行 $NDK_ROOT/ndk-build

我不确定要使用哪种脚本语言,也不确定它的语法,我只知道它大致如下所示。关于如何进行的任何想法?

【问题讨论】:

    标签: android bash cygwin android-ndk


    【解决方案1】:

    在我看来,您已经编写了脚本,只需要稍作修改:

    Windows
    myscript.cmd

    @ECHO OFF
    setlocal
    
    SET SDK_ROOT=C:\PROGRA~2\Android\android-sdk\
    SET NDK_ROOT=C:\PROGRA~2\android-ndk-r6b\
    CD Android/bin/
    javah -d ../../test/mytest/ -classpath .:%SDK_ROOT%/platforms/android-8/android.jar com.test.MyTest
    CD ..
    RUN %NDK_ROOT%/ndk-build
    
    endlocal
    

    Unix
    myscript.sh

    #!/bin/bash
    SDK_ROOT="/cygdrive/C/PROGRA~2/Android/android-sdk/"
    NDK_ROOT="/cygdrive/C/PROGRA~2/android-ndk-r6b"
    cd Android/bin/
    javah -d ../../test/mytest/ -classpath .:${SDK_ROOT}/platforms/android-8/android.jar com.test.MyTest
    cd ..
    $NDK_ROOT/ndk-build
    


    此外,请确保您的 PATH 环境变量中存在 javah。
    如果不存在,您可以将其添加到脚本开头:

    Windows
    SET PATH=c:\path\to\javah;%PATH%

    Unix em>
    export PATH=/path/to/javah:$PATH


    注意:您可能需要在 windows 上修改脚本的 sdk/ndk 路径。

    【讨论】:

    • 是的,这正是我要找的!但是,当尝试在 Cygwin 中运行 unix-script 时;我得到以下信息:#1:“第 5 行:$'\r':命令不存在。” #2:“没有这样的文件或目录:Android/bin/(即使它肯定存在于脚本所在的位置)”
    • 您是从 bash cygwin shell 启动脚本(unix)吗?可以给我截图吗?
    • @KaiserJohaan \r 表明 bash 脚本中有一个 Windows“换行符”。尝试使用 Unix 风格的换行符保存它。 (例如在 Notepad++ 中:编辑菜单、EOL 转换)
    【解决方案2】:

    如果您使用的是 Eclipse,我建议您为此任务创建一个新的启动器。打开您的项目属性,然后从左侧窗格中选择 Builders。我们想要这样结束:

    点击“新建...”并创建一个新的程序启动器:

    填写ndk-build的路径(我建议将其添加到您的系统路径中,这样您就不需要如图所示的绝对路径)和项目工作区:

    这应该已经可以了,但是我们可以限制在完成时刷新哪些资源:

    1. 点击“刷新”标签
    2. 勾选“完成后刷新资源”
    3. 勾选“特定资源”
    4. 点击“指定资源”
    5. 在您的项目中找到libs 文件夹并选择它(以及受ndk-build 影响的任何其他文件夹,如果适用)

    最后,我们可以限制何时 NDK Builder 应该运行(即仅当 JNI 源更改时):

    1. 点击“构建选项”标签
    2. 勾选“指定相关资源的工作集”
    3. 点击“指定资源”
    4. 在您的项目中找到 jni 文件夹并选择它(或任何您拥有 JNI 源文件的位置,以及应触发新 ndk-build 的任何其他文件)

    我希望这能让您的构建过程更轻松!

    【讨论】:

    • 我最好在 cygwin 中寻找可以独立于 eclipse 运行的 .sh 脚本解决方案
    • 嗨@Paul,这向我显示了Eclipse 中的错误Build Failed。它给出了这个错误Exception occurred executing command line. Cannot run program "D:\android-ndk-r5b\ndk-build" (in directory "D:\All Data\WorkSpace\MainBrowserActivity"): CreateProcess error=193, %1 is not a valid Win32 application。有任何解决方案
    • ndk-build 不是 Windows 可执行文件。您只能在基于 Unix 的系统上或通过 Cygwin 运行它。屏幕截图是在 Windows 上拍摄的,因为这里我从 Cygwin 运行 Eclipse。通常我更喜欢在 Ubuntu 下使用原生代码开发应用程序。
    • 你如何从 cygwin 运行 Eclipse?
    【解决方案3】:

    我想我在这里遗漏了一些东西。您当然可以通过 Cygwin 或 Unix/Linux 在 Windows 上运行 shell 脚本 (.sh)。您有具体问题吗?

    另外,请确保您的脚本中有“#!/bin/bash”文件前缀。

    【讨论】:

      【解决方案4】:

      蚂蚁呢?据我所知,它可以在 Win 和 Linux 上运行……而且您只需为两者编写目标代码一次。如果您坚持,您甚至可以在 .bat 和 .sh 中调用 Ant。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多