Android jni
type
Post
summary
快速新建/新增 C++ 代码到 Android 项目
status
Published
author
slug
android-jni
tags
Android
C++
updateAt
Jul 19, 2023 03:20 AM
thumbnail
date
Jul 18, 2023
配置项目
不论是已有的项目加入 jni 支持还是直接初始化一个支持 jni 特性的项目,ndk 主要有以下一些关键的配置:
gradle 的关键配置
- project 的
gradle.properties
需要声明android.useDeprecatedNdk=true
- 需要在
local.properties
中声明 ndk toolchains 的位置
- 引入的 Module 下需要在
build.gradle
中的defaultConfig
中声明 ndk 的配置项:
ndk {
moduleName 'ndkModuleName'
abiFilter 'armeabi-v7a'
}
C++ 源码
- 一般放置在工程的 java 文件的同级目录下
- CMakeLists.txt 构建脚本
- 一般放置在引入的 Module 下的 src 目录下
- 编写内容:
project(projectName)
cmake_minimum_required(VERSION 3.4.1)
add_library(
HelloJNILib # 库的名称
SHARED # SHARED:动态库、STATIC:静态库
src/main/jni/HelloJNI.cpp # 源文件,可以是多个
)
build.gradle
中配置 CMakeLists.txt 的路径externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
静态引用 JNI 库:
System.loadLibrary("HelloJNILib")
JNI native 方法及调用
kotlin:
external fun magicNumberFromJNI(): String?
C++:
extern "C"
JNIEXPORT jstring JNICALL
Java_com_peelson_learnjourneydemo_MainActivity_magicNumberFromJNI(JNIEnv *env, jobject thiz) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
需要知道的
ndk-build
是一种比CMake
更快的构建工具,但仅支持 Android 且不可混用。