Android ndk Android资产和NDK

Android ndk Android资产和NDK,android-ndk,Android Ndk,我正在尝试从本机代码中读取一个简单的文本文件 我将file.txt放在资产文件夹下 在我的活动中,我正在创建资产管理器:assetManager=getAssets() 然后我将assetManager传递给我的本机方法,并(如本机音频示例中所示): 问题是fd小于0 有人能帮上忙吗?AAsset\u openFileDescriptor仅适用于未压缩的文件(如mp3、jpg、png等)。它写在文档中(asset_manager.h头文件): /** *打开可用于读取资产数据的新文件描述符。

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

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

  • 问题是
    fd
    小于0


    有人能帮上忙吗?

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

    /**
    *打开可用于读取资产数据的新文件描述符。
    *
    *如果无法直接访问fd(例如,如果资产为
    *压缩)。
    */
    int AAsset_openFileDescriptor(AAsset*asset,off_t*outStart,off_t*outLength);
    

    使用
    AAsset\u read
    AAsset\u getBuffer

    谢谢。那么默认情况下它是压缩文本文件吗?很抱歉重新编译,但我确实需要filedescriptor,那么使用AAsset_read或AAsset_getBuffer来解压缩文件的方法是什么呢?apk文件是zip文件。所以它包含的大多数文件(包括资产子目录中的文件)都是压缩的。只有特定的文件,如mp3、jpeg、png和其他少数文件未压缩。对于压缩文件,您无法获取文件描述符。如果您使用ant任务构建apk,那么您可以修改aapt构建任务以从压缩中提取具有特定扩展名的文件:当然,这样您的apk文件会更大。谢谢。有没有办法配置eclipse的apk构建器?
    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);   
    
    /**
     * 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);