Hide Android asset SDK handles

This commit is contained in:
2026-06-05 11:54:02 +02:00
parent 0236fc6620
commit e17463bf5a
5 changed files with 47 additions and 29 deletions

View File

@@ -11,12 +11,21 @@
#ifdef __ANDROID__
#include <android/asset_manager.h>
#include <dirent.h>
AAssetManager* Asset::m_am;
void* Asset::m_android_asset_manager;
bool android_create_dir(const std::string& path);
void Asset::set_android_asset_manager(AAssetManager* asset_manager)
namespace {
[[nodiscard]] AAsset* android_asset_handle(void* asset)
{
m_am = asset_manager;
return static_cast<AAsset*>(asset);
}
}
void Asset::set_android_asset_manager(void* asset_manager)
{
m_android_asset_manager = asset_manager;
}
#endif
@@ -72,7 +81,7 @@ std::vector<std::string> Asset::list_files(std::string folder, const std::string
#elif __ANDROID__
if (is_asset)
{
AAssetDir* dir = AAssetManager_openDir(Asset::m_am, folder.c_str());
AAssetDir* dir = AAssetManager_openDir(static_cast<AAssetManager*>(Asset::m_android_asset_manager), folder.c_str());
while (const char* name = AAssetDir_getNextFileName(dir))
{
//LOG("asset: %s", name);
@@ -243,7 +252,10 @@ bool Asset::open(const char* path)
#ifdef __ANDROID__
if (is_asset(path))
{
if (!(m_asset = AAssetManager_open(m_am, path, AASSET_MODE_RANDOM)))
if (!(m_android_asset = AAssetManager_open(
static_cast<AAssetManager*>(m_android_asset_manager),
path,
AASSET_MODE_RANDOM)))
{
LOG("AAssetManager_open failed %s", path);
return false;
@@ -289,8 +301,8 @@ glm::uint8_t* Asset::read_all()
{
if (is_asset(m_current_path))
{
m_len = (int)AAsset_getLength(m_asset);
m_data = (uint8_t*)AAsset_getBuffer(m_asset);
m_len = (int)AAsset_getLength(android_asset_handle(m_android_asset));
m_data = (uint8_t*)AAsset_getBuffer(android_asset_handle(m_android_asset));
}
else
{
@@ -322,9 +334,9 @@ glm::uint8_t* Asset::read_all()
void Asset::close()
{
#ifdef __ANDROID__
if (m_asset)
AAsset_close(m_asset);
m_asset = nullptr;
if (m_android_asset)
AAsset_close(android_asset_handle(m_android_asset));
m_android_asset = nullptr;
#else
if (m_fp)
fclose(m_fp);

View File

@@ -1,19 +1,14 @@
#pragma once
#ifdef __ANDROID__
struct AAsset;
struct AAssetManager;
#endif
class Asset
{
public:
#ifdef __ANDROID__
static void set_android_asset_manager(AAssetManager* asset_manager);
static void set_android_asset_manager(void* asset_manager);
private:
static AAssetManager* m_am;
AAsset* m_asset = nullptr;
static void* m_android_asset_manager;
void* m_android_asset = nullptr;
public:
#endif