Android NDK API 之 Asset

Reference


include

1
2
#include <asset_manager.h>
#include <asset_manager_jni.h>

Enumerations

使用 AAssetManager_open 打开资产的可用访问模式。

Anonymous Enum 14 说明
AASSET_MODE_UNKNOWN = 0 不确定如何访问数据
AASSET_MODE_RANDOM = 1 读取块,并向前和向后查找
AASSET_MODE_STREAMING = 2 按顺序阅读,偶尔向前搜索
AASSET_MODE_BUFFER = 3 包含所有数据的只读缓冲区

Typedefs

  说明 评论
struct AAsset 提供对只读资产的访问。 不是线程安全的,不应跨线程共享。
struct AAssetDir 提供对资产层次结构块的访问,就像它是单个目录一样。 内容由 AAssetManager 填充。
文件列表将按 ASCII 值升序排列。
struct AAssetManager 通过创建 AAsset 对象提供对应用程序原始资产的访问。 是 java AAssetManager 的低级本地实现的包装器,可以使用 AAssetManager_fromJava() 获取指针。
可以像文件系统一样检查资产层次结构,使用 AAssetDir 对象来细读单个目录。
本地 AAssetManager 指针可以跨多个线程共享。

Functions

返回值 函数 说明 评论
void AAssetDir_close(AAssetDir *assetDir) 关闭打开的 AAssetDir,释放任何相关资源。
const char * AAssetDir_getNextFileName(AAssetDir *assetDir) 迭代资产目录中的文件。 返回所有文件名后,将返回 NULL 字符串。
返回的文件名适合传递给 AAssetManager_open()。
此处返回的字符串归 AssetDir 实现所有,如果对此 AAssetDir 实例进行任何其他调用,则不能保证保持有效。
void AAssetDir_rewind(AAssetDir *assetDir) 将 AAssetDir_getNextFileName() 的迭代状态重置为开头。
AAssetManager * AAssetManager_fromJava(JNIEnv *env, jobject assetManager) 给定一个 Dalvik AssetManager 对象,获取对应的本地 AAssetManager 对象。 请注意,调用者负责获取并保持对 jobject 的 VM 引用,以防止在使用本地对象时对其进行垃圾回收。
AAsset * AAssetManager_open(AAssetManager mgr, const char filename, int mode) 打开资产。 此处返回的对象应通过调用 AAsset_close() 来释放。
AAssetDir * AAssetManager_openDir(AAssetManager mgr, const char dirName) 打开资产层次结构中的命名目录。 使用 AAssetDir 函数检查该目录。要打开顶级目录,请传入 “” 作为 dirName。
此处返回的对象应通过调用 AAssetDir_close() 来释放。
void AAsset_close(AAsset *asset) 关闭资产,释放所有相关资源。
const void * AAsset_getBuffer(AAsset *asset) 获取指向包含资产全部内容的缓冲区的指针。 失败时返回 NULL。
off_t AAsset_getLength(AAsset *asset) 报告资产数据的总大小。
off64_t AAsset_getLength64(AAsset *asset) 报告资产数据的总大小。 使用 64 位数字插入 32 位作为 AAsset_getLength 报告大小。
off_t AAsset_getRemainingLength(AAsset *asset) 报告当前仓位可以读取的资产数据总量。
off64_t AAsset_getRemainingLength64(AAsset *asset) 报告当前仓位可以读取的资产数据总量。 使用 64 位数字而不是像 AAsset_getRemainingLength 那样使用 32 位数字。
int AAsset_isAllocated(AAsset *asset) 返回此资产的内部缓冲区是否在普通 RAM 中分配(即未映射)。
int AAsset_openFileDescriptor(AAsset asset, off_t outStart, off_t *outLength) 打开可用于读取资产数据的新文件描述符。 如果开始或长度不能用 32 位数字表示,它将被截断。如果文件很大,请改用 AAsset_openFileDescriptor64。
如果无法直接访问 fd(例如,如果资产被压缩),则返回 < 0。
int AAsset_openFileDescriptor64(AAsset asset, off64_t outStart, off64_t *outLength) 打开可用于读取资产数据的新文件描述符。 使用 64 位数字作为偏移量和长度,而不是 32 位,而不是像 AAsset_openFileDescriptor 那样。
如果无法直接访问 fd(例如,如果资产被压缩),则返回 < 0。
int AAsset_read(AAsset asset, void buf, size_t count) 尝试从当前偏移量读取“count”个字节的数据。 返回读取的字节数,EOF 时为零,错误时返回 < 0。
off_t AAsset_seek(AAsset *asset, off_t offset, int whence) 在资产数据中寻找指定的偏移量。 ‘whence’ 使用与 lseek()/fseek() 相同的常量。
成功时返回新位置,错误时返回 (off_t) -1。
off64_t AAsset_seek64(AAsset *asset, off64_t offset, int whence) 在资产数据中寻找指定的偏移量。 ‘whence’ 使用与 lseek()/fseek() 相同的常量。
对大文件使用 64 位数据类型,而不是 AAsset_seek 使用的 32 位类型。
成功时返回新位置,错误时返回 (off64_t) -1。

本文标题:Android NDK API 之 Asset

文章作者:魏超

发布时间:2021年08月26日 - 14:08

最后更新:2021年08月26日 - 15:08

原始链接:http://www.weichao.io/2021/08/26/Android-NDK-API-之-Asset/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

---------------------本文结束---------------------