设为首页 加入收藏

TOP

Android+JNI调用–文件操作(附源码)(一)
2014-11-24 12:40:14 来源: 作者: 【 】 浏览:0
Tags:Android JNI 调用 文件 操作 源码

JNI概述:


JNI 是 Java Native Interface 的缩写,译为 Java 本地接口。它允许 Java 代码和其他语言编写的代码进行交互。在android 中提供 JNI 的方式,让 Java 程序可以调用 C/C++语言程序。 android 中很多 Java 类都具有 native 接口,这些接口由本地实现,然后注册到系统中。在android系统中实现JNI库需要连接.so共享库,如:lib<文件名>.so。


注意权限


Android NDK概述:


Android NDK是一个工具集,让你的Android应用程序里可以内嵌使用本地代码(C/C++)的组件。


Android应用程序运行在Dalvik虚拟机中。NDK可以让你使用C/C++这样的本地代码语言来实现你的应用程序中某些部分。这对某类程序是有帮助的,比如需要重用已有的C代码,或者为了提高运行速度。


Android+JNI调用–文件操作完整源代码下载:


下载在Linux公社的1号FTP服务器里,下载地址:


密码:www.muu.cc


在 2011年LinuxIDC.com\10月\10月\Android+JNI调用–文件操作源码


下载方法见 http://www.linuxidc.net/thread-1187-1-1.html



NDK 提供:


1). 编译文件和工具集,用来将你的C/C++源文件编译成本地库。


2). 提供一种方式,将对应的本地库内嵌到应用程序包文件(.apk)中,最终发布到Android设备中。


3). 本地系统头文件和库,这些头文件和库从Android1.5开始往后都是被支持的。但使用本地活动(native activity)的程序只能运行在Android 2.3或更高的系统中。


4). 文档、示例、指南。


本例中JNI调用大概流程图如下:




1. 编写Android JNI模块java调用类


Android虚拟机允许你的应用程序源代码通过JNI调用实现本地代码的方法,需要在应用程序中使用关键字native声明一个或多个方法表明该方法是通过本地调用实现的,如:


public native static int FileOpen(StringpFileName,int openMode);
public native static int FileLength(int fp);
public native static int FileSeek(int fp,int offset,int origin);
public native static CusBuffer FileRead(int fp,int nCount);
public native static int FileWrite(int fp,byte[] buf,int nCount);
public native static int FileClose(int fp);


除了声明native方法以外还必须为这些方法实现提供本地共享库,该共享库最终会被打包到.apk文件中,这些共享库需要更具标准的unix公约来命名lib<文件名>.so,如:libJNI_FileSys.so,其中JNI_FileSys使我们需要加载的库名。在应用程序中加载共享库的方法为:
static

{
System.loadLibrary("JNI_FileSys");
}


注:这里使用的文件名不需要lib前缀以及.so后缀名。


FileSys.java完整代码实现


package com.luoxudong.jni.reader;
import
com.luoxudong.jni.bean.CusBuffer;


/********************************************************************
* [Summary]


* TODO 文件操作类
* [Remarks]
* TODO 请在此处详细描述类的功能、调用方法、注意事项、以及与其它类的关系.
********************************************************************/
public class
FileSys {
static
{
System.loadLibrary("JNI_FileSys");
}

/**
*
* [Summary]
* MjFileOpen 打开文件
* @param strFileName 文件名
* @param openMode 打开类型
* @return 结果
*
*/
public int MjFileOpen(String strFileName,int openMode){
return FileOpen(strFileName, openMode);
}
/**
*
* [Summary]
* MjFileLength 计算文件长度
* @param fp 文件句柄
* @return 文件长度
*
*/
public int MjFileLength(int fp){
return FileLength(fp);
}

/**
*
* [Summary]
* MjFileSeek 文件seek操作
* @param fp 文件句柄
* @param offset 读取数据偏移量
* @param origin 开始位置指针
* @return
*
*/
public int MjFileSeek(int fp,int offset,int origin){
return FileSeek(fp, offset, origin);
}
/**
*
* [Summary]
* MjFileRead 读取文件数据
* @param fp 文件句柄
* @param nCount 读取字节数
* @return 实际读取字节数
*
*/
public CusBuffer MjFileRead(int fp,int nCount){
return FileRead(fp, nCount);
}
/**
*
* [Summary]
* MjFileWrite 写文件
* @param fp 文件句柄
* @param buf 写数据buffer
* @param nCount 需要写入的字节数
* @return 实际写入字节数
*
*/
public int MjFileWrite(int fp,byte[] buf,int nCount){
return FileWrite(fp, buf, nCount);
}
/**
*
* [Summary]
* MjFileClose 关闭文件
* @param fp 文件句柄
* @return 关闭文件状态

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android JNI调用 - char*与jstrin.. 下一篇Android数据存储之文件I/O

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)