設置NDK的編譯選項 Application.mk 和 Android.mk
Android NDK編譯選項設置
利用NDK生成.so可以通過Android Studio,也可以通過命令ndk-build來自己手動生成。
這里講一下用ndk-build手動生成的過程
一:下載NDK開發(fā)包
Android官方下載NDk
下載完NDK后,解壓到自己想要的路徑中
二:配置NDK系統(tǒng)變量
打開終端運行:
sudo gedit /etc/profile
在profile文件末尾添加內(nèi)容:
#set NDK env
export NDK_HOME=/home/echosea/Desktop/Android/android-ndk-r12
export PATH=$NDK_HOME:$PATH
其中NDK_HOME指向的路徑是自己解壓出來的NDK路徑
然后重啟一下電腦,重啟后打開終端使用命令
echo $NDK_HOME
echo $PATH
看到自己配置的內(nèi)容就表示設置好了
三:創(chuàng)建Application.mk和Android.mk文件
之后到自己想要編譯的文件目錄中創(chuàng)建 Application.mk 和 Android.mk
Android.mk文件,用來指定源碼編譯的配置信息,例如工作目錄,編譯模塊的名稱,參與編譯的文件等,大致內(nèi)容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndk_load
LOCAL_SRC_FILES := myso.cpp
# 添加對log庫的支持
LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog
# 注:若生成static的.a,只需添加 LOCAL_LDLIBS:=-llog
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
- LOCAL_PATH:設置工作目錄,而my-dir則會返回Android.mk文件所在的目錄。
- CLEAR——VARS:清除幾乎所有以LOCAL——PATH開頭的變量(不包括LOCAL_PATH)。
- LOCAL_MODULE:用來設置模塊的名稱。
- LOCAL_SRC_FILES:用來指定參與模塊編譯的C/C++源文件名。
- BUILD_SHARED_LIBRARY:作用是指定生成的靜態(tài)庫或者共享庫在運行時依賴的共享庫模塊列表。
Application.mk文件,不一定要有,可以用來配置編譯平臺相關內(nèi)容,常用的估計只是APP_ABI字段,它用來指定我們需要基于哪些CPU架構(gòu)的.so文件,當然你可以配置多個平臺(如果ndk-build 沒有指定 Application.mk,則默認編譯出所有平臺的.so文件):
APP_ABI := armeabi armeabi-v7a x86 mips
這個文件還可以配置Android.mk文件
APP_BUILD_SCRIPT := Android.mk
四:調(diào)用ndk-build
之前我直接執(zhí)行 ndk-build 沒有帶任何參數(shù),結(jié)果報錯了,我也第一次用ndk-build,有點困惑,竟然忘了要去看文檔說明
然后網(wǎng)上搜了一下
You need to specify 3 things.
NDK_PROJECT_PATH - the location of your project
NDK_APPLICATION_MK - the path of the Application.mk file
APP_BUILD_SCRIPT - the path to the Android.mk file
These are needed to override the default values of the build script, which expects things to be in the jni folder.
When calling ndk-build use
ndk-build NDK_PROJECT_PATH=/path/to/proj NDK_APPLICATION_MK=/path/to/Application.mk
In Application.mk add
APP_BUILD_SCRIPT := /path/to/Android.mk
然后通過以下命令就生成成功了
ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk
這里要注意一下,如果ndk-build沒有指定NDK_APPLICATION_MK參數(shù),則需要指定APP_BUILD_SCRIPT參數(shù)
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk
參考連接:
使用AndroidStudio進行NDK開發(fā)
Android問題集錦之四十:Android NDK: Could not find application project directory