欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:37597217       资源大小:2.15MB        全文页数:32页
    • 资源格式: DOCX        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    精选学习资料 - - - - - - - - - 技术总结 -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+编写代码;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 进行编译 .最简洁的方法,目直接右键 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 文件的时候切记加入路径,这个有时候会引起一些古怪的问题,名师归纳总结 - - - - - - -第 1 页,共 18 页精选学习资料 - - - - - - - - - 比如调用失败、调用不到、缘由未知;假如编译失败的话,处理方法同编译成class文件, 请找到 JAVA 文件夹下面对应 JDK 的 bin 目录,把文件 copy 到里面执行 或者在环境变量中配置 Bin 目录的位置 此时生成文件 com_ikags_AJni.h;4. 使用 C/C+编写代码;其中前一阶段生成的 .h 头文件如下 :代码:这里是不需要进行任何更换的.只要自己再写一个 .c.cpp文件,其中包含有这三个方法即可, PC和 android平台支持的库不一样,假如调用了不支持的库 的话,后面的编译会出错,这个需要特殊留意一下;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: 无法打开包括文件 参考下面更换 : 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/host-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 工程里面复制一个夹目录,然后用文本编辑器更换里面的相关参数;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 假如编码没有错误的话,会自动生成 libsarmeabilibmyjni.so 文件,至此 android的 JNI 文件生成完成;6. 将.dll.so文件供应应你的工程,用 PC端:system.loadLibrary 方法调用;将 dll 文件复制入程序跟目录,保留第一步写的 native Java代码.在需要用的 代码里面加入 : static System.loadLibrary"myjni"; 在运行方法里面加入 : int i AJni newlib = new AJni ;= newlib.plus 330,1003;输出 i 即可测试是否有效;Android 端:将 libs 整个目录复制到 android 工程下 .这里要留意的是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 系统所处的位置第 4 页,共 18 页- - - - - - -精选学习资料 - - - - - - - - - 从框架图可以看出Media Framework 处于 Libraries 这一层,这层的Library 不是用Java实现,一般是 C/C+实现,它们通过 Java的 JNI 方式调用;多媒体架构:基于第三方 PacketVideo 公司的 OpenCORE platform 来实现支持全部通用的音频,视频,静态图像格式 展,可以便利得支持CODEC编解码器 使用 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 动态视频和静态图像的编码,解码,例如:H.264, JPEG 语音编码格式: AMR-NB and AMR-WB MPEG-4, H.263 and AVC 音乐编码格式: MP3, AAC , AAC+ 视频和图像格式: 3GPP, MPEG-4 and JPEG 名师归纳总结 - - - - - - -第 5 页,共 18 页精选学习资料 - - - - - - - - - 视频会议:基于 H324-M standard 图中用黄线圈出的是 Media Framework Open Core 介绍:Open Core是 Android 多媒体框架的核心,全部Android 平台的音视频采集,播放的操作都是通过它来实现;它也被称为 PVPacket Video, Packet Video是一家专门供应多媒体解决方案的公司;通过 Open Core程序员可以便利快速的开发出想要的多媒体应用程序,例如:音视频的采集,回放,视频会议,实时的流媒体播放等等应用;Open Core 框架代码结构:Open Core 的代码在 Android 代码的 External/Opencore目录中;这个目录是 OpenCore的根目录,其中包含的子目录如下所示:android:这里面是一个上层的库,它实现了一个为 播放的接口,和 DRM数字版权治理的接口实现;Android 使用的音视频采集,名师归纳总结 - - - - - - -第 6 页,共 18 页精选学习资料 - - - - - - - - - baselibs:包含数据结构和线程安全等内容的底层库 codecs_v2:音视频的编解码器,基于 OpenMAX 实现engines:核心部分,多媒体引擎的实现extern_libs_v2:包含了 khronos的 OpenMAX 的头文件 fileformats:文件格式的解读( parser)工具nodes:供应一些 PVMF的 NODE,主要是编解码和文件解读方面的;oscl:操作系统兼容库pvmi:输入输出掌握的抽象接口protocols:主要是与网络相关的RTSP、RTP、HTTP 等协议的相关内容pvcommon:pvcommon库文件的 Android.mk 文件,没有源文件;pvplayer:pvplayer 库文件的 Android.mk 文件,没有源文件;pvauthor:pvauthor 库文件的 Android.mk 文件,没有源文件;tools_v2:编译工具以及一些可注册的模块;Open Core 上层代码结构 在实际开发中我们并不会过多的讨论Open Core 的实现, Android 供应了上层的Media API 给开发人员使用, MediaPlayer 和 MediaRecorder Android Media APIs The Android platform is capable of playing both audio and video media. It is also capable of playing media contained in the resources for an application, or a standalone file in the filesystem, or even streaming media over a data connection. Playback is achieved through the android.media.MediaPlayer class. The Android platform can also record audio. Video recording capabilities are coming in the future. This is achieved through the android.media.MediaRecorder class. Media Player 供应的基本接口如下:名师归纳总结 - - - - - - -第 7 页,共 18 页精选学习资料 - - - - - - - - - MediaPlayer类供应了一个多媒体播放器的基本操作,播放,暂停,停止,设置音 量等等;简洁的例子:名师归纳总结 - - - - - - -第 8 页,共 18 页精选学习资料 - - - - - - - - - Media Recorder 供应的基本接口如下:简洁的例子:整体的结构如下图所示:名师归纳总结 - - - - - - -第 9 页,共 18 页精选学习资料 - - - - - - - - - MediaPlayer JNI 代码位置 /frameworks/base/media/jni MediaPlayer Native 代码位置 /frameworks/base/media/libmedia MediaPlayerService Server 代码位置 /frameworks/base/media/libmediaplayerservice MediaPlayerService Host Process 代码位置 /frameworks/base/media/mediaserver/main_mediaserver.cpp PVPlayer 代码位置 /external/opencore/android/ 名师归纳总结 - - - - - - -第 10 页,共 18 页精选学习资料 - - - - - - - - - 实际调用过程如下图所示:名师归纳总结 - - - - - - -第 11 页,共 18 页精选学习资料 - - - - - - - - - 三、实例开发利用 NDK 生成 SO 库,使用 SO 库进行 JNI 调用,在 Android sdcard 创建文件并写入数据;需要的工具:SDK1.5 R1、SDCARDEclipse 、ADT 0.9 、NDK1.5 R1、android Eclipse Galileo for C/C+、Cygwin 1.5 ;在 Windows XP 进行操作工具比较多,假如在 进行操作直接进入步骤 2 即可;步骤如下: Ubuntu 或者其他的 Linux 系统下1. 安装 Cygwin 使用本地安装包进行下载:下载一个 38.2M 包即可;2. 安装 NDK 进入正题安装 NDK,第一打开 cygwin ,然后使用 cd 命令进入 NDK 根目录,然后 运行: build/host-setup.sh 假如显现以上的信息,说明安装正确,假如显现GCC 未找到,请输入 gcc 命令查看,假如显现 toolchain 未找到的信息,请试着修改 build/host-setup.sh 文件第一行代码,将: #./bin/sh 改成 #./bin/bash,在 Ubuntu 上这个是需要修改的 ;名师归纳总结 安装成后,使用 make 命令试试编译自带的程序,输入 make APP=hello-jni,第 12 页,共 18 页hello-jni 为 apps 下 hello-jni 文件夹的名称,这个命令会先找到appshello-jni 下的 Application.mk 文件,然后找到 sourcesampleshello-jni 这个目录,然后找到 Android.mk 这个文件中的配置信息进行编译;如图:- - - - - - -精选学习资料 - - - - - - - - - 显现上面的信息,说明编译胜利,so 文件在 apps/hello-jni/project/libs/armeabi 文件夹下;3. 书写 java native 接口下面建立一个 android1.5 JNI.java 的代码:的工程, NDK 不支持 1.5 以下的版本名师归纳总结 JniTest.java的代码:第 13 页,共 18 页- - - - - - -精选学习资料 - - - - - - - - - 4. 生成 JNI 头文件下面使用 javah 命令,对 JNI.java 这个文件生成生成 JNI 头文件;名师归纳总结 使用 cmd 进入 android 工程的 bin 目录中,然后执行javah -第 14 页,共 18 页classpath . -jni cc.androidos.jni.JNI 这个命令;- - - - - - -精选学习资料 - - - - - - - - - 生成一个 cc_androidos_jni_JNI.h 里面都是 c 语言的头文件声明5. 书写 C 代码,写入数据下面使用 eclipse for c/c+ 进行开发;工程如下:cc_androidos_jni_JNI.h 内容不变名师归纳总结 cc_androidos_jni_JNI.c的内容:第 15 页,共 18 页- - - - - - -精选学习资料 - - - - - - - - - 在这里的代码会在运行的时候向sdcard 写入 androidos.cc.txt 文件;然后写入aaaa 数据;6. 编译 SO 文件进行编译 so 文件:在 NDK 的 apps 目录下面创建一个 myjni 文件夹,在 myjni 文件夹中创建一个Application.mk 文件,文件的内容为:在 NDKsources 目录下创建 myjni 文件夹,在 myjni 文件中创建一个Android.mk 文件,然后将 cc_androidos_jni_JNI.h 文件 copy 进来:和 cc_androidos_jni_JNI.c 名师归纳总结 - - - - - - -第 16 页,共 18 页精选学习资料 - - - - - - - - - Android.mk 中的内容如下:里面内容的关键字含义请自行查看 编译:docsOVERVIEW.TXT 文件名师归纳总结 - - - - - - -第 17 页,共 18 页精选学习资料 - - - - - - - - - 7. 加入到 Android 工程中进行运行将 appsmyjnilibs 整个文件夹 copy 到 android 工程下:运行 android 工程使用 adb shell 进行查看:进入 sdcard 查看数据;留意: sdcard 具有 system 的权限,假如你的目录是 root 权限的,那么是不能写胜利的,除非是真机越权,模拟器是不胜利的,并且在 Eclipse logcat 下会有 DEBUG 信息显现;名师归纳总结 - - - - - - -第 18 页,共 18 页

    注意事项

    本文(2022年技术总结_Android平台的JNI开发_金文 .docx)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开