我用C ++编写了一个国际象棋引擎,我想编译它来运行应用程序" Chess for Android"。
以下是应用作者的帖子的摘录,very very crudely描述了如何在他的应用上运行第三方国际象棋引擎:
最后,开发人员可以使用适当的编译器工具链(例如ARM的CodeSourcery或NDK附带的工具链)在C / C ++中进行所有开发并生成独立的本机代码。第三种方法由Chess for Android用于导入未随应用程序提供的引擎。
国际象棋引擎是一个简单的程序。应用程序运行,用户发送命令,程序认为,并将回吐一个包含最佳移动细节的字符串。
我不需要带有图形或其他任何东西的应用程序。它只是一个与via stdin / stdout进行通信的过程(真的通过管道)。 " Chess for Android" app负责与流程进行交流,我只需要弄清楚如何让我的引擎成为一个可以由" Chess for Android"应用
答案 0 :(得分:4)
您可以通过两种方式为Android构建传统的控制台程序。
您需要创建两个额外的文件:Application.mk
:
APP_ABI := armeabi-v7a
APP_PLATFORM := android-16
APP_STL := stlport_static
NDK_TOOLCHAIN_VERSION := 4.8
Android.mk
:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := <executable_name>
LOCAL_LDLIBS := -llog -lm # whatever libs you need
LOCAL_CFLAGS := -O3 -UNDEBUG # so on
LOCAL_C_INCLUDES := <list of a non-standard header directories>
LOCAL_SRC_FILES := <sources>
include $(BUILD_EXECUTABLE) # build executable instead of library
前者描述目标ABI,目标android级别,STL实现并选择构建工具链。后者本身就是一个简单的makefile,它不应该让人困惑。有关详情,请参阅here 然后你可以用下一个命令开始构建:
$ ndk-build NDK_PROJECT_PATH=path/to/intermediate/results/dir NDK_LIBS_OUT=path/to/output/dir APP_BUILD_SCRIPT=path/to/Android.mk NDK_APPLICATION_MK=path/to/Application.mk
另请注意,ndk-build
默认添加了一些标记。要检查它 - 将V=1
添加到上面的命令行。
如果您已经为项目构建了系统并且只需要交叉编译,那么这种方法可能很有用。准备独立的toochain运行,例如下一步:
$NDK/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/tmp/my-android-toolchain
现在导出工具路径:
$ export PATH=/tmp/my-android-toolchain/bin:$PATH
$ export CC=arm-linux-androideabi-gcc
$ export CXX=arm-linux-androideabi-g++
更多信息here。
答案 1 :(得分:0)
我认为关键声明可在此页面找到:UCI and XBoard Engines for Android
对于基于x86的Android设备(例如Google TV),任何为32位x86 Linux编译的引擎二进制文件都可以使用。这种格式广泛适用于许多国际象棋引擎。
这意味着Chess for Android可以使用引擎,就像它们是为Linux编译一样。这并不太令人惊讶,因为Android基于Linux并且具有可用的本机Linux API。 Chess for Android使用这些API将引擎作为普通的Linux本机可执行文件运行。
因此,如果您拥有32位Linux x86系统并且您的Android设备是x86设备,只需在Linux系统上编译您的引擎,就好像您在本地使用它并根据上面的说明将其安装在您的设备上你链接的页面。
但是,您的Android设备可能不是x86设备,它可能是ARM设备。在这种情况下,您需要在您的计算机上运行一个交叉编译器,它可以将其编译为针对ARM的Linux可执行文件(这在您引用的部分中有简要描述)。交叉编译器将以与本机编译器相同的方式编译代码,但生成的可执行文件将包含ARM芯片的机器指令,而不是计算机中的x86芯片。
由于您(可能)在Windows上进行开发,因此使用Android NDK交叉编译器可能是最方便的。根据其说明进行安装(请注意,实际使用NDK的大部分说明与您无关,因为您没有为Android应用程序创建本机库,而是创建普通的Linux可执行文件)
NDK包含一个gcc交叉编译工具链。您将使用它来构建您的本机.exe。确保您的PATH包含NDK中包含gcc编译器前端的文件夹。然后,如果您的引擎源代码在文件调用engine.cc中,您应该能够使用类似
的命令将其编译为ARM二进制文件gcc -o MyUCIEngine engine.cc
您可能需要设置一些更多的环境变量,而实际构建的命令会更复杂。 This page具有在NDK中运行交叉编译工具链所需的其他信息。