基础
安装android studio 然后配置好 ndk 。
这俩个需要调勾
image.png
创建项目
image.png
即可得一个demo 项目。
java 和kotlin 中的使用
image.pngCMakeLists.txt
内容
cmake_minimum_required(VERSION 3.18.1)
project("app")
add_library(
app
SHARED
native-lib.cpp
)
find_library(
log-lib
log
)
target_link_libraries(
app
${log-lib}
)
#include <jni.h>
#include <string>
/**
* 返回 jstring
* @param env
* @return jstring
*/
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_app_CppUtils_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
/**
* 返回 jint
* @param env
* @return jint
*/
extern "C"
JNIEXPORT jint JNICALL
Java_com_example_app_AppCpp_add(JNIEnv *env, jobject thiz, jint a, jint b) {
return a + b;
}
java 中使用
package com.example.app;
/**
* java 版本
*/
public class AppCpp {
static {
System.loadLibrary("app");
}
public native int add(int a, int b);
}
kotlin 中的版本
package com.example.app
/**
*
* kotlin 版本
*
*/
object CppUtils {
init {
System.loadLibrary("app")
}
external fun stringFromJNI(): String
}
最重要的是包名 要正确。。。
打包可以生产出
image.png
我感觉不全呢发现了一个问题
问题原因
当前(20200702)NDK基本为20甚至21版本,而根据Android官网AndroidABIs页面提示,从v17开始就不再支持armeabi
、mips
等架构
怎么用
image.png看图复制到项目里面
配置build里面参数
defaultConfig {
.......
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}
sourceSets {
main {
assets {
jniLibs.srcDirs = ['libs']
}
}
}
其他内容我删除了。然后再用
这个包里面内容
image.png image.png
我上面的demo 内容是
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_app_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
这里的包名和很重要
Java_com_example_app_MainActivity_stringFromJNI(
网友评论