Android NDK API 之 Asset

本文最后更新于:1 年前

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
https://weichao.io/e080eb5d7f17/
作者
魏超
发布于
2021年8月26日
更新于
2022年12月4日
许可协议