下載NDK開發工具
個人習慣開發工具單獨下載,並配置環境變量。因爲可能會有版本兼容等問題。如果你不想的話,可以直接在AndroidStudio中進行下載。
我的話只下載這兩個,偷懶的可以把NDK也勾選上。
LLDB:Low Level Debugger 調試工具
CMake:跨平臺的自動化構建系統
現在都不用Android.mk進行構建了。
- 將下載好的ndk包進行解壓,放置到自己的存放目錄
- 配置環境變量,並在AndroidStudio配置對應目錄
export NDK_HOME=/Users/{username}/xxx/xxx/android-ndk-r21
export PATH=${PATH}:${NDK_HOME}
使用以下命令使我們的配置生效
source ~/.bash_profile
用ndk-build命令測試是否配置成功
AndroidStudio中配置NDK
並在根目錄下的gradle.properties中添加android.useDeprecatedNdk=true
創建JNI目錄,及so庫文件生成的目錄並在AndroidStudio中進行配置
android {
defaultConfig {
...
ndk{
// 模塊名稱,既生成的so的名稱
moduleName = "fh"
// 支持的cpu架構
abiFilters("armeabi-v7a")
}
}
signingConfigs {
...
}
sourceSets {
main {
// 源文件目錄
jni.srcDirs = ['src/main/cpp']
jniLibs.srcDirs = ['src/main/cpp/libs']
}
}
externalNativeBuild {
cmake {
// cmake配置文件位置
path "CMakeLists.txt"
}
}
buildTypes {
...
}
}
創建對應的配置文件及源文件
在配置文件位置創建cmake配置文件CMakeLists.txt
# cmake最小支持版本
cmake_minimum_required(VERSION 3.4.1)
# 創建一個全局變量
file(GLOB source src/main/cpp/*.c src/main/cpp/*.cpp)
add_library(
# 庫名稱
fh
# 庫類型 SHARED:動態庫,STATIC:靜態庫
SHARED
# 源文件
${source})
# 引入頭文件的目錄
include_directories(src/main/cpp/include/)
find_library(
log-lib
log)
# 鏈接 fh:目標庫 後面的是需要依賴的庫
target_link_libraries(
fh
${log-lib})
在app/src/main/cpp下創建一個fh.cpp文件
#include <jni.h>
#include <stdio.h>
#include <android/log.h>
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, "FH-LOG", __VA_ARGS__)
extern "C"
JNIEXPORT jstring JNICALL
Java_com_wxfjava_struggle_MainActivity_hello(JNIEnv *env, jobject thiz, jstring name) {
char *cname = (char *) env->GetStringUTFChars(name, 0);
char result[50];
sprintf(result, "Hello %s,I am JNI.", cname);
LOGI("獲得android參數:%s", cname);
env->ReleaseStringUTFChars(name, cname);
return env->NewStringUTF(result);
}
Java中的部分代碼
private TextView tvInfo;
static {
System.loadLibrary("fh");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = findViewById(R.id.tv_info);
tvInfo.setText(hello("Android"));
}
native String hello(String name);
運行結果
CMake配置文件高亮插件
使用AndroidStudio創建NDK項目
這個就比較簡單了,直接往下拉找到如下圖,開始創建就好了。
老版貌似是勾選☑️Support C++