2022年技术总结_Android平台的JNI开发_金文.docx
《2022年技术总结_Android平台的JNI开发_金文.docx》由会员分享,可在线阅读,更多相关《2022年技术总结_Android平台的JNI开发_金文.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品学习资源技术总结欢迎下载精品学习资源一、什么是 JNI-Android平台的 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 进行开发;6. 将.dll .so 文件供应应你的工程,用 system.loadLibrary方法调用;具体的讲解如下:1. 编写一个带有 native 声明的 java 类.其中 native 方法就是需要生成的可调用的方法;代码:2. 编译成 class文件;可以通过命令行中的 javac AJni.java 进行编译 .最
3、简洁的方法, 用 J2SE项目直接右键 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、、缘由未知;假如编译失败的话,处理方法同编译成class文件, 请找到 JAVA 文件夹下面对应 JDK 的 bin 目录,把文件 copy 到里面执行 或者在环境变量中配置Bin 目录的位置 此时生成文件 com_ikags_AJni.h;4. 使用 C/C+编写代码;其中前一阶段生成的 .h 头文件如下 :代码:这里是不需要进行任何更换的 .只要自己再写一个 .c.cpp文件,其中包含有这三个方法即可, PC和 android 平台支持的库不一样,假如调用了不支持的库的话,后面的编译会出错,这个需要特殊留意一下;Android 平台目前 1.6 的 NDK 只支持 Math 库、C 标准库
5、、 ZLib 库、Log 库和 OpenGL ES库; PC 端的 JNI 支持 printf ,但是假如 android上不支持,欢迎下载精品学习资源这时候针对 android平台开发的话编译时会出错 ;.c 文件如下 :代码:5. PC端:直接通过 VS2005 就可以编译 .编译时候假如显现找不到某些 .h 文件的错误的话 fatal error C1083: 无法打开包括文件 L . No such file or directory , 参考下面更换 :工程-属性 -配置属性 -C/C+- 常规 附加包含目录”选项中有许多 include 下的库, 将 JAVAJDK 里面 incl
6、ude 的和里面的 win32 这两个路径添加入目录中再尝试编译;一般来说代码正确可以编译通过,这里生成myjni.dll;Android 端:这里要通过 cygwin 和 android NDK 进行编译, android NDK 下载后直接解压就可以 . cygwin 需要安装几个 C 的编译器;打开 cygwin 看到命令行模式, 通过 cd 命令进入 NDK 的目录,然后运行build/host-setup.sh可以看到一些信息, 假如没有报错的话, 就正常安装完毕;编译本身命令很简洁, make APP=hello-jni -B 就可以尝试编译自带实例 .编译胜利的话,说明配置胜利,
7、然后可以开头编译自己的程序;在 NDK 目录的 apps文件夹下,建立一个 myjni 文件夹,从 hello 工程里面复制 Application.mk 到 myjni 文件夹里面,用文本编辑器编辑文本为APP_PROJECT_PAT:H=$callmy-dirAPP_MODULES:=myjni然后建立一个 jni 文件夹,从 hello 工程里面复制一个 Android.mk 到 jni 文件夹目录,然后用文本编辑器更换里面的相关参数;LOCAL_PATH:= $callmy-dir include$CLEAR_VARS LOCAL_MODULE:=myjniLOCAL_SRC_FILE
8、S:= com_ikags_AJni.cpp欢迎下载精品学习资源include$BUILD_SHARED_LIBRARY这时候把你的 .h 和.c.cpp等文件复制到这个目录下,然后用cygwin 运行make APP=myjni -B 假如编码没有错误的话,会自动生成libsarmeabilibmyjni.so文件,至此 android 的 JNI 文件生成完成;6. 将.dll.so文件供应应你的工程,用system.loadLibrary 方法调用; PC端:将 dll 文件复制入程序跟目录,保留第一步写的native Java代码.在需要用的代码里面加入 :staticSystem.l
9、oadLibrarymyjni;在运行方法里面加入 :AJni newlib = new AJni ;int i = newlib.plus 330 , 1003 ;输出 i 即可测试是否有效;Android 端:将 libs 整个目录复制到 android 工程下 .这里要留意的是 loadLibrary 读取的名字和 lib 的名字不同 .这里我们的 so文件为 libmyjni.so ,但是我们下面写的loadLibrary 为 myjni ,这点是要留意下的在自己的 Activity 里面添加代码 :staticSystem.loadLibrary myjni;在运行方法里面加入 :A
10、Jninewlib=newAJni ;inti=newlib.plus330, 1003 ;这是可以用 Log.v 方法来查看 i 的数值;二、Android 系统整体架构以及多媒体框架的JNI 使用多媒体框架在整个 Android 系统所处的位置欢迎下载精品学习资源从框架图可以看出 Media Framework 处于 Libraries 这一层,这层的 Library 不是用Java实现,一般是 C/C+实现,它们通过 Java的 JNI 方式调用;多媒体架构:基于第三方 PacketVideo 公司的 OpenCORE platform 来实现支持全部通用的音频, 视频,静态图像格式 C
11、ODEC编解码器 使用 OpenMAX 1L interface 接口进行扩展,可以便利得支持 hardware / software codec plug-ins支持的格式包括: MPEG4、H.264、MP3、AAC 、AMR 、JPG、PNG、GIF 等;Open Core多媒体框架有一套通用可扩展的接口针对第三方的多媒体遍解码器,输入,输出设备等等;多媒体文件的播放,下载,包括3GPP, MPEG-4 ,AAC and MP3 containers流媒体文件的下载,实时播放,包括:3GPP, HTTP and RTSP/RTP动态视频和静态图像的编码,解码,例如:MPEG-4, H.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 技术 总结 _Android 平台 JNI 开发 金文
限制150内