【问题标题】:C++ android assetmanager reads files from app internal directoryC++ android资产管理器从应用程序内部目录读取文件
【发布时间】:2017-11-12 08:08:52
【问题描述】:

我在 C++ 代码中使用 AssetManager 来加载我的资产。但是如果app内部目录AssetManager中存在同名文件,请先检查并加载。

是否可以将 AssetManager 设置为避免内部应用程序目录中的文件并仅检查资产文件?

UPD:我错了。 AssetManager 工作正常。

【问题讨论】:

    标签: android c++ android-ndk java-native-interface android-assetmanager


    【解决方案1】:

    Java 和 NDK 的行为相同。两者都在引擎盖下使用AssetManager class。对于earlier versions of AssetManager.cppAssetManager::open() 的工作方式相同。

    理论上,可以调整 AssetManager 的行为(毕竟,AssetManager.addAssetPaths()public,并且可以通过反射获取),但没有记录的方法可以做到这一点,这意味着您无法知道您的 hack 是否适用于下一版本的 Android,或适用于某些供应商的自定义系统版本。

    我建议不要这样做。 检查内部目录中是否存在相同的文件,并在必要时删除或重命名它会更加安全。但无论如何,资产管理器通常不会从应用程序的内部文件目录中读取。 p>

    【讨论】:

    • 非常感谢。你的回答很干净,很有帮助。
    • 但是现在我有一个问题:你的观察在这里没有重现。也许你可以显示你的代码?也许这发生在某些平台上?
    • 是的。只需在我的仓库中查看此文件即可。 bitbucket.org/akk0rd87/akk0rdsdk/src/…GetAsset2Buffer 过程
    • 在我的实验中,我无法通过将文件添加到内部目录来更改 AAsset_read() 的结果。
    • 对不起。我弄错了,我的测试用例有一个错误。似乎 AssetsManager 真的只从资产中读取。非常感谢。
    猜你喜欢
    • 2011-07-02
    • 2017-03-16
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多