Android提供了NDK工具,用來(lái)編譯native代碼(c/c++),該工具配置好了相關(guān)的交叉編譯環(huán)境和工具鏈,只需要你簡(jiǎn)單地編寫(xiě)幾個(gè).mk文件即可將你的c/c++代碼編譯為Android的java工程/Android手機(jī)可以識(shí)別、加載和運(yùn)行的庫(kù)或者應(yīng)用程序。
默認(rèn)情況下,使用NDK編譯c/c++代碼,需要將該代碼放置到任一個(gè)Android應(yīng)用工程的jni目錄下,然后編寫(xiě)相應(yīng)的Android.mk文件,并執(zhí)行ndk-build命令完成編譯。其實(shí)你也是可以在任意目錄下去編譯native代碼的,只需要在ndk-build命令后面添加相應(yīng)的命令行參數(shù)即可,這里給出一些常用的ndk-build命令行參數(shù),方便大家靈活地使用NDK編譯自己的native代碼,具體的示例我將會(huì)在后續(xù)的文章中給出。
ndk-build命令行參數(shù)
1、ndk-build NDK_LOG=1
用于配置LOG級(jí)別,打印ndk編譯時(shí)的詳細(xì)輸出信息
2、ndk-build NDK_PROJECT_PATH=.
指定NDK編譯的代碼路徑為當(dāng)前目錄,如果不配置,則必須把工程代碼放到Android工程的jni目錄下
3、ndk-build APP_BUILD_SCRIPT=./Android.mk
指定NDK編譯使用的Android.mk文件
4、ndk-build NDK_APPLICATION_MK=./Application.mk
指定NDK編譯使用的application.mk文件
5、ndk-build clean
清除所有編譯出來(lái)的臨時(shí)文件和目標(biāo)文件
6、ndk-build -B
強(qiáng)制重新編譯已經(jīng)編譯完成的代碼
7、ndk-build NDK_DEBUG=1
執(zhí)行 debug build
8、ndk-build NDK_DEBUG=0
執(zhí)行 release build
9、ndk-build NDK_OUT=./mydir
指定編譯生成的文件的存放位置
10、ndk-build -C /opt/myTest/
到指定目錄編譯native代碼
例:
編寫(xiě) .c 文件
假設(shè)你在 ~/math 目錄下編寫(xiě)了一個(gè) math.c 文件,內(nèi)容如下:
#include <stdio.h> int add( int a , int b ) { return a+b; }
編寫(xiě) Android.mk 文件,內(nèi)容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := dmath LOCAL_SRC_FILES := math.c include $(BUILD_SHARED_LIBRARY)
在 ~/math 目錄下,執(zhí)行 ndk-build 命令,參數(shù)如下:
$ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
或:
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk
NDK_PROJECT_PATH 指定了需要編譯的代碼的工程目錄,這里給出的是當(dāng)前目錄,APP_BUILD_SCRIPT給出的是Android makefile文件的路徑,當(dāng)然,如果你還有 Application.mk 文件的話,則可以添加NDK_APP_APPLICATION_MK=./Application.mk
執(zhí)行完ndk-build命令后,你會(huì)發(fā)現(xiàn)當(dāng)前目錄下,生成了 obj 和 libs 文件夾,這樣,你的libdmath.so動(dòng)態(tài)庫(kù)就已經(jīng)制作完成了,在 libs/armeabi 目錄下。