当前位置:网站首页>NDK beginner's study (1)
NDK beginner's study (1)
2022-07-07 14:11:00 【v_ three billion four hundred and eighty-three million six hund】
NDK Knowledge
1. Static registration .
Why should there be static registration , Because java Layer and the so The functions of the layer need to be mapped one by one , You can't get it wrong . Like the following .
public native String stringFromJNI();
How does that correspond .
Is the name of the function through jump , Very regular
Java_com_example_demonndk_MainActivity_stringFromJNI
yes java, Then the package name , Then the class name , Then the name . This is static registration .
JNIEnv env: Like jni Environment , It can be used to call c Layer of java. Or is it java Data type to c Data type of ,c Data to java Data conversion of data type .
The first parameter ,jobject: Like this The pointer , Know which place called so This function of layer
The second parameter ,jclass and jobject The distinction between : What should be declared Native When the method is static , Corresponding parameter jclass
, Because static methods don't rely on object instances , It depends on the class , So the parameter passed is a jclass
type . contrary , If it says Native Method time is not static method time , So the corresponding parameter is jobject
.
extern "C" JNIEXPORT jstring JNICALL Tell me so c By
The static registration function must be an export function JNIEXPORT
LOGD Output Head introduction #include <android/log.h> You can use __android_log_print(3,“moting”,__VA_ARGS__) 了 ;
Simplified can be logd
You can use it directly
logd(“hello”);
Create thread
pthread_t pthread;
//int pthread_create(pthread_t* __pthread_ptr, pthread_attr_t const* __attr, void* (*__start_routine)(void*), void*);
pthread_create(&pthread, nullptr,myThread, nullptr);
logd ("+++++++");
First there is a thread variable , Then create the thread .
Build a function above
void* myThread(void* a){
for (int i = 0; i <9; ++i) {
logd("myThread%d",i);
}
pthread_exit(0);
}
added pthread_join(pthread, nullptr) Is to execute in the thread first , Then execute the following code .
Send a number into the thread
pthread_t pthread;
int num=4;
//int pthread_create(pthread_t* __pthread_ptr, pthread_attr_t const* __attr, void* (*__start_routine)(void*), void*);
pthread_create(&pthread, nullptr, myThread, &num);
pthread_join(pthread, nullptr);
logd ("===============");
Pass it in with a pointer
void* myThread(void* a){
int *num= static_cast<int *>(a);
for (int i = 0; i <*num; ++i) {
logd("myThread%d",i);
}
pthread_exit(0);
}
Pass a structure into the thread
Create a thread
struct moting{
std::string name;
int age;
bool sex;
};
moting aaa;
aaa.name="moting";
aaa.age=3;
aaa.sex= true;
pthread_t pthread;
//int pthread_create(pthread_t* __pthread_ptr, pthread_attr_t const* __attr, void* (*__start_routine)(void*), void*);
pthread_create(&pthread, nullptr, myThread, &aaa);
pthread_join(pthread, nullptr);
logd ("===============");
Then pass the pointer .
c Language return values are rarely used ,
so Execution timing of various functions in
init -》 init_array-》 jni_onload
jnionload Rewriting of
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved){
JNIEnv *env= nullptr;
if (vm->GetEnv((void **)&env,JNI_VERSION_1_6)!=JNI_OK){
logd("getenv filed");
}
logd("JNI_Onload%p",env);
return JNI_VERSION_1_6;
}
One so There can be no JNI_ONLOAD, For example, create a new thread . Must return JNI Version of
JNIENV and JNIVm The difference between
JNIENV and JNIVm, Defines a global variable JavaVM* globalVM;
How to use env call vm, The first argument to the function is env
JavaVM *vm1;
env->GetJavaVM(&vm1);
globalVm=vm1;
vm1 It's worth it
perhaps JNI_OnLoad The first parameter of
- vm Get env
In the main route
if (vm->GetEnv((void **)&env,JNI_VERSION_1_6)!=JNI_OK){
logd("getenv filed");
}
In the sub thread
边栏推荐
- Leetcode simple question sharing (20)
- 2022-7-6 初学redis(一)在 Linux 下下载安装并运行 redis
- Advanced Mathematics - Chapter 8 differential calculus of multivariate functions 1
- ndk初学习(一)
- [fortress machine] what is the difference between cloud fortress machine and ordinary fortress machine?
- AI talent cultivation new ideas, this live broadcast has what you care about
- call undefined function openssl_ cipher_ iv_ length
- gvim【三】【_vimrc配置】
- 一个简单LEGv8处理器的Verilog实现【四】【单周期实现基础知识及模块设计讲解】
- c#利用 TCP 协议建立连接
猜你喜欢

带你掌握三层架构(建议收藏)

Evolution of customer service hotline of dewu

Help tenants

2022-7-6 使用SIGURG来接受外带数据,不知道为什么打印不出来

常用数字信号编码之反向不归零码码、曼彻斯特编码、差分曼彻斯特编码

"Song of ice and fire" in the eleventh issue of "open source Roundtable" -- how to balance the natural contradiction between open source and security?

Sliding rail stepping motor commissioning (national ocean vehicle competition) (STM32 master control)

手把手教会:XML建模

Xshell connection server changes key login to password login

2022-7-6 Leetcode27. Remove the element - I haven't done the problem for a long time. It's such an embarrassing day for double pointers
随机推荐
Battle Atlas: 12 scenarios detailing the requirements for container safety construction
Use day JS let time (displayed as minutes, hours, days, months, and so on)
3D detection: fast visualization of 3D box and point cloud
Data flow diagram, data dictionary
请问,在使用flink sql sink数据到kafka的时候出现执行成功,但是kafka里面没有数
Excuse me, when using Flink SQL sink data to Kafka, the execution is successful, but there is no number in Kafka
SSRF vulnerability file pseudo protocol [netding Cup 2018] fakebook1
Seven propagation behaviors of transactions
AutoCAD - how to input angle dimensions and CAD diameter symbols greater than 180 degrees?
Regular expression integer positive integer some basic expressions
SAKT方法部分介绍
2022-7-6 Leetcode 977. Square of ordered array
Excuse me, why is it that there are no consumption messages in redis and they are all piled up in redis? Cerely is used.
Did login metamask
请问指南针股票软件可靠吗?交易股票安全吗?
Environment configuration
When FC connects to the database, do you have to use a custom domain name to access it outside?
[high frequency interview questions] difficulty 2.5/5, simple combination of DFS trie template level application questions
c#利用 TCP 协议建立连接
Parameter keywords final, flags, internal, mapping keywords internal