Вопрос

В классе, принадлежащем к Библиотека Проект, который я звоню:

webview.loadUrl("file:///android_asset/info.html", null);

К сожалению, это работает только если я дублировать файл info.html в Приложения Папка активов Project также.

Есть ли способ сказать код библиотеки Android: «Ищите этот файл в папке библиотеки активов, нет В папке активов приложения "?

Это было полезно?

Решение

От Android Docs:

Библиотечные проекты не могут включать необработанные активы

Инструменты не поддерживают использование необработанных файлов активов (сохраненных в активах/ каталоге) в библиотечном проекте. Любые ресурсы активов, используемые приложением, должны храниться в активах/ каталоге самого проекта приложения. Тем не менее, поддерживаются файлы ресурсов, сохраненные в RES/ Directory.

Если вы хотите включить файлы из библиотечного проекта, вам нужно поместить их в ресурсы вместо активов. Если вы пытаетесь загрузить HTML -файлы из своего библиотечного проекта в WebView, это означает, что вам придется использовать более круговой метод, чем обычный URL -адрес актива. Вместо этого вам придется прочитать данные ресурса и использовать что -то вроде LoadData.

Этот ответ устаревший, система сборки и AAR файлы поддерживают активы.

Другие советы

Теперь это возможно с помощью системы сборки Gradle.

Тестирование с Android Studio 0.5.0 и v0.9 плагина Android Gradle, я обнаружил, что такие файлы, как

MyLibProject/src/main/assets/test.html

правильно упакованы в окончательном приложении и могут быть доступны во время выполнения через ожидаемый URL:

file:///android_asset/test.html

Хорошо. Я некоторое время подчеркивал и терял сон по этому поводу. Я тот тип человека, который любит создание API и ненавидит сложную интеграцию.

В Интернете нет много решений, поэтому я очень горжусь тем, что я обнаружил с небольшим количеством хакерства затмения.

Оказывается, когда вы помещаете файл в папку Android Lib /Assets. Целевая APK захватит это и поместит его на корень архива APK. Таким образом, общий доступ к общему доступу. Это может быть решено, просто создав сырую библиотеку Java и поместив там все активы, т.е. (javalib)/Assets/filex.txt.

В свою очередь, вы можете включить это в качестве источника папки путей Java Build в Project> Projecties> Путь сборки Java> Источник> Источник ссылки.

  1. Ссылка источника
  2. Нажмите на переменные. и добавить новую переменную, то есть var_name_x. Местоположение: ../../(Relative_Path_TO_ASSETS_PROJECT)
  3. Нажмите ОК

Теперь, когда вы создаете и запускаете свое приложение, папка Assets в APK будет содержать ваши (глобальные библиотечные) файлы, как вы предназначались.

Нет необходимости перенастроить внутренние внутренности Android или ничего. Все это способно в нескольких кликах затмения.

Вы можете достичь этого, создав символическую ссылку в папке активов проекта, которая указывает на каталог в библиотечном проекте.

Тогда вы можете получить доступ, как ниже:

webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);

Я подтверждаю, что подход Даниэля Гранта работает по крайней мере для следующей ситуации: целевой проект не имеет папки активов (или папка пуста, поэтому вы можете безопасно удалить ее). Я не настраивал никакой переменной. Просто настроить Linksource следующим образом (только пример) Местоположение связанной папки:/Home/Matthew/Workspace_moonblink/Assetsforadvocacy/Assets Wame: Активы

«Assetsforadvocacy» - это Java Project (созданный с помощью New -Project - Java Project) с пустой папкой SRC, и новая папка с именем «активы», которая теперь предоставляет всю папку активов для целевого проекта.

Это довольно простой способ в Eclipse предоставить активы повторное использование в разных проектах, если у них еще нет активов, достаточно хороших, чтобы начать работу. Я бы, вероятно, хотел бы улучшить его, чтобы стать поставщиком контента в долгосрочной перспективе, но это намного больше развития.

Мой проект обращается к активам со следующим кодом: String AdvocacyFolderInassets = "NO_SMOKING/"; // папка под активами/строкой fn = advocacyfolderinassets+imagefilename; Bitmap pristinemapmapforadvocacy = getbitmapfromasset (context, fn);

Я использую Motodev Studio 3.1.0 на Ubuntu. Это не позволило бы мне «объединить» новую папку активов в новом проекте только для активов в существующую папку активов в целевом проекте.

Если вы хотите использовать настройку, в которой создаются несколько продуктов производных из одной библиотеки, вы можете рассмотреть возможность использования SVN: внешние или аналогичные решения в вашей системе SCM. Это также сделает трюк, что статические активы, такие как онлайн -справка, могут отдельно версировать от исходного кода Android.

я нашел Этот старый вопрос, это тоже может вам помочь.

Это официальный способ, которым Google использует для архивирования этого (из приведенного выше поста): Ссылка на сайт

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top