![](https://img-blog.csdnimg.cn/20200209104109470.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
ndk
文章平均质量分 53
android 调用c代码
爱炒饭
每天进步一点点
展开
-
ndk之C调用java方法以及动态注册
一、静态注册和动态注册ndk开发需要在java层和native层相互调用代码,如何确定native方法与jni函数之间的映射关系呢?这就涉及到jni函数的注册,注册方式有两种:静态注册和动态注册。静态注册采用基于约定的命名规则(Java_开头,后接类的全限定名加下划线,方法名这三个组成部分组成,如下代码所示),可以通过javah或IDE自动生成native方法对应的函数声明。优点是简单;缺点是不灵活,修改java类名或jni方法名时,需要同步修改对应的native函数命名。extern "C"JN原创 2022-01-30 16:55:27 · 2023 阅读 · 0 评论 -
mmap实现进程内写数据和读数据
使用mmap函数可以实现内存映射,腾讯的mmkv就是基于mmap函数实现的匿名共享内存实现的,android中的binder也用到了mmap函数。本文在同一个进程内(进程和子进程间)实现了一个mmap共享内容的demo。首先声明一个mmap java工具类BinderHelper.java//BinderHelper.javapackage com.example.mmapapp;public class BinderHelper { // Used to load the 'native原创 2022-01-07 20:33:45 · 2202 阅读 · 0 评论 -
linux不同signal含义
android ndk开发中老是会报Fatal signal 6 (SIGABRT)或者signal 11 (SIGSEGV),这些信号有啥含义呢?signal有一个编号、名称、事件、默认处理动作四个要素。可以在linux系统中在命令行中输入kill -l显示signal的编号和名称,也可以在/usr/src/linux-headers-xxx/arch/s390/include/uapi/asm/signal.h查看signal的编号和名称。可以在linux系统中在命令行中输入man 7 s.原创 2020-08-15 16:32:32 · 2127 阅读 · 0 评论 -
C++分段拷贝字节
memcpy可以用来拷贝原资源到目标资源的指定长度的数据,但是不能只拷贝中间的一段数据。如果拷贝中间一段的数据,此时可能就需要逐字节拷贝void get_bytes(uint8_t* dst_bytes,uint8_t* source_bytes){ for (int i = 0; i < 4; i++) { for (int j = 0; j < 2; ++j) { *dst_bytes++ = *source_bytes+i*5+j+原创 2020-07-25 17:34:28 · 1125 阅读 · 0 评论 -
C++多线程中的互斥量和互斥锁
C++多线程竞争时经常用到互斥量用std::mutex,它可以单独使用,也可以和互斥锁在一起使用。std::mutex单独使用的话就lock()加锁,用unlock()解锁。为了方便的话可以用用互斥锁lock_guard,lock_guard会在创建时自动加锁,并且在作用域结束时自动析构释放锁。lock_guard只能在创建时加锁,在作用域结束时释放锁,如果想中间释放锁呢,此时就需要加强版的unique_lock了,unique_lock可以随时加锁和解锁,并且可以和条件变量 std::cond原创 2020-07-17 20:54:19 · 527 阅读 · 0 评论 -
ndk获取指定目录下的所有文件名
#include <jni.h>#include <string>#include <android/log.h>#define LOG_TAG "MyCTestLog"#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)#include <iostream>#include <unistd.h>#include <dire.原创 2020-07-20 10:51:36 · 472 阅读 · 0 评论 -
ndk传递二维byte数组
本次以一个简单二维char数组(行数为3)为例演示。native方法声明代码 public native void byteFromJNI(byte[][] buffer);java端调用native代码 byte[][] data=new byte[3][]; data[0]="hello".getBytes(); data...原创 2020-01-28 18:25:29 · 686 阅读 · 0 评论 -
android ndk之CMake
android ndk开发可以通过ndk-build、CMake以及独立工具链三种方式来进行构建,本文主要讲解通过CMake构建ndk。首先下载SDK-Tools中的CMake、LLDB、NDK三个工具。早期as版本创建项目时记得选择Include C++ support选项,后面版本(貌似as3.1以后吧)选择Native C++选项。后面一路next就可以创建带有...原创 2019-04-21 21:28:12 · 200 阅读 · 0 评论