2022年技术总结_Android平台的JNI开发_金文 .docx





《2022年技术总结_Android平台的JNI开发_金文 .docx》由会员分享,可在线阅读,更多相关《2022年技术总结_Android平台的JNI开发_金文 .docx(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 技术总结 -Android 平台的 JNI 开发一、什么是 JNI JNI 是 Java Native Interface的缩写;标准 JAVA 库并不支持某些平台特性,可以用 别的语言编写代码使得软件支持这些平台特性,也可能程序需要用低级语言编写一些算法以提高程序的效率.这些情形都可能是使用JNI 的缘由;JNI 的编写步骤 : 1. 编写带有 native 声明的 java类;2. 编译 java 文件成 class类;3. 使用 javah -jni com.ikags.project.XXXX 编译成 .h 文件;4. 使用 C/C+编
2、写代码;5. 将.h 和.c .cpp 文件编译成 .dll .so 文件 依据平台不同,用不同的工具,PC平台 VS2005 就可以, android平台的话,用 cygwin+android NDK android Native Development Kit 进行开发;用 system.loadLibrary方法调用;6. 将.dll .so 文件供应应你的工程,具体的讲解如下:1. 编写一个带有 native 声明的 java 类.其中 native 方法就是需要生成的可调用的方法;代码:2. 编译成 class文件;用 J2SE项可以通过命令行中的javac AJni.java 进行
3、编译 .最简洁的方法,目直接右键 run 然后, 可以在工程下的 bin 目录中找到 AJni.class 文件;假如通过命令行编译会显现问题,请找到 JAVA文件夹下面对应 JDK 的 bin 目录, 把文件 copy 到里面执行 或在环境变量中配置 bin 目录的位置 ;3. 使用 javah -jni com.ikags.project.XXXX 编译成 .h 文件;通过命令行中的 javah -jni com.ikags.project.XXXX 编译成 .h 文件, 其中在编译 .h 文件的时候切记加入路径,这个有时候会引起一些古怪的问题,名师归纳总结 - - - - - - -第
4、1 页,共 18 页精选学习资料 - - - - - - - - - 比如调用失败、调用不到、缘由未知;假如编译失败的话,处理方法同编译成class文件, 请找到 JAVA 文件夹下面对应 JDK 的 bin 目录,把文件 copy 到里面执行 或者在环境变量中配置 Bin 目录的位置 此时生成文件 com_ikags_AJni.h;4. 使用 C/C+编写代码;其中前一阶段生成的 .h 头文件如下 :代码:这里是不需要进行任何更换的.只要自己再写一个 .c.cpp文件,其中包含有这三个方法即可, PC和 android平台支持的库不一样,假如调用了不支持的库 的话,后面的编译会出错,这个需要
5、特殊留意一下;Android 平台目前 1.6 的 NDK 只支持 Math 库、 C 标准库、 ZLib 库、 Log 库 和 OpenGL ES库; PC 端的 JNI 支持 printf ,但是假如 android 上不支持,名师归纳总结 - - - - - - -第 2 页,共 18 页精选学习资料 - - - - - - - - - 这时候针对 android 平台开发的话编译时会出错5. PC端: ;.c 文件如下 :代码:直接通过 VS2005 就可以编译 .编译时候假如显现找不到某些 .h 文件的错误的话 fatal error C1083: 无法打开包括文件 参考下面更换 :
6、 L . No such file or directory ,工程 -属性 -配置属性 -C/C+- 常规-附加包含目录” 选项中有许多 include 下的库,将 JAVA JDK 里面 include 的和里面的 win32 这两个路径添加入目录中再尝试编译;一般来说代码正确可以编译通过,这里生成myjni.dll;Android 端:这里要通过 cygwin 和 android NDK 进行编译, android NDK 下载后直接解压就可以 . cygwin 需要安装几个 C 的编译器;打开 cygwin 看到命令行模式,通过 cd 命令进入 NDK 的目录,然后运行build/ho
7、st-setup.sh 可以看到一些信息,假如没有报错的话,就正常安装完毕;编译本身命令很简洁, make APP=hello-jni -B 就可以尝试编译自带实例 .编译胜利的话,说明配置胜利,然后可以开头编译自己的程序;在 NDK 目录的 apps文件夹下,建立一个 myjni 文件夹,从 hello 工程里面复制 Application.mk 到 myjni 文件夹里面,用文本编辑器编辑文本为APP_PROJECT_PATH $call my-dir APP_MODULES := myjni 然后建立一个 jni 文件夹,从 hello 工程里面复制一个夹目录,然后用文本编辑器更换里面的
8、相关参数;LOCAL_PATH:= $call my-dir include $CLEAR_VARS LOCAL_MODULE := myjni LOCAL_SRC_FILES:= com_ikags_AJni.cpp Android.mk 到 jni 文件名师归纳总结 - - - - - - -第 3 页,共 18 页精选学习资料 - - - - - - - - - include $BUILD_SHARED_LIBRARY cygwin 运行这时候把你的 .h 和.c.cpp等文件复制到这个目录下,然后用make APP=myjni -B 假如编码没有错误的话,会自动生成 libsarme
9、abilibmyjni.so 文件,至此 android的 JNI 文件生成完成;6. 将.dll.so文件供应应你的工程,用 PC端:system.loadLibrary 方法调用;将 dll 文件复制入程序跟目录,保留第一步写的 native Java代码.在需要用的 代码里面加入 : static System.loadLibrarymyjni; 在运行方法里面加入 : int i AJni newlib = new AJni ;= newlib.plus 330,1003;输出 i 即可测试是否有效;Android 端:将 libs 整个目录复制到 android 工程下 .这里要留意
10、的是loadLibrary 读取的名字和 lib 的名字不同 .这里我们的 so文件为 libmyjni.so ,但是我们下面写的 loadLibrary 为 myjni ,这点是要留意下的 在自己的 Activity 里面添加代码 : static System.loadLibrary myjni; 在运行方法里面加入 : int i AJni newlib = new AJni ;= newlib.plus330,1003;这是可以用 Log.v 方法来查看 i 的数值;二、Android 系统整体架构以及多媒体框架的 JNI 使用名师归纳总结 多媒体框架在整个Android 系统所处的位
11、置第 4 页,共 18 页- - - - - - -精选学习资料 - - - - - - - - - 从框架图可以看出Media Framework 处于 Libraries 这一层,这层的Library 不是用Java实现,一般是 C/C+实现,它们通过 Java的 JNI 方式调用;多媒体架构:基于第三方 PacketVideo 公司的 OpenCORE platform 来实现支持全部通用的音频,视频,静态图像格式 展,可以便利得支持CODEC编解码器 使用 OpenMAX 1L interface 接口进行扩 hardware / software codec plug-ins 支持的
12、格式包括: MPEG4、H.264、MP3、AAC 、AMR 、JPG、PNG、GIF 等;Open Core多媒体框架有一套通用可扩展的接口针对第三方的多媒体遍解码 器,输入,输出设备等等;多媒体文件的播放,下载,包括3GPP, MPEG-4,AAC and MP3 containers 流媒体文件的下载,实时播放,包括:3GPP, HTTP and RTSP/RTP 动态视频和静态图像的编码,解码,例如:H.264, JPEG 语音编码格式: AMR-NB and AMR-WB MPEG-4, H.263 and AVC 音乐编码格式: MP3, AAC , AAC+ 视频和图像格式: 3
13、GPP, MPEG-4 and JPEG 名师归纳总结 - - - - - - -第 5 页,共 18 页精选学习资料 - - - - - - - - - 视频会议:基于 H324-M standard 图中用黄线圈出的是 Media Framework Open Core 介绍:Open Core是 Android 多媒体框架的核心,全部Android 平台的音视频采集,播放的操作都是通过它来实现;它也被称为 PVPacket Video, Packet Video是一家专门供应多媒体解决方案的公司;通过 Open Core程序员可以便利快速的开发出想要的多媒体应用程序,例如:音视频的采集,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年技术总结_Android平台的JNI开发_金文 2022 技术 总结 _Android 平台 JNI 开发 金文

限制150内