随笔分类 -  NDK

基于 Android NDK 的学习之旅-----资源释放
摘要:基于 Android NDK 的学习之旅-----资源释放 做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉。因为我是学Java 开始的,所以对主动释放内存没多大概念(GC直接帮忙回收),后查询原因才知道是因为JNI 有些对象内存未释放引起。下面介绍下相关的资源释放。JNI 编程实现了 native code 和 Java 程序的交互,因此 JNI 代码编程既遵循 native code 编程语言的编程规则,同时也遵守 JNI 编程的文档规范。在内存管理方面,native code 编程语言本身的内存管理机制依然要遵循,同时也要考虑 JNI 编程的内存管理。 阅读全文

posted @ 2011-08-21 14:29 陆晓峰 阅读(10093) 评论(0) 推荐(2) 编辑

基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码)
摘要:基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着上篇文章继续讲。主要关于引用类型的数据传输,本文将介绍字符串传输和自定义对象的传输。1、主要流程1、String 字符串传输a)上层定义一个native的方法,需要一个String参数,返回一个Stringb)JNI对应上层的方法,打印出上层传输下来的String数据,并返回处理String数据c)上层 收到 native 方法 返回的 值,在UI中显示出来2、自定义对象的传输a)自定义一个对象Personb)上层定义一个native方法,参数Person,返回值Personc)JNI接收对象,打印出相关信息数据d 阅读全文

posted @ 2011-08-20 12:55 陆晓峰 阅读(8261) 评论(1) 推荐(0) 编辑

基于 Android NDK 的学习之旅-----数据传输一(基本数据类型和数组传输)(附源码)
摘要:基于 Android NDK 的学习之旅-----数据传输(基本数据类型和数组传输) 之前的一些文章都有涉及到上层和中间层的数据传输,简单来说,也就是参数和返回值的使用。因为中间层要做的最多的也就是数据传输与转换,下面来介绍下这方面的知识。 数据传输可分为 基本数据类型传输 和 引用数据类型的传输 , 因为数组传输也比较特别(其实数组也是引用类型),所以这里也专门分出来讲讲。1、主要流程1、基本数据类型的传输a)上层定义一个native的方法,需要一个int 参数 ,返回一个int值b)JNI 对应 上层的方法 , 打印出 上层 传输下来的 int数据,并返回 int数据c)上层 收到 nat 阅读全文

posted @ 2011-08-19 11:26 陆晓峰 阅读(13195) 评论(4) 推荐(2) 编辑

基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名(附源码)
摘要:基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名 刚接触JNI 的 兄弟在看一些demo的时候 发现有类似与“([Ljava/lang/String;)V”的东西的时候肯定会很“蛋疼”,完全不懂这是啥东西,怎么来的,有啥用处? 今天就讲讲这个“蛋疼”的东西把,俗称 方法签名直接来个Demo 把 :观察下面四个方法对应的签名 publicvoid test(){} ()V publicvoid test1(int i){} (I)V publicint test2(){ return 1;} ()I publicint test3(int i) { ret... 阅读全文

posted @ 2011-08-18 08:56 陆晓峰 阅读(6988) 评论(3) 推荐(4) 编辑

基于 Android NDK 的学习之旅----- C调用Java(附源码)
摘要:基于 Android NDK 的学习之旅----- C调用Java许多成熟的C引擎要移植到Android 平台上使用 , 一般都会 提供 一些接口, 让Android sdk 和 jdk 实现。下文将会介绍 C 如何 通过 JNI 层调用 Java 的静态和非静态方法。1、主要流程1、新建一个测试类TestProvider.javaa)该类提供了2个方法b)一个静态的方法,一个非静态的方法2、JNI中新建Provider.ca)该文件中需要把Java中的类TestProvider映射到C中b)把TestProvider的两个方法映射到C中c)新建TestProvider 对象d)调用两个方法3 阅读全文

posted @ 2011-08-17 08:53 陆晓峰 阅读(37949) 评论(19) 推荐(6) 编辑

基于 Android NDK 的学习之旅-----Java 调用C(附源码)
摘要:基于 Android NDK 的学习之旅-----Java 调用C随便谈谈为什么要Java调用C 吧:我认为:1、 有些公司开发Android项目的时候, 许多组件功能可能是C中已经实现了,所以我们没必要同样的功能又在java中实现一遍。例如我之前做的一个项目,公司C引擎已经很成熟了,所以直接在java中封装好接口,由C去实现。2、C的速度一般是java的10-20倍把,有些对速度要求高的就需要在C中实现。例如我以前在Android项目中有要求批量(10000++)生成MD5的值,由于测试对java中直接生成的效果不满意,所以后面就换成C去实现了。3、 …..不罗嗦了,直接开始吧。1、主要流程 阅读全文

posted @ 2011-08-15 22:46 陆晓峰 阅读(14413) 评论(4) 推荐(4) 编辑

基于 Android NDK 的学习之旅-----JNI 数据类型
摘要:基于 Android NDK 的学习之旅-----JNI 数据类型经典老套流程,学编程语言东西,先学它最基础的数据类型,JNI也是如此。JNI 定义了一系列基本数据类型和引用数据类型与java想对应。1、基本数据类型下面一张表是描述了 Java 基本数据类型和JNI中基本数据类型的相对应关系已经占用空间大小。随便观察就能发现,其实就基本数据类型而已,JNI基本数据类型只是比Java基本数据类型前多了个’j’而已当然,JNI中还有个Java中没有的jsize,定义如下:typedef jint jsize;其实jsize整型是用来描述基本指标和大小,没有什么神秘的。2、引用数据类型JNI 引用类 阅读全文

posted @ 2011-08-15 13:55 陆晓峰 阅读(6657) 评论(0) 推荐(3) 编辑

基于 Android NDK 的学习之旅-----JNI LOG 打印(附源码)
摘要:基于 Android NDK 的学习之旅-----JNI LOG 打印程序都是调出来的。下面我介绍下JNI层的log打印方法的使用,类似与Android sdk提供的log1、Android 应用层 MainActivity.java主要功能代码a)静态载入 So 库 b)声明本地方法c)调用本地方法代码附有注释如下:public classMainActivity extends Activity { //也就是你mk配置文件中的 LOCAL_MODULE := NDK_02 private static final String libSoName ="NDK_02"; 阅读全文

posted @ 2011-08-14 18:34 陆晓峰 阅读(21277) 评论(2) 推荐(0) 编辑

基于 Android NDK 的学习之旅-----HelloWorld (附源码)
摘要:基于 Android NDK 的学习之旅-----HelloWorldHelloWorld作为所有编程语言的起始阶段,占据着无法改变的地位,所有中/英/法/德/美……版本的编程教材中,hello world总是作为第一个TEST记录于书本之中,所有的编程第一步就在于此了!经典之中的经典!hello world! 下面介绍下NDK开发的Hello World1、Android 应用层 MainActivity.java主要功能代码a)静态载入 So 库 static { System.loadLibrary(libSoName);}b)声明本地方法public native String get 阅读全文

posted @ 2011-08-14 13:11 陆晓峰 阅读(10354) 评论(2) 推荐(3) 编辑

基于 Android NDK 的学习之旅-----Android.mk 介绍
摘要:基于 Android NDK 的学习之旅-----Android.mk 介绍一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell 阅读全文

posted @ 2011-08-13 22:04 陆晓峰 阅读(27327) 评论(7) 推荐(3) 编辑

基于 Android NDK 的学习之旅-----环境搭建
摘要:基于 Android NDK 的学习之旅-----环境搭建工欲善其事 必先利其器 , 下面介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建。1、Android 开发环境搭建Android开发环境搭建不是重点,相信看此文章的很多人都已经搭建成功,这里随便概述性的说说。1) 下载 JDK2) 下载 Eclipse3) 下载 Android SDK4) 启动Eclipse , 安装 ADT2、下载安装Android NDK我使用的NDK版本为r5Google 出的最新NDK 为 r6 下载地址为http://developer.android.com/sdk/ndk/ 阅读全文

posted @ 2011-08-13 10:44 陆晓峰 阅读(43866) 评论(34) 推荐(12) 编辑

基于 Android NDK 的学习之旅-----序言
摘要:前些日子做了个Android项目, 引擎层 用C的, 准备写这个系类的文章,借此跟朋友来分享下我NDK开放的经验以及自己知识的总结和备忘。希望能给需要这方面资料的朋友提供一定的帮助。主要涉及到: 环境的搭建Android.mk 文件的 配置 HelloWorldNDK 打印信息JNI 数据类型Java 调用 CC 调用 Java数据的传输(基本数据类型的传输,引用数据类型的传输,数组的传输)在C中新建Java对象Java方法在C中的映射(包括了签名的使用)C中如何调用Java的方法(包括了静态的和非静态的)JNI中资源的释放 等等先详细介绍下NDK, JNI:What isthe NDK?Go 阅读全文

posted @ 2011-08-12 14:06 陆晓峰 阅读(4759) 评论(10) 推荐(4) 编辑

导航