【问题标题】:Android Assets and NDKAndroid 资源和 NDK
【发布时间】:2012-03-19 22:52:43
【问题描述】:

我正在尝试从我的本机代码中读取一个简单的文本文件。

  1. 我将 file.txt 放在 assets 文件夹下
  2. 在我的活动中,我正在创建资产管理器:assetManager = getAssets(); 然后我将assetManager 传递给我的本机方法和(如本机音频示例):

    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
    AAsset* asset = AAssetManager_open(mgr, "file.txt", AASSET_MODE_UNKNOWN);
    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
    
    off_t start, length;
    
    int fd = AAsset_openFileDescriptor(asset, &start, &length);   
    

问题是fd小于0!!!

有人可以帮忙吗?

【问题讨论】:

    标签: android-ndk


    【解决方案1】:

    AAsset_openFileDescriptor 仅适用于未压缩的文件(如 mp3、jpg、png 等)。它写在文档中(asset_manager.h 头文件):

    /**
     * Open a new file descriptor that can be used to read the asset data.
     *
     * Returns < 0 if direct fd access is not possible (for example, if the asset is
     * compressed).
     */
    int AAsset_openFileDescriptor(AAsset* asset, off_t* outStart, off_t* outLength);
    

    使用AAsset_readAAsset_getBuffer

    【讨论】:

    • 谢谢。所以它默认压缩文本文件?
    • 抱歉,我确实需要文件描述符,那么使用 AAsset_read 或 AAsset_getBuffer 解压缩文件的方法是什么?
    • apk 文件是 zip 文件。所以它包含的大部分文件(包括 assets 子目录中的文件)都被压缩了。只有特定的文件,如 mp3、jpeg、png 和少数其他文件不会被压缩。
    • 对于压缩文件,您无法获取文件描述符。如果你是使用ant task构建apk,那么你可以修改aapt build task,将特定扩展名的文件排除在压缩之外:stackoverflow.com/questions/6809651/…当然,那你的apk文件会更大。
    • 谢谢。有没有办法配置eclipse的apk builder?
    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多