在window下用android-ndk编译android下可执行程序的方法。

环境,win7,与android-ndk-r13b-windows-x86_64,把android-ndk-r13b-windows-x86_64解压在目当中就可,不用安装

1,只用gcc工具

D:\android-ndk\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc --sysroot=D:\android-ndk\android-ndk-r13b\platforms\android-9\arch-arm -o test test.cpp

因为没有环境变量用了全路径,实际上是找到android-ndk-r13b下的相应于目示平台的工具目录,内有GNU的一些工具。--sysroot指示了用到的示准库。

test.cpp 内容是
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{

    fprintf(stderr, "this is a test...\n");

    return 0;
}

2,用ndk-build脚本工具,它会依同目录下的Android.mk文件的配置,调用相应的gcc 做编译。在换目标平台时方便少一点。

因为默认的目录原因,在运行ndk-build下建jni目录。下面加入三个文件:test.cpp,Android.mk,Application.mk

Android.mk内容是

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
include $(BUILD_EXECUTABLE)

Application.mk是

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI :=armeabi

文件准后后,在目标下直接用ndk-build就可以。然后adb push到目标平台,chmod 后./test.可以看一下结果

3,用CMake

用Cmake 就要用到Ninja这个工具,Cmake就是为了让编译各用平台更方便。但Cmake自已的配置也不少。最简的例子,需要的文件有:test.cpp build.bat , CMakeLists.txt

build.bat 是因为调用Cmake,交叉骗译用到选项多,所以写成脚本。 CMakeLists.txt主要是给最后的编译器指示编译选项用的,但这里的写法,与最好gcc用到选项写法不一样。它有一个通一的写法,通过CMAKE编生成基它工具可通知的配置。如生成ninja可用的build.ninja文件。

set toolchain=D:/android-ndk/android-ndk-r13b/build/cmake/android.toolchain.cmake
set android_ndk=D:/android-ndk/android-ndk-r13b
set build_type=Release
set gernerator="Ninja"
if not exist %1 md %1
cd %1
::cmake .. -DCMAKE_TOOLCHAIN_FILE=%toolchain% -DANDROID_NDK=%android_ndk% -DCMAKE_BUILD_TYPE=%build_type% -DANDROID_ABI="%1" -DCMAKE_GENERATOR=%gernerator%
cmake .. -DCMAKE_TOOLCHAIN_FILE=%toolchain%  -DCMAKE_BUILD_TYPE=%build_type% -DANDROID_ABI="%1" -DCMAKE_GENERATOR=%gernerator%
ninja
cd ..

 CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(HELLO)
SET(SRC_LIST test.cpp)
INCLUDE_DIRECTORIES(
include
)
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
ADD_EXECUTABLE(hello ${SRC_LIST})
 

在目示下运行脚本就可以生成目标了。如果中间出错删去自动生成的文件,找原因再重试,不删去自动生成的文件,新的选项可能不会启作用。ninja的路径要加入的系统path,要不cmake会找不到,同目示下也会找不到。

Cmake的选项很多,在大工程中,要把不同的编译工具,组合在一起用时,很实用。Cmake面向每一种编译工具集时,所用的选项都不太一样。需要自已对编译工具了解,再看看cmake的说明去决定。

这里的只是初步,看不出Cmake的功能,反而感觉繁琐。

CMake只是编译工具。gradle引入了版本依赖。这些东西,对只开发小程序,没用混合编程,只是感到繁琐。

猜你喜欢

转载自blog.csdn.net/qushaobo/article/details/81089466