Android ndk下用AssetManager读取assets的资源
2014-05-04 21:41
603 查看
转自:http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html
在使用 cocos2dx 在 Android 上进行游戏开发时,遇到了奇怪的事情,无论什么代码,都无法读资源文件。不得以只好寻求更高版本的Api。
在Android ndk api level 9 之后,提供了一套称为 AssetManager 的api。
这个api 的工作原理是
- Java通过JNI把getAssets得到的AssetManager传递给一个JNI的c函数。
- JNI的c函数通过 AAssetManager_fromJava 来取到这个AssetManager对象。
- 通过一系列的 AssetManager 的api来操作Assets。
C的jni函数如下
读取资源的方法如下
这里修改的是cocos2dx的CCFileUtils_Android.cpp 中的getFileData 函数。
最后,在编译libgame.so 时,要注意在Android.mk里的LD参数里加上-landroid来连接有关的库。
在使用 cocos2dx 在 Android 上进行游戏开发时,遇到了奇怪的事情,无论什么代码,都无法读资源文件。不得以只好寻求更高版本的Api。
在Android ndk api level 9 之后,提供了一套称为 AssetManager 的api。
这个api 的工作原理是
- Java通过JNI把getAssets得到的AssetManager传递给一个JNI的c函数。
- JNI的c函数通过 AAssetManager_fromJava 来取到这个AssetManager对象。
- 通过一系列的 AssetManager 的api来操作Assets。
C的jni函数如下
static AAssetManager * gAssetMgr = NULL; extern "C" { void Java_org_cocos2dx_lib_Cocos2dxActivity_nativeSetAssetManager(JNIEnv* env, jclass cls, jobject assetManager) { gAssetMgr = AAssetManager_fromJava( env, assetManager ); } };
读取资源的方法如下
do{ AAsset * pAsset = AAssetManager_open(gAssetMgr, pszFileName, AASSET_MODE_UNKNOWN); if( pAsset == NULL ) break; size_t size = AAsset_getLength(pAsset); if( size > 0 ) { pData = new unsigned char[size]; int iRet = AAsset_read( pAsset, pData, size); if( iRet <= 0 ) { delete [] pData; pData = NULL; } } AAsset_close(pAsset); if( pAsset == NULL ) size = 0; if( pSize ) *pSize = size; } while(0);
这里修改的是cocos2dx的CCFileUtils_Android.cpp 中的getFileData 函数。
最后,在编译libgame.so 时,要注意在Android.mk里的LD参数里加上-landroid来连接有关的库。
相关文章推荐
- android menu 使用总结1
- 如何基于android4.4.2的源码和android-4.3.1_r1的驱动编译I9250的ROM
- Android 时间格式化符号H无法识别
- phonegap-2.0+android教程
- Android ARM指令学习
- Android随笔
- androidpn server 启动日志分析
- Android反编译查看APK的源代码、资源文件、XML文件
- Android编译系统详解(三)——编译流程详解
- Android编译系统详解(二)——命令执行流程
- Android项目---TouchListener
- Android--SoundPool详解
- Android 长按电源键关机整个流程小学习
- android 给apk文件签名
- Android 通过solid来定义不同边框的颜色,可以只定义一个边框的颜色
- android开发之“类与对象”
- Android NDK 安装与配置
- android — NDK生成so文件
- Android Dictionary
- Android学习笔记-0-搞定大脑