如何優雅地使用安卓NDK
開發環境
基礎的安卓開發環境:Android Studio、SDK、JDK
下載好NDK,自己手動下載或者用SDK工具下載都可以
我使用的版本:Android Studio 1.5.1
配置常用命令
NDK開發比較常用的命令就是生成頭文件、構建so包,在android studio上我們可以先配置好命令,使用起來就很方便了,這是我感覺最贊的地方。
如下圖所示,我添加了三個命令,按加號添加
NDK
其中一個命令的配置詳情如下圖:
javah
命令配置參數:
javah用於生成頭文件
Program:$JDKPath$/bin/javah
Parameters: -encoding UTF-8 -d ../jni -jni $FileClass$
註意:這個命令我加上了-encoding UTF-8指定編碼,你可以改成你工程的編碼。
Working directory: $SourcepathEntry$..\java
ndk-build用於構建so包
Program: 你的NDK目錄\build\ndk-build.cmd
註意:windows用ndk-build.cmd,MAC/Linux用ndk-build
Working directory:$ModuleFileDir$\src\main
ndk-build clean清除so包
Program: 你的NDK目錄\build\ndk-build.cmd
註意:windows用ndk-build.cmd,MAC/Linux用ndk-build
Parameters: clean
Working directory:$ModuleFileDir$\src\main
配置完三個命令之後,你就可以在右鍵菜單中找到這幾個命令,可以直接使用。如下圖演示了生成NdkTest類的頭文件
javah
配置工程
讓工程項目使用NDK,需要做一些配置工作
1
ndk.dir=你的NDK目錄的絕對路徑
在gradle.properties文件中添加如下代碼
1
android.useDeprecatedNdk = true
在module的build.gradle添加如下代碼:
android {
defaultConfig {
ndk {
moduleName "NdkTest"//定義NDKlibrary的名字
//ldLibs "log" 添加log庫,看自己需求
}
}
//這裏設置目錄,默認就這樣寫就可以了
sourceSets {
main {
jni.srcDir "src/main/jni"
jniLibs.srcDir "src/main/libs"
}
}
}
Hello word
按上面的步驟全都配置完之後就可以在Android Studio上享受NDK了。
下面寫一個簡單的返回Hello word字符串的程序。
首先在java中聲明一個本地方法,並加載本地庫,如下:
public class NdkTest
{
static {
System.loadLibrary("NdkTest");
}
public static native String getString();
}
生成它的頭文件(自動生成的名字是包名+類名me_majiajie_ndktest_NdkTest.h),並且創建c/c++文件(NdkTest.cpp),如下:
#include "me_majiajie_ndktest_NdkTest.h"
JNIEXPORT jstring JNICALL Java_me_majiajie_ndktest_NdkTest_getString
(JNIEnv *env, jclass jc)
{
return env->NewStringUTF("Hello word !!!");
}
在jni目錄創建一個文件命名為Android.mk,填入以下內容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkTest
LOCAL_SRC_FILES := NdkTest.cpp
include $(BUILD_SHARED_LIBRARY)
然後在jni目錄創建一個文件命名為Application.mk,填入以下內容
APP_MODULES := NdkTest
APP_ABI := all
註意:Android.mk和Application.mk都是NDK默認的配置文件,關於這兩個文件的詳細介紹可以看官網。
最後生成so包就可以了,記住每次修改C文件都需要重新生成so包:
如何優雅地使用安卓NDK