Как ссылаться на актив в проекте библиотеки
В классе, принадлежащем проекту Библиотека, я вызываю:
webview.loadUrl("file:///android_asset/info.html", null);
К сожалению, это работает только в том случае, если я дублировать файл info.html в папку ресурса проекта приложения.
Есть ли способ рассказать код библиотеки Android: "Ищите этот файл в папке с ресурсами библиотеки, не в папке с ресурсами приложения"?
Ответы
Ответ 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 использует для архивирования этого (из вышеприведенного сообщения): Ссылка