下载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++