Подтвердить что ты не робот

Как ссылаться на актив в проекте библиотеки

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

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

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

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

4b9b3361

Ответ 1

Из Android Docs:

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

Инструменты не поддерживают использование исходных файлов ресурсов (сохраненных в каталоге assets/directory) в проекте библиотеки. Любые ресурсы ресурсов, используемые приложением, должны храниться в каталоге assets/application самого проекта приложения. Однако файлы ресурсов, сохраненные в каталоге res/, поддерживаются.

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

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

Ответ 2

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

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

MyLibProject/src/main/assets/test.html

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

file:///android_asset/test.html

Ответ 3

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

В Интернете много решений, поэтому я очень горжусь тем, что Ive обнаружил с помощью немного Eclipse Hackery.

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

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

  • Источник ссылки
  • Нажмите "Переменные". и Добавить новую переменную, то есть VAR_NAME_X. location:../../(relative_path_to_assets_project)
  • Нажмите Ok

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

Не нужно перенастраивать внутренние элементы Android или ничего. Его все способно в течение нескольких кликов Eclipse.

Ответ 4

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

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

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

Ответ 5

Я подтверждаю, что подход Даниэля Гранта работает, по крайней мере, в следующей ситуации: у целевого проекта нет папки с активами (или папка пуста, поэтому вы можете безопасно ее удалить). Я не настраивал какую-либо переменную. Просто настройте LinkSource следующим образом (просто пример)   Связанная папка:/home/matthew/workspace_moonblink/assetsForAdvocacy/assets   Имя папки: активы

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

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

Мой проект обращается к активам со следующим кодом:   String advocacyFolderInAssets = "no_smoking/";//папка под активами /   Строка fn = advocacyFolderInAssets + imageFilename;   Bitmap pristineBitmapForAdvocacy = getBitmapFromAsset (контекст, fn);

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

Ответ 6

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

Ответ 7

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

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