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

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

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

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

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

    精品学习资源技术总结欢迎下载精品学习资源一、什么是 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+编写代码;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 进行编译 .最简洁的方法, 用 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 文件的时候切记加入路径,这个有时候会引起一些古怪的问题,欢迎下载精品学习资源比如调用失败、调用不到、缘由未知;假如编译失败的话,处理方法同编译成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上不支持,欢迎下载精品学习资源这时候针对 android平台开发的话编译时会出错 ;.c 文件如下 :代码:5. PC端:直接通过 VS2005 就可以编译 .编译时候假如显现找不到某些 .h 文件的错误的话 fatal error C1083: 无法打开包括文件 L . No such file or directory , 参考下面更换 :工程->属性 ->配置属性 ->C/C+-> 常规 > 附加包含目录”选项中有许多 include 下的库, 将 JAVAJDK 里面 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_PAT:H=$callmy-dirAPP_MODULES:=myjni然后建立一个 jni 文件夹,从 hello 工程里面复制一个 Android.mk 到 jni 文件夹目录,然后用文本编辑器更换里面的相关参数;LOCAL_PATH:= $callmy-dir include$CLEAR_VARS LOCAL_MODULE:=myjniLOCAL_SRC_FILES:= 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.loadLibrary"myjni";在运行方法里面加入 :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";在运行方法里面加入 :AJninewlib=newAJni ;inti=newlib.plus330, 1003 ;这是可以用 Log.v 方法来查看 i 的数值;二、Android 系统整体架构以及多媒体框架的JNI 使用多媒体框架在整个 Android 系统所处的位置欢迎下载精品学习资源从框架图可以看出 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动态视频和静态图像的编码,解码,例如:MPEG-4, H.263 and AVC H.264, JPEG语音编码格式: AMR-NB and AMR-WB音乐编码格式: MP3, AAC , AAC+视频和图像格式: 3GPP, MPEG-4 and JPEG欢迎下载精品学习资源视频会议:基于 H324-M standard图中用黄线圈出的是 Media FrameworkOpen Core 介绍:Open Core是 Android 多媒体框架的核心,全部Android 平台的音视频采集,播放的操作都是通过它来实现;它也被称为PVPacket Video, Packet Video是一家特地供应多媒体解决方案的公司;通过 Open Core程序员可以便利快速的开发出想要的多媒体应用程序,例如:音视频的采集,回放,视频会议,实时的流媒体播放等等应用;Open Core框架代码结构:Open Core 的代码在 Android 代码的 External/Opencore目录中;这个目录是 OpenCore的根目录,其中包含的子目录如下所示 : android:这里面是一个上层的库,它实现了一个为Android 使用的音视频采集, 播放的接口,和 DRM数字版权治理的接口实现;欢迎下载精品学习资源baselibs:包含数据结构和线程安全等内容的底层库codecs_v2:音视频的编解码器,基于 OpenMAX 实现engines:核心部分,多媒体引擎的实现 extern_libs_v2:包含了 khronos的 OpenMAX 的头文件fileformats:文件格式的解读( parser)工具nodes:供应一些 PVMF的 NOD,E 主要是编解码和文件解读方面的; 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 APIsThe Android platform is capable of playing both audio and video media. It is alsocapable of playing media contained in the resources for an applicatio,n or a standalonefile in the filesystem, or even streaming media over a data connection. Playback is achieved through theandroid.media.MediaPlayerclass.The Android platform can also record audio. Video recording capabilities are comingin the future. This is achieved through theandroid.media.MediaRecorderclass.Media Player供应的基本接口如下:欢迎下载精品学习资源MediaPlayer 类供应了一个多媒体播放器的基本操作,播放,暂停,停止,设置音量等等;简洁的例子:欢迎下载精品学习资源Media Recorder供应的基本接口如下:简洁的例子:整体的结构如下图所示:欢迎下载精品学习资源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.cppPVPlayer代码位置 /external/opencore/android/欢迎下载精品学习资源实际调用过程如下图所示:欢迎下载精品学习资源三、实例开发利用 NDK生成 SO 库,使用 SO 库进行 JNI调用,在 Androidsdcard创建文件并写入数据;需要的工具:欢迎下载精品学习资源NDK1.5R1、androidSDK1.5R1、SDCAR、D EclipseGalileoforC/C+、Cygwin1.5 ;Eclipse 、ADT0.9 、欢迎下载精品学习资源在 WindowsXP 进行操作工具比较多,假如在 Ubuntu或者其他的 Linux系统下进行操作直接进入步骤 2即可;步骤如下: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 命令试试编译自带的程序,输入makeAPP=hello-jni,hello-jni为 apps下 hello-jni文件夹的名称,这个命令会先找到appshello-jni下的 Application.mk文件,然后找到 sourcesampleshello- jni这个目录,然后找到 Android.mk这个文件中的配置信息进行编译;如图:欢迎下载精品学习资源显现上面的信息,说明编译胜利, so 文件在 apps/hello- jni/project/libs/armeabi文件夹下;3. 书写 javanative接口下面建立一个 android1.5的工程, NDK不支持 1.5以下的版本JNI.java的代码:JniTest.java的代码:欢迎下载精品学习资源4. 生成 JNI 头文件下面使用 javah命令,对 JNI.java这个文件生成生成 JNI 头文件;使用 cmd 进入 android工程的 bin目录中,然后执行 javah- classpath.-jnicc.androidos.jni.JNI这个命令;欢迎下载精品学习资源里面都是 c 语言的头文件声明5.书写 C 代码,写入数据下面使用 eclipse工程如下:forc/c+进行开发;生成一个 cc_androidos_jni_JNI.hcc_androidos_jni_JNI.h内容不变cc_androidos_jni_JNI.c的内容:欢迎下载精品学习资源在这里的代码会在运行的时候向aaaa 数据;sdcard写入 androidos.cc.txt文件;然后写入6.编译 SO 文件进行编译 so 文件:在 NDK的 appsApplication.mk目录下面创建一个myjni文件夹,在 myjni文件夹中创建一个文件,文件的内容为:在 NDKsources 目录下创建 myjni文件夹,在 myjni文件中创建一个Android.mk文件,然后将 cc_androidos_jni_JNI.h和 cc_androidos_jni_JNI.c 文件 copy进来:欢迎下载精品学习资源Android.mk 中的内容如下:里面内容的关键字含义请自行查看docsOVERVIEW.TXT文件编译:欢迎下载精品学习资源7.加入到 Android将 appsmyjnilibs工程中进行运行整个文件夹 copy到 android工程下:运行 android工程使用 adbshell进行查看:进入 sdcard查看数据;留意: sdcard具有 system的权限,假如你的目录是 root权限的,那么是不能写胜利的,除非是真机越权,模拟器是不胜利的,并且在Eclipselogcat下会有 DEBUG信息显现;欢迎下载

    注意事项

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

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




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

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

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

    收起
    展开