Android NDK是Android軟件開發包(SDK)的相關工具集,用來擴展Android SDK的功能,從而使開發人員可以使用機器代碼生成的編程語言(如C、C++和彙編語言)實現一些對代碼性能要求較高的模塊,並將這些模塊嵌入到Android應用程序中使用。java
Android NDK是Android軟件開發包(SDK)的相關工具集,用來擴展Android SDK的功能,從而使開發人員可以使用機器代碼生成的編程語言(如C、C++和彙編語言)實現一些對代碼性能要求較高的模塊,並將這些模塊嵌入到Android應用程序中使用。android
NDK 不適用於大多數初學的 Android 編程者,對許多類型的 Android 應用沒什麼價值。 由於它不可避免地會增長開發過程的複雜性,因此一般不值得使用。 但若是您須要執行如下操做,它可能頗有用:c++
Android NDK不是一個單獨的工具,他是一個包含API、交叉編譯器、連接程序、調試器、構建工具、文檔和示例應用程序的綜合工具集。如下是Android NDK的一些主要組件:shell
Android NDK組件都被安裝在NDK的根目錄下,下面介紹一些重要的文件和子目錄。編程
ndk-build:ndk-build 腳本用於在 NDK 中心啓動構建腳本,這些腳本:架構
在java中聲明Native方法編程語言
public native String hello();
在jni目錄中實現原生方法工具
在jni目錄中建立c/c++文件,並實現對應的方法。性能
#include <jni.h> #include <stdio.h> #include <stdlib.h> extern "C" JNIEXPORT jstring JNICALL Java_cn_com_codeteenager_ndkone_MainActivity_hello(JNIEnv *env, jobject obj) { return env->NewStringUTF("Hello World"); }
添加Android.mk文件。gradle
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := helloworld LOCAL_SRC_FILES := HelloWorld.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) #LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
添加Application.mk文件。
# 指定生成哪些cpu架構的庫 APP_ABI := armeabi-v7a # 此變量包含目標 Android 平臺的名稱 APP_PLATFORM := android-22
經過命令行打開jni目錄,而後執行ndk-build命令腳本進行編譯。編譯後的項目結果如圖所示。
Android NDK的構建系統是基於GUN Make的。該構建系統的主要目的是使開發人員可以用很短的構建文檔來描述原生的Android應用程序。
上述Android NDK的開發流程中經過配置Android.mk來編譯是其中的一種方式,還有兩種方式。
這種方式簡化了編寫Android.mk文件,跟上述流程同樣,只是不須要編寫Android.mk和Application.mk,可是須要添加兩樣配置。
在主Module的build.gradle的defaultConfig裏添加
ndk{ moduleName 'hello' abiFilter 'armeabi-v7a' }
注意:這種方式沒法再Android Studio3.0以上使用,只能在3.0如下使用,3.0及以上採用cmake來編譯生成so文件。
在Android Studio2.2及以上版本中,能夠使用cmake插件來編譯c庫,這也是最新的ndk開發方式。首先你須要在SDK Tools中下載CMake和LLDB這兩個組件,固然ndk也是必須的。
當你安裝好上述兩個組件後,你能夠使用Android Studio建立支持C/C++的新項目。步驟以下:
在嚮導的 Customize C++ Support 部分,您能夠使用下列選項自定義項目:
-fexceptions
標誌添加到模塊級 build.gradle
文件的 cppFlags
中,Gradle 會將其傳遞到 CMake。-frtti
標誌添加到模塊級 build.gradle
文件的 cppFlags
中,Gradle 會將其傳遞到 CMake。點擊 Finish,建立成功,項目結構以下圖所示。
當你建立完成項目後點擊Android Studio中Build->Make Project,系統會幫你構建完成後,你就能夠在相對應Module下的build->intermediates->cmake下找到so庫。