Ndk 生成.so(win7)
阿新 • • 發佈:2019-02-03
前提:
1.安裝ndk
2.系統的環境配置
在系統的環境變數中新增變數ANDROID_NDK
內容為ndk的安裝目錄,我的是
C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle
之後在path中新增%ANDROID_NDK%;
3、在studio的file->Project Structure中配置ndk的安裝路徑
也可以在local.properties中配置路徑
4、配置三個常用命令,其它不需要
5、配置gradle.properties
新增
android.useDeprecatedNdk=true
1、.mk編譯
1、生成標頭檔案
新建類,寫native方法,右擊類檔案NDK->javah,生成jni目錄,目錄下有標頭檔案
2、在jni下新建一個.cpp檔案,進行函式實現
#include "com_tcxy_androidndk_Operator.h"
JNIEXPORT jstring JNICALL Java_com_tcxy_androidndk_Operator_getName(JNIEnv * env, jobject obj)
{
return env->NewStringUTF("Hello word !!!");
}
3、寫兩個.mk檔案
Android.mk內容為
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mathwork
LOCAL_SRC_FILES := mathOpeartion.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk內容為
APP_ABI := all
然後右擊jni檔案選擇NDK->ndk-build,生成libs和obj目錄
4、修改module的build.gradle
在android{}內部新增
sourceSets {
main {
jni.srcDirs = [] //禁止ndk自動編譯
jniLibs.srcDirs = ['src/main/libs'] //更改jniLibs預設地址
}
}
2、ndk自動編譯
主要思想就是把.mk的任務交給gradle配置來實現。
先重做前文的1、2步
3、修改module的build.gradle
在defaultConfig {}內部新增
ndk {
moduleName "mathwork" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫
}
在android{}內部新增
sourceSets {
main {
jni.srcDirs = ['src/main/jni'] //可直接刪除這行,系統預設位置就是src/main/jni
jniLibs.srcDirs = ['src/main/libs']
}
}
make 之後在app\build\intermediates\ndk\debug 中可以找到庫檔案