В Android имеется ещё один каталог, в котором могут храниться файлы, предназначенные для включения в пакет — assets. Этот каталог находится на том же уровне, что и res. Для файлов, располагающихся в assets, в R.java не генерируются идентификаторы ресурсов. Для их считывания необходимо указать путь к файлу. Путь к файлу является относительным и начинается с /assets.
Этот каталог, в отличие от подкаталога res, позволяет задавать произвольную глубину подкаталогов и произвольные имена файлов и подкаталогов.
По умолчанию проект в студии не содержит данную папку. Чтобы её создать, выберите меню File | New | Folder | Assets Folder.
Чтение файлов
Для доступа к файлам используется класс AssetManager. Пример для чтения текстового файла.
Сначала на Kotlin.
button.setOnClickListener < val sampleText: String = applicationContext.assets .open(«sample.txt») .bufferedReader().use < it.readText() >println(sampleText) >
String getStringFromAssetFile(Activity activity)
String text = filename; byte[] buffer = null; InputStream is; try < is = getAssets().open(text); int size = is.available(); buffer = new byte[size]; is.read(buffer); is.close(); >catch (IOException e) < e.printStackTrace(); >String str_data = new String(buffer); return str_data;
Для доступа к графическому файлу из актива можно использовать следующий код:
Как найти любой звук или файл в майнкрафте
public void loadImageFromAsset() < try < // получаем входной поток InputStream ims = getAssets().open(«cat.jpg»); // загружаем как Drawable Drawable d = Drawable.createFromStream(ims, null); // выводим картинку в ImageView mImage.setImageDrawable(d); >catch(IOException ex) < return; >>
Вы также можете загрузить изображение в Bitmap, используя BitmapFactory.decodeStream(), вместо Drawable.
Функция-расширение для Kotlin, которая вернёт Bitmap.
fun Context.assetsBitmap(path: String): Bitmap? < val inputStream: InputStream var bitmap: Bitmap? = null try < inputStream = assets.open(path) bitmap = BitmapFactory.decodeStream(inputStream) >catch (e: IOException) < // Handle exception here >return bitmap >
Используем собственные шрифты
Напишем практический пример создания приложения, в котором будут использоваться собственные шрифты, не входящие в стандартную библиотеку шрифтов Android. Для этого мы упакуем нужные шрифты вместе с приложением. Поместим в каталог assets/fonts файлы шрифтов (можно скачать бесплатные шрифты с сайтов 1001 Free Fonts или Urban Fonts ).
В файл разметки добавим пару текстовых полей с заготовленным текстом для вывода этого текста с нашим шрифтом.
В классе активности загрузим объект EditText из ресурсов, а затем создадим объект Typeface, используя вызов статического метода Typeface.createFromAsset(). Метод createFromAsset() принимает два параметра:
- объект AssetManager, который можно получить вызовом метода getAssets()
- путь к файлу актива.
Например, загрузить шрифт для текстового поля EditText можно следующим способом:
Запустив проект, мы увидим в текстовых полях надписи Happy New Year! и Meow!, выводимые нашими собственными шрифтами.
Пример для фрагмента.
Загрузка локальных файлов из активов в WebView
Если нужно загрузить локальные страницы и изображения из активов в WebView, то можно использовать префикс file://android_asset. Подробнее смотрите в статье про WebView.
myBrowser = (WebView)findViewById(R.id.mybrowser); myBrowser.loadUrl(«file:///android_asset/mypage.html»);
Получаем список файлов в папке assets
Можно получить список файлов, которые находятся в папке assets. Для быстрой проверки кода я вручную скопировал в папку два файла:
AssetManager myAssetManager = getApplicationContext().getAssets(); try < String[] Files = myAssetManager.list(«»); // массив имён файлов Toast.makeText(getApplicationContext(), Files[0] + «, » + Files[1], Toast.LENGTH_LONG).show(); >catch (IOException e)
Кроме ваших файлов, также возвращаются странные папки /images, /sounds, /webkit. Учитывайте это в своих проектах. Так как в папке можно создавать собственные подпапки, то можно воспользоваться вспомогательным методом:
void displayFiles(AssetManager mgr, String path) < try < String list[] = mgr.list(path); if (list != null) for (int i = 0; i < list.length; ++i) < Log.v(«Assets:», path + «/» + list[i]); displayFiles(mgr, path + «/» + list[i]); >> catch (IOException e) < Log.v(«List error:», «can’t list» + path); >> // вызываем метод public void onClick(View view) < final AssetManager mgr = getAssets(); displayFiles(mgr, «»); // содержимое папки /assets, включая странные папки displayFiles(mgr, «cats»); // содержимое подпапки /assets/cats >
Ограничение на размер файлов
По сети гуляет информация, что существует ограничение в 1 Мб на размер файлов в папке assets. При превышении размера у вас может появиться ошибка:
Data exceeds UNCOMPRESS_DATA_MAX
Я не сталкивался, поэтому рецепт решения проблемы не предлагаю.
Источник: developer.alexanderklimov.ru
Структура APK файла
Просмотреть, что находится внутри APK очень легко, для этого нам понадобится программа Winrar. Выбираем наше приложения APK и нажимаем открыть и при вопросе чем — выбираем Winrar.
Вот что лежит внутри APK при открытии его как архива.
- Файл AndroidManifest.xml – чтобы сразу стало ясно — это «Паспорт», внутри него описывается что находится в приложение:
1. Требования к приложению.
2. Структура приложения.
3. Версия приложения.
- Папка META-INF – содержит MANIFEST.MF(открывается текстовым редактором «блокнот»), открыв его можно увидеть контрольные суммы SHA-1 и пути к данным, версию стандарта Manifest-Version, файлы сертификата RSA или DSA, файл SF содержит пути к ресурсам и их контрольные суммы. META-INF – это файлы метаданных — данные о данных.
- Папка res — В этой папке все ресурсы программы «Начинка», которые разнесены по разным поддиректориям. Например папки ~ drawable~ находятся графические элементы приложения (иконки, статусы и другие картинки), layout – XML-файлы о размещении элементов графического интерфейса (GUI).
- classes.dex — программный код, который выполняется в Dalvik VM. Для тех кто не в курсе Android это смесь Linux ядра с виртуальной машиной Java.
- resources.arsc — скомпилированный XML-файл, содержит данные о ресурсах, которые использует программа.
- Папка assets – может и не быть в apk приложение, также содержат ресурсы.
- Папка lib – может и не быть в apk приложение. Приложение написано с использованием NDK, а в папке располагаются нативные библиотеки, к примеру можно писать приложения на c++.
- Папка com – может и не быть в apk приложение.
- Папка org – может и не быть в apk приложение.
- Папка udk – может и не быть в apk приложение.
Статьи по теме APK:
- Что такое APK?
- Необходимые инструменты для работы с APK
- Как устанавливать приложения для Android с расширением apk
- Как удалить приложения (программы, игры) на android?
- Как скачивать и покупать приложения с Google Play
- Что такое root в Android?
- Структура APK файла
- Разборка (декомпиляция) APK файла с помощью Apktool
- Локализация файла APK
- Упаковка APK приложения и подпись (компиляция и подпись)
- Выбор места установки приложения APK
- Редактирование и замена иконок в APK
- Узнаем какие права у приложения APK
- Как извлечь установочный файл с приложением (.apk) из системы
- Как удалить рекламу из приложений APK
- Как скачать приложение APK на компьютер с Google Play
- Какие встроенные (системные) приложения Android можно удалить
- Деодексирование системных приложений в Андроид
- Как редактировать системные apk
- Как получить исходный код приложения с расширением Apk
- Одексирование Android приложений
Источник: upgrade-android.ru
Зачем папка assets в laravel?
Вопрос весьма спорный и примитивный, но на то он и 99-ый в моей коллекции.
Настроен vshost на бла-бла-бла/public
Соответственно папка assets находится вне корня.
В чем ее суть? там и sass папочка лежит и css. Таким образом с подключением css возникает головняк.
Комментировать
Решения вопроса 2
Разработчик
В папке /assets, как правило лежат нескомпилированные стили и скрипты. Coffescript, sass, less. вот это все. И по идее нужно настроить Elixir (надстройка над гульпом), чтобы он отправлял в /public уже сконкатенированные и минифицированные файлы.
Такие дела, надеюсь, прояснил.
Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Поскольку в современной разработке большинство проектов делаются с использованием препроцессоров и сборщиков, в папке assets лежат исходники, а при помощи elixir (или любого другого инструмента) они собираются в public.
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Laravel
Laravel Relationships, не использовать left join, как заменить?
- 1 подписчик
- 20 часов назад
- 26 просмотров
Источник: qna.habr.com