Активы отсутствуют в файле Android .apk - PullRequest
0 голосов
/ 16 октября 2019

Я использую собственный пример Android в libfont: https://github.com/julienr/libfont, чтобы создать приложение для Android C ++, которое может отображать текст.

Инструментом сборки является Visual Studio https://devblogs.microsoft.com/cppblog/android-and-ios-development-with-c-in-visual-studio/.

Код C / C ++ находится в подкаталоге jni, файл шрифтов LiberationSans-Bold.ttf находится в подкаталоге assets в образце libfont.

Приложение компилируется и собирается нормально. но файл шрифта не включен в окончательный вариант .apk

//
// To test if the assets are in the assets directory
//
bool _testFont()
{
    AAssetManager* manager = getApp()->activity->assetManager;

    AAssetDir* assetDir = AAssetManager_openDir(manager, "");   // Open root assets dir, assetDir is not NULL
    const char* fileName = AAssetDir_getNextFileName(assetDir); // Get first filename there -> fileName is NULL
}
//
// Original code 
//
bool _loadFont()
{
    LOGI("Loading font");

    AAssetManager* manager = getApp()->activity->assetManager;
    AAsset* fontFile = AAssetManager_open(manager, "LiberationSans-Bold.ttf", AASSET_MODE_BUFFER);
    //
    // Here fontfile is always NULL
    //
    if (!fontFile) 
    {
        LOGE("Error loading font file");
        return false;
    }
    const void* fontData = AAsset_getBuffer(fontFile);
    off_t fontLen = AAsset_getLength(fontFile);
    font = fontlib::FTLib::getInstance()->loadMemoryFont((const char*)fontData, fontLen, 30);
    AAsset_close(fontFile);
    if (!font)
    {
        LOGE("Error loading font");
        return false;
    }
    return true;
}

Так что мой вопрос: Какой механизм в процессе сборки заставляет компоновщик вызыватьфайл (ы) в каталоге активов?

1 Ответ

0 голосов
/ 17 октября 2019

Мне наконец-то удалось включить файл шрифта. Использование custom_rules.xml кажется правильным способом для достижения этой цели, но мне не повезло с таким подходом. Вместо этого я помещаю папку ресурсов в папку проекта Packaging и добавляю три строки в файл (имя_решения) .Packaging.androidproj

<ItemGroup>
  <Content Include="assets\LiberationSans-Bold.ttf" />
</ItemGroup>

Затем файл шрифтасодержимое было включено в .apk, и доступ к нему можно получить с помощью Asset Manager, как описано в моем предыдущем сообщении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...