Android NDK开发
从零到一,介绍整个NDK开发的流程,还有开发过程遇到的一些场景问题及解决方案,一些原理解析等。
chencangui
公棕号:陈大发随笔,程序员陈师兄、8年大厂程序员经历。csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战
展开
-
Android NDK开发(目录)
NDK开发一、第一个NDK工程二、JNI开发基础知识三、JNI开发流程四、JNI调试五、崩溃问题定位及异常保护六、SO的生成七、静态注册和动态注册八、自动生成JNI头文件源码地址...原创 2019-11-20 23:52:33 · 230 阅读 · 0 评论 -
NDK开发(五)--崩溃问题定位及异常保护
使用带符号表的so进行问题排查我们可以利用带符号表的so,将崩溃信息里面的错误地址对应的so 行号进行输出,需要使用到ndk的两个工具进行问题定位。addr2line工具在/Library/Android/sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/darwin-x86_64/bin下面,会有一个x86_64-linux-android-...原创 2019-11-20 08:45:12 · 859 阅读 · 0 评论 -
NDK开发(四)--NDK调试
崩溃日志分析在ndk崩溃的时候,如果是习惯JAVA 开发的同学,可能会毫无头绪,因为其崩溃信息并不像JAVA那样清晰,如果不知道各个部分的错误信息是代表啥意思,可能在出现问题的时候,不知道从何入手解决。上面是一个比较全的NDK崩溃堆栈。基本上一个崩溃日志可以分为三部分:错误信号,寄存器信息,方法调用栈。1、错误信号从错误信号里面,一般会告知,是哪种类型的异常,譬如上面的错误,提...原创 2019-11-20 00:27:25 · 354 阅读 · 0 评论 -
NDK开发(三)--JNI开发流程
一、编写流程1、声明native方法2、生成对应的头文件使用javah命令3、在C/C++文件,引入对应的头文件,并实现对应的方法使用""而非<>的方式引入。否则会报以下异常.error: 'com_canter_ndkdemo3_JNIMethod.h' file not found with <angled> include; use...原创 2019-11-19 00:16:52 · 289 阅读 · 0 评论 -
NDK开发(八)--自动生成JNI头文件
简介在使用NDK开发过程中,对于我们声明的native方法,都是需要进行静态注册的,实现的方法可以是根据类型签名的规范进行实现,也可以使用javah来帮我们自动生成。自己手写的方式,很容易一不小心就写错了,所以一般都是使用javah的方式,我们之前在使用的时候,步骤都是这样子的,javac com/example/Test.javajavah com.example.Test然后将在当前...原创 2019-11-10 18:49:29 · 624 阅读 · 0 评论 -
NDK开发(二)--JNI基础知识
JNI数据类型JNI的数据类型包含两种:基本类型和引用类型。1、基本数据类型Java中的数据类型的对应关系如下:2、引用类型Java中的引用数据类型的对应关系如下:JNI类型签名JNI的类型签名标识一个特定的Java类型,这个类型可以是类也可以是方法或者数据类型。类签名L+包名+类名+;的形式,在编写的时候,需要将全路径里面的"."替换成“/”,例如最常用的java.l...原创 2019-11-09 23:23:58 · 199 阅读 · 0 评论 -
NDK开发(六)--SO的生成
为啥能够生成一个带符号、一个不带符号的so?在执行gradle assembleRelease 之后,我们的工程就会输出三个so 文件。其中有两个是带符号表信息的,另外一个是不带符号表信息的,看到这不禁有些疑惑,其他两个so 是怎样生成的?为啥能够输出不带符号表的so?生成的位置以及相关的设置是在哪里配置的?一开始在研究的时候,以为是ndk-build的时候生成的,一直在找CMakeLis...原创 2019-11-08 00:01:41 · 1355 阅读 · 0 评论 -
NDK开发(一)--第一个NDK工程
介绍1、NDKNDK是Native Development Kit的缩写,它不是一个单独的工具,而是一个包含API、交叉编译器、链接程序、调试工具、构建工具、文档和示例等的综合工具。它的作用是快速开发C/C++动态库,并自动将动态库和应用打包到apk中。2、JNIJNI是Java Native Interface的缩写,即Java 本地接口,作用是Java 跟本地其他语言(C/C++)进行...原创 2019-11-05 23:00:16 · 348 阅读 · 0 评论 -
NDK开发(七)--静态注册和动态注册
简介在开发NDK 工程的时候,我们在java层调用一个native方法的时候,虚拟机怎样知道应该调用到so里面的哪个方法呢?这里就用到了另外一个概念注册,通过注册,可以将指定的native方法和so里面对应的方法绑定起来。注册分为静态注册和动态注册。一般我们用到的都是静态注册。静态注册...原创 2019-11-20 23:29:23 · 336 阅读 · 0 评论