Android ndk下用AssetManager读取assets的资源
来源:互联网 发布:虚拟现实java培训 编辑:程序博客网 时间:2024/05/22 02:20
【备忘】Android ndk下用AssetManager读取assets的资源。
@import url(http://www.cppblog.com/cutesoft_client/cuteeditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);在使用 cocos2dx 在 Android 上进行游戏开发时,遇到了奇怪的事情,无论什么代码,都无法读资源文件。不得以只好寻求更高版本的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 );
}
};
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);
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 ndk下用AssetManager读取assets的资源
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- android读取assets下的资源
- android assets目录下的资源读取
- Android学习第二课:Assets资源文件读取及AssetManager介绍
- Android读取assets目录下的资源(程序代码小片段)
- android如何读取assets目录下的资源
- android 读取assets文件夹下的文件资源
- Android读取assets目录下的资源 (webview加载assets下的html)
- Android:读取assets资源
- Android assets资源读取
- Android assets目录资源读取
- Linux僵尸进程产生及如何避免2
- java调用扫描仪1
- spring中的AOP
- HDU-1556 Color the ball 简单树状数组
- 模拟退火算法
- Android ndk下用AssetManager读取assets的资源
- HDU 3912 BFS走迷宫
- Java调用扫描仪2
- Maven:the way to add third-party jar-package to Local Maven Repository for using conveniently
- c语言的小总结
- 自创引擎II Demo
- 两个while循环求凸包 poj2187 poj1113
- PHP 代码延时执行后面的代码
- 编译和链接的区别