
Android NDK开发
文章平均质量分 61
帮助初学者快速掌握Android NDK开发,包括NDK环境搭建、工具使用、调试、JNI和Java相互调用。
猴子搬来的救兵Castiel
关注安卓安全与安卓研发
展开
-
Android NDK学习笔记1-基础知识篇
Android NDK(Native Development Kit )是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。同时,Android NDK对于Android SDK只是个组件,它可以帮我们生成的JNI兼容的共享库可以在大于Android1.5平台的ARM CPU上运行,将生成的共享库拷贝到合适的程序工程路径的位置上,以保证它们自动的添加到你的apk包中。原创 2016-09-22 16:23:53 · 4838 阅读 · 1 评论 -
Android NDK学习笔记2-环境搭建篇
第一步.安装JDK和配置Java环境变量Java环境配置对于每一位开发者来说早已轻车熟路,相信不需要我再详细说明,这一过程略过,如果不了解的朋友可以自行百度。第二步.下载Android NDK的安装包1.在Google的官方网站下载Android NDK的安装包 下载地址是http://developer.android.com/sdk/ndk/index.html,打开下载页面后选择的下载文件为原创 2016-09-22 17:12:23 · 3364 阅读 · 2 评论 -
Android NDK学习笔记3-入门案例篇
上篇文章我们安装了NDK系统,在NDK系统文件中包含samples文件夹,打开该文件夹,我们发现里面有大量的案例项目,这里我们通过Eclipse导入一个名为hello-jni的项目导入成功后,我们可以看到项目目录如下:然后,我们逐个学习案例源码1.声明Native方法 打开com.example.hellojni目录下的HelloJni.java package com.example.helloj原创 2016-09-22 17:49:41 · 3139 阅读 · 0 评论 -
Android NDK学习笔记4-Android.mk篇
前段时间读了《Pro Android C++ with the NDK》这本书,书中对于Android.mk的讲解非常细致,这里我把该章节的读书笔记记录下来,方便大家学习。 Android.mk是一个向Android NDK构建系统描述NDK项目的GUN Makefile片段。它是每一个NDK项目的必备组件,构建系统希望它出现在jni子目录中。上图就是Android.mk的基本文件格原创 2016-09-18 19:41:31 · 7826 阅读 · 1 评论 -
Android NDK学习笔记5-JNI数据类型总结
Java中有两种数据类型,分别是基本数据类型和引用类型。JNI基本数据类型java的基本数据类型可以直接与C/C++的响应基本数据类型映射:这些基本数据类型可以在Native层直接使用。JNI引用类型与基本数据类型不同,引用类型对原生方法是不透明的,它们的内部数据结构并不直接想原生代码公开。注:改进的UTF-8编码 JNI使用改进的UTF-8字符串来表示不同的字符类型。Java使用UTF-原创 2016-09-19 12:33:23 · 2318 阅读 · 0 评论 -
Android NDK学习笔记6-JNI对引用数据类型的操作
字符串操作 JNI把Java字符串当成引用类型来处理,JNI提供了java字符串与C字符串之间相互转换的必要函数。因为java字符串对象是不可变的,因此JNI不提供任何修改现有的java字符串内容的函数。 ● 创建字符串 可以在原生代码中用NewString函数构建Unicode编码格式的字符串实例,用NewStringUTF函数构建UTF-8编码格式的字符串实例。原创 2016-09-22 18:10:03 · 2267 阅读 · 0 评论 -
Android NDK学习笔记7-JNI的NIO操作
JNI提供了在原生代码中使用NIO(I/O)的函数,与数组操作相比更适合原生代码和java应用程序之间传送大量数据。 ● 创建直接字节缓冲区 原生代码可以创建java应用程序使用的直接字节缓冲区,该过程是以提供一个原生C字节数组为基础,例如:unsigned char* buffer = (unsigned char*) malloc(1024) …… jobject directBuff原创 2016-09-22 18:15:55 · 2455 阅读 · 0 评论 -
Android NDK学习笔记8-JNI的访问域
java有两类域:实例域和静态域。类的每个实例都有自己的实例域副本,而一个类的所有实例共享同一个静态域。 JNI提供了访问两类域的函数,例如:public class JavaClass { // 实例域 private String instanceField = "Instance Field "; // 静态域 private static String staticField = "Sta原创 2016-09-22 18:21:41 · 2038 阅读 · 0 评论 -
Android NDK学习笔记9-JNI调用Java方法
与域一样,java中有两类方法:实例方法和静态方法。JNI提供访问两类方法的函数,例如:public class JavaClass { // 实例方法 private String instanceMethod(){ return "Instance Method"; } // 静态方法 private static String staticMethod(){ return "StaticMet原创 2016-09-22 18:33:59 · 4213 阅读 · 0 评论 -
Android NDK学习笔记10-JNI域和方法描述
获取域ID和方法ID均分别需要域描述符合方法描述符,域描述符合方法描述符都可以通过下表中的Java类型签名映射获得。原创 2016-09-20 23:36:16 · 1808 阅读 · 0 评论 -
Android NDK学习笔记11-JNI异常处理
捕获异常 JNIEnv接口提供了一组与异常相关的函数集,在运行过程中可以使用java类查看这些函数。public class JavaClass{ // 抛出方法 private void throwingMethod() throws NullPointerException{ throw new NullPointerException("Null Pointer"); } } 调用原创 2016-09-20 23:31:56 · 2049 阅读 · 0 评论 -
Android NDK学习笔记12-JNI日志打印
在Java环境中我们使用JNI时可以使用printf函数打印,但是Android环境下使用JNI,printf函数就无效了,而我们使用IDE开发工具中的LogCat视图以及Console视图里也没有任何输出。其实,Android NDK完全支持JNI本地日志调试。为了使用日志函数,我们可以按照如下步骤实现: 1.原生代码需要先包含头#includeLOCAL_PATH := $(call my-d原创 2016-09-20 23:21:51 · 8851 阅读 · 0 评论 -
Android NDK学习笔记13-JNI的局部和全局引用
局部引用 大多数JNI函数返回局部引用。局部引用不能在后续的调用中被缓存及重用,主要是因为它们的使用期限仅限于原生方法,一旦原生函数返回,局部引用即被释放。例如,使用FindClass函数返回一个局部引用,当原生方法返回时,它被自动释放,也可以用DeleteLocalRef函数显示释放原生代码:jclass clazz clazz = (*env)->FindClass(env,"java/l原创 2016-09-22 18:40:59 · 2058 阅读 · 0 评论 -
Android NDK学习笔记14-JNI的线程
JNI技术的一些约束: 1.只在原生方法执行期间及正在执行原生方法的线程环境下局部引用时有效的,局部引用不能在多线程间共享,只有全局引用可以被多个线程共享。 2.被传递给每个原生放的的JNIEnv接口指针在与方法调用相关的线程中也是有效的,它不能被其他线程缓存或使用。同步 JNI的监视器允许原生代码利用Java对象同步,虚拟机保证存取监视器的线程能够安全执行,而其他线程等待监视器对象编程可原创 2016-09-22 18:45:14 · 2405 阅读 · 0 评论 -
Android NDK学习笔记15-配置AndroidStudio
现在大家越来越多的使用AndroidStudio进行Android开发,那么今天就和大家一起交流一下AndroidStudio开发NDK的配置方法。AndroidStudio配置NDK通常我们有两种方法实现配置1手动方式配置:1.在Google的官方网站下载Android NDK的安装包 下载地址是http://developer.android.com/sdk/ndk/index.html,打原创 2016-09-23 15:57:17 · 4540 阅读 · 3 评论