Android11.0Frameworks中添加jni并调用自己的动态库
Frameworks中添加jni
添加Test.java文件 文件路径: frameworks/base/core/java/com/yjz/demo/Test.java
public class Test {
private native int add ( int a, int b) ;
private native int sub ( int a, int b) ;
}
添加com_yjz_demo_Test.cpp 文件路径:frameworks/base/core/jni/com_yjz_demo_Test.cpp
#include "core_jni_helpers.h"
#include "my_math.h"
#include < nativehelper/ JNIHelp. h>
#include < utils/ Log. h>
namespace android {
static jint com_yjz_demo_Test_add ( JNIEnv * env, jobject thiz, jint a, jint b ) {
return my_add ( a, b) ;
}
static jint com_yjz_demo_Test_sub ( JNIEnv * env, jobject thiz, jint a, jint b ) {
return my_sub ( a, b) ;
}
static const char* const kClassPathName = "com/yjz/demo/Test" ;
static JNINativeMethod gMethods[ ] = {
{
"add" , "(II)I" , ( void * ) com_yjz_demo_Test_add} ,
{
"sub" , "(II)I" , ( void * ) com_yjz_demo_Test_sub} ,
} ;
int register_com_yjz_demo_Test ( JNIEnv* env ) {
return RegisterMethodsOrDie ( env, kClassPathName, gMethods, NELEM ( gMethods) ) ;
}
}
AndroidRuntime中进行注册 文件路径: frameworks/base/core/jni/AndroidRuntime.cpp
extern int register_com_yjz_demo_Test ( JNIEnv * env) ;
static const RegJNIRec gRegJNI[ ] = {
REG_JNI ( register_com_yjz_demo_Test) ,
} ;
向Android.bp中添加编译源文件 文件路径: frameworks/base/core/jni/Android.cpp
target : {
android : {
src : [
"com_yjz_demo_Test.cpp" ,
] ,
shared_libs : [
"libmymath" ,
] ,
} ,
} ,
添加动态库
创建test库 路径:vendor/yjz/test
添加my_math.h文件 文件路径: vendor/yjz/test/my_math.h
#ifndef ANDROID_MY_MATH_H
#define ANDROID_MY_MATH_H
int my_add ( int a, int b) ;
int my_sub ( int a, int b) ;
#endif
添加my_math.cpp文件 文件路径: vendor/yjz/test/my_math.cpp
#include < cstdio>
#include "my_math.h"
int my_add ( int a, int b )
{
printf ( "Hello Android %d \n" , 55 ) ;
return a + b;
}
int my_sub ( int a, int b )
{
printf ( "Hello Android %d \n" , 66 ) ;
return a - b;
}
添加Android.bp 文件路径: vendor/yjz/test/Android.bp
cc_library_shared {
name : "libmymath" ,
srcs : [
"my_math.cpp"
] ,
export_include_dirs : [ "." ] ,
cflags : [
"-Wall" ,
"-Wextra" ,
"-Werror" ,
"-Wno-unused-parameter" ,
] ,
}
添加权限
如果Test.java中有方法提供给上层app调用,需要在greylist文件中添加包名 文件路径: frameworks/base/config/hiddenapi-greylist-packages.txt
com. yjz. demo