Содержание

[Конкурс] Android изнутри или просто о сложном — android.mobile-review.com

18 декабря 2012

Dreamer…

Facebook

Twitter

Вконтакте

Введение

Общаясь на форумах и являясь куратором нескольких тем, часто сталкиваюсь с полным непониманием новичков об устройстве андроида. «Ну, а зачем обычному пользователю знать это?» — скажете вы. И тут я с вами соглашусь, задав встречный вопрос: «А зачем тогда обычный пользователь лезет в дебри прошивок, root доступа и твиков системы, не понимая в этом ничего?». Именно это и натолкнуло меня на написание данной статьи, в которой я попытаюсь, обычным и понятным языком, донести сложные вещи.

Материал направлен, в первую очередь, на обычных пользователей. Поэтому здесь будет представлена сжатая и поверхностная информация без технических углублений и нюансов.

Содержание:

  1. Разделы внутренней памяти.
  2. Bootloader, recovery, adb и fastboot
  3. Внутренности системы.
  4. Root.

1. Разделы внутренней памяти

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

Приведу только основные:

Рис.1

Bootloader – здесь находится микропрограмма (загрузчик), позволяющая запускать операционную систему, рекавери и другие сервисные режимы.

Recovery – как видно из названия, тут установлено инженерное меню восстановления или просто Рекавери.

Boot – сердце Андроид ОС, тут находится ядро, драйвера и настройки управления процессором и памятью.

System – системный раздел, в котором находятся все, необходимые для работы Android ОС, файлы, это как папка Windows на вашем диске С:\ (здесь и далее буду проводить ассоциацию с ОС Windows)

Data – раздел для установки приложений и хранения их данных. (Program files)

User – это всем известная sdcard или, проще говоря, место под пользовательские файлы (Мои документы). Здесь я вынужден сделать отступление, т.к. размещение данного раздела имеет несколько вариантов:

  • Раздел отсутствует во внутренней памяти, а вместо него используется внешний накопитель — самый популярный вариант. (рис.1)
  • В устройствах со встроенной памятью большого размера, данный раздел видится как sdcard, а внешняя карта памяти видится как sdcard2 или extsd (могут быть и другие варианты названия). Обычно, встречается на устройствах с Android 3.2. (Рис.2 Вариант 1)
  • Данный вариант пришел на смену предыдущему варианту, вместе с Андроид 4.0. Раздел User заменили папкой media на разделе Data, что позволило использовать всю доступную пользователю память для установки программ и хранения данных, а не то количество, что выделил нам производитель. Иными словами sdcard и data являются одним целым.  (Рис.2 Вариант 2)


Рис.2

2. Bootloader, Recovery, adb и fastboot

Теперь, когда мы знаем, что и где находится, давайте разберемся для чего оно там.

Начнем с Bootloader. Это загрузчик, который запускает Андроид, рекавери и т.п. Когда мы нажимаем кнопку включения, запускается загрузчик и, если нет дополнительных команд (зажатых клавиш), запускает загрузку boot. Если же была зажата комбинация клавиш (у каждого устройства она своя) то запускает, в зависимости от команды, recovery, fastboot или apx. На рисунке ниже наглядно показано, что запускает Bootloader и как взаимосвязаны разделы.

Рис.3

Как видно из рисунка №3, раздел Recovery не влияет на загрузку Андроид ОС, но зачем же он тогда нужен? Давайте попробуем разобраться.

Recovery (рекавери) по сути является маленькой утилитой на ядре Linux и загружается не зависимо от Андроид. Его штатный функционал не богат: можно сбросить аппарат до заводских настроек или же обновить прошивку (заранее скачанную на sdcard). Но, благодаря народным умельцам, у нас есть модифицированные рекавери, через которые можно устанавливать модифицированные (кастомные) прошивки, настраивать андроид, создавать резервные копии и многое другое. Наличие или отсутствие рекавери, а также его версия не влияют на работоспособность Андроид ОС (очень частый вопрос на форумах).

Особо внимательные читатели могли заметить на Рис.3 некий Fastboot. Это интерфейс для работы напрямую с разделами внутренней памяти, при помощи командной строки. Через него можно прошить рекавери, ядро или новую версию прошивки, или же форматировать (удалить всю информацию) тот или иной раздел.

Раз уж зашла речь об интерфейсах, хочу рассказать о еще одном, довольно известном,- adb (android debug bridge). Это, так называемый, режим отладки и назван он так неспроста – через него можно отслеживать работу, как системы в целом, так и отдельных приложений. Но это еще не все, при помощи adb можно получить полный доступ к файловой системе устройства и изменять системные файлы или же вытянуть важную информацию, когда ваш девайс завис на загрузке. Все функции режима отладки описывать не буду т.к. моя цель донести общую информацию, а не подробный обзор о функциях того или иного режима.

3. Внутренности системы

Разобравшись с теорией, давайте запустим Андроид ОС.

Нажимаем кнопку питания — запускается Bootloader, который загружает Ядро (boot), оно, в свою очередь, запускает систему (System), ну, а она уже подгружает программы (data) и пользовательское пространство (user). (Рис.3)

А теперь перейдем в корневой каталог и посмотрим на внутренности самой Android OS:

(Рис.4)

В этой схеме я привел, только необходимые для ознакомления, директории. На самом деле их гораздо больше и на обзор только одной папки System понадобится целая статья.

И так, папка data. Как можно догадаться из названия, она как-то связана с данными, но с какими? Да практически со всеми, это и данные о синхронизации и аккаунтах, пароли к точкам доступа wifi и настройки vpn, и так далее. Среди всего прочего тут можно обнаружить папки app, data и dalvikcache – рассмотрим их назначение:

  • app – сюда устанавливаются программы и игры.
  • data – здесь хранятся данные приложений, их настройки, сэйвы игр и прочая информация.
  • dalvikcache — программная область кэш-памяти для программы Dalvik. Dalvik это Java-виртуальная машина, которая является основой для работы программ, имеющих *.apk расширение. Для того, чтобы сделать запуск программ быстрее — создается их кэш.

Папка System хранит в себе системные данные и все необходимое для работы ОС. Давайте рассмотрим некоторые из этих папок:

  • app – здесь находятся системные приложения (смс, телефон, календарь, настройки и т.п.), а так же приложения установленные производителем устройства (фирменные виджеты, живые обои и т.д.).
  • fonts – системные шрифты
  • media – содержит стандартные мелодии звонков, уведомлений, будильников и звуков интерфейса, а так же загрузочную анимацию (bootanimation)
  • build.prop – Этот файл упоминается, чуть ли не первым, в разговорах и статьях о тонкой настройке системы. В нем содержится огромное количество настроек, таких как плотность экрана, время задержки сенсора приближения, управление wifi, имя и производитель устройства и многие другие параметры.

4. Root

Знать что в какой папке это хорошо, но можно ли что-то с этим сделать?

— Да! Но нужны права суперпользователя (root) или, если проводить аналогию с Windows, права Администратора. Изначально все устройства на Андроид идут без root прав для конечного пользователя, т.е. покупая девайс, мы не являемся в нем полноценными хозяевами. Это сделано как для защиты от вредоносных программ, так и от самого пользователя – ведь, в неумелых руках, полный доступ к системе может привести к «смерти» операционной системы и последующей необходимости в перепрошивке устройства.

«Ну и в чем польза такой опасной штуки?» — спросите Вы.

Сейчас расскажу:

  • Возможность делать резервные копии данных и восстанавливать их после прошивки или случайного удаления.
  • Тонкая настройка системы вручную или при помощи специальных программ.
  • Удаление системных приложений, мелодий, обоев и т.п.
  • Изменение внешнего вида ОС (например, отображение заряда батареи в процентах)
  • Добавление функционала (поддержка adhoc сетей, к примеру)

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

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

— Нет. Вы сами решаете разрешить, тому или иному приложению, получить root доступ, или нет. Для этого существует программа Superuser или ее продвинутая сестра SuperSU. Без этой или подобной программы воспользоваться root не возможно.

Эпилог

Как видите, Андроид не такая уж и сложная штука. Надеюсь, после прочтения статьи, вы узнали что-то новое или получили ответ на давно интересовавший вопрос.

Засим откланиваюсь, до встречи в комментариях. 😉

Dreamer…

Папки в Android-смартфоне и что они означают — android.mobile-review.com

24 января 2017

Константин Иванов

Facebook

Twitter

Вконтакте

По материалам androidauthority.com

Файловые менеджеры на Android могут быть удобным инструментом для организации хранения данных в вашем смартфоне, но сама структура Android (или ее кажущееся отсутствие) c непривычки может показаться несколько запутанной. Данные приложений, картинки, музыка – и доступ к этому всему из одной корневой папки – это несколько иной подход к иерархической структуре, чем то, к чему привыкли пользователи ПК и Mac, и подход этот дает пользователям намного больше возможностей, чем iOS.

В Android вы не сможете получить доступ к глубоко спрятанным системным файлам через обычный файловый менеджер или с помощью подключения к ПК. Но это не значит, что вы можете удалить по своей прихоти любой файл, какой захотите. Давайте посмотрим, как организованы типичные папки в памяти устройства, для чего они нужны и что из этого вы можете удалить, а что нет.

Иерархия памяти устройства на Android

Поскольку Android – это операционная система на базе Linux, в вашем телефоне файловая система также организована по принципу Linux. В этой системе на каждом устройстве есть шесть основных разделов: boot, system, recovery, data, cache и misc. Карты памяти microSD также имеют собственную иерархию памяти. Устройства, несущие на борту Android 7.0 Nougat, получили возможность непрерывного обновления за счет того, что в пару к системному разделу создается второй и один из них в фоне обновляется, а при перезагрузке происходит переключение, позволяющее обновленной системе заработать.

Вот краткое описание того, что содержится в каждой папке.

  • boot – Эта папка содержит ядро, виртуальный диск и др., то есть то, что требуется для загрузки телефона, когда вы его включаете.
  • system – Папка system содержит файлы операционной системы (также известные как образ системы), которые включают в себя также графический интерфейс Android и предустановленные приложения.
  • recovery – Альтернативная возможность загрузить ОС, программы из папки recovery позволяют пользователю делать бэкапы других папок и восстанавливать их.
  • data – Папка data сохраняет информацию пользователя, от контактов и сообщений до приложений и музыки, и вот к этому разделу вы имеете доступ через файловый браузер. После сброса до заводских настроек этот раздел стирается.
  • cache – Android хранит здесь часто используемые данные и компоненты приложений. Этот раздел может быть стерт для устранения определенных проблем и автоматически восстановлен и обновлен со временем.
  • misc – Этот раздел содержит другую важную информацию о настройках системы, такую как конфигурация USB, настроек сети вашего оператора и другие аппаратные настройки, которые в графическом интерфейсе отображаются в виде переключателей вкл./выкл.

Без root–прав пользователи Android могут иметь доступ только к разделу с данными, который открывается вам, когда вы подключаете устройство к своему ПК или используете файловый браузер. Если память вашего телефона может быть расширена при помощи карты, память карты также включается в этот раздел с данными, доступными через ПК или просмотрщик файлов.

Обычно у вас есть доступ только данным приложений, которые хранятся в разделе пользовательских данных. Для доступа к остальной памяти вам потребуются root-права

Приложения и папки в разделе данных

Итак, бегло окинув взглядом основные папки, мы отметили, что у нас нет доступа к загрузочным файлам, файлам восстановления и или системным файлам Android, когда мы просто просматриваем файлы при помощи браузера. Из чего следует утешительный вывод: нельзя просто так взять и вызвать своими действиями крах системы. Совсем другая ситуация возникает, когда у вас есть root-права. Так или иначе, с тем, что хранится в данном разделе, надо быть поаккуратнее: определенные приложения могут задействовать данные, которые здесь сохранены, и перемещение или удаление их может повлечь за собой нестабильную работу системы.

Теперь давайте посмотрим, что находится в разделе данных на вашем устройстве. Для того, чтобы это было возможно, в телефонах с Android версий Marshmallow или Nougat есть свой файловый менеджер, который дает доступ ко всему разделу. Эту опцию можно найти в меню Настройки- Память-Накопитель-Другое. Ряд аппаратов на более старых версиях Android могут иметь, а могут не иметь собственный файловый менеджер, зависит от производителя.

В качестве альтернативы есть множество сторонних приложений, доступных в Play Store, которые выполняют ту же самую роль, например, FX File Explorer или Total Commander.

Можно также управлять вашими файлами с вашего ПК при помощи подключения по USB. Стоит только удостовериться, что ваш телефон находится в режиме MTP (Передача файлов), чтобы вы могли видеть все свои файлы.

Получить доступ к памяти вашего устройства можно при помощи ПК или напрямую через файловый браузер

Если у вас есть ощущение, что память устройства выглядит переполненной и папок слишком много, приглядитесь к ним. Вы увидите многочисленные папки, связанные с приложениями, возможно, даже остатки от тех приложений, что вы уже удалили. Как правило, лучше не трогать никакие папки приложений, но если вы помните, что приложение было удалено, а папка от него осталась, ее удаление вреда не причинит. Скорее всего, она пустая или в ней остались какие-то бесполезные лог-файлы.

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

  • Android – это место, куда по умолчанию сохраняются кэш приложений и данные. Эту папку не рекомендуется удалять, если вы не хотите потерять данные приложений. Удаление этой папки может привести к некорректной работе некоторых из них.
  • Alarms, Ringtones, Notifications – как видно из названий, в этих папках хранятся аудиофайлы для будильников, рингтонов и уведомлений, которые могут быть использованы как дефолтными, так и сторонними приложениями.
  • Cardboard – здесь хранятся данные для ряда приложений VR, а если таковых нет, она остается пустой.
  • DCIM – здесь лежат фотографии, которые вы делали при помощи своего основного приложения камеры. Также вы можете увидеть такую папку и на карте microSD, если вы сохраняете фотографии и на нее.
  • Downloads – здесь находится все, что скачано вами в веб-браузере, например, в Chrome или Firefox.
  • Pictures, Music, Movies, Video – Это папки, которые по умолчанию используются вашими медиаприложениями. Некоторые приложения позволяют вам назначать другие папки, но большая часть медиаплееров по умолчанию будет использовать эти директории. Скриншоты чаще всего сохраняются в папке с картинками.
  • Podcasts – Эта папка используется рядом приложений, чтобы отделять подкасты от остальных музыкальных файлов. Если вы не пользуетесь приложениями для прослушивания подкастов, она будет пустой.

Итак, какие папки мне можно (или нужно) удалять?

Не уверен – не удаляй. Это справедливо для всех папок приложений, и трогать их не стоит, за исключением тех случаев, когда вы точно знаете, что хотите сделать. Добавлять и удалять файлы из любых папок с медиа абсолютно безопасно, но постарайтесь в порыве наведения порядка не снести саму папку. Если вы видите, что папка пуста, например, ничего нет в папке Alarms, вы, можете подумать, что она и сама не нужна. Но, с другой стороны, папка не занимает много места. И возможно, она потребуется какому-либо приложению впоследствии, поэтому так ли вам необходимо ее удалять?

Со временем встроенная память вашего устройства будет содержать гораздо больше папок, чем было перечислено выше. Вы будете устанавливать и удалять все большее число приложений. Поэтому наводить порядок в своем устройстве никогда не повредит, ну, разве что вы вообще редко перемещаете файлы в своем телефоне, скачиваете и удаляете их. И еще, удаление пустой папки не освободит вам дополнительного места в памяти. Так что, если требуется выиграть место, лучше посмотрите, какие вы можете удалить ненужные приложения/фильмы, которые не станете пересматривать и т.п.

Теперь, когда вы получили более полную картину того, что это за папки хранятся в памяти вашего устройства, вам будет проще управлять своими файлами, не боясь «сделать что-нибудь не то».

Как работает Android, часть 1 / Блог компании Ростелеком-Солар / Хабр

В этой серии статей я расскажу о внутреннем устройстве Android  —  о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.

Статьи серии:


Немного фактов

Android  —  самая популярная операционная система и платформа для приложений, насчитывающая больше двух миллиардов активных пользователей. На ней работают совершенно разные устройства, от «интернета вещей» и умных часов до телевизоров, ноутбуков и автомобилей, но чаще всего Android используют на смартфонах и планшетах.

Android  —  свободный и открытый проект. Большинство исходного кода (который можно найти на https://source.android.com) распространяется под свободной лицензией Apache 2.0.

Компания Android Inc. была основана в 2003 году и в 2005 году куплена Google. Публичная бета Android вышла в 2007 году, а первая стабильная версия  —  в 2008, с тех пор мажорные релизы выходят примерно раз в год. Последняя на момент написания стабильная версия Android  —  7.1.2 Nougat.

Android is Linux

По поводу такой формулировки было много споров, так что сразу поясню, что именно я имею в виду под этой фразой: Android основан на ядре Linux, но значительно отличается от большинства других Linux-систем.

Среди исходной команды разработчиков Android был Robert Love, один из самых известных разработчиков ядра Linux, да и сейчас компания Google остаётся одним из самых активных контрибьюторов в ядро, поэтому неудивительно, что Android построен на основе Linux.

Как и в других Linux-системах, ядро Linux обеспечивает такие низкоуровневые вещи, как управление памятью, защиту данных, поддержку мультипроцессности и многопоточности. Но  —  за несколькими исключениями  —  вы не найдёте в Android других привычных компонентов GNU/Linux-систем: здесь нет ничего от проекта GNU, не используется X.Org, ни даже systemd. Все эти компоненты заменены аналогами, более приспособленными для использования в условиях ограниченной памяти, низкой скорости процессора и минимального потребления энергии  — таким образом, Android больше похож на встраиваемую (embedded) Linux-систему, чем на GNU/Linux.

Другая причина того, что в Android не используется софт от GNU  —  известная политика «no GPL in userspace»:

We are sometimes asked why Apache Software License 2.0 is the preferred license for Android. For userspace (that is, non-kernel) software, we do in fact prefer ASL 2.0 (and similar licenses like BSD, MIT, etc.) over other licenses such as LGPL.

Android is about freedom and choice. The purpose of Android is promote openness in the mobile world, and we don’t believe it’s possible to predict or dictate all the uses to which people will want to put our software. So, while we encourage everyone to make devices that are open and modifiable, we don’t believe it is our place to force them to do so. Using LGPL libraries would often force them to do just that.

Само ядро Linux в Android тоже немного модифицировано: было добавлено несколько небольших компонентов, в том числе ashmem (anonymous shared memory), Binder driver (часть большого и важного фреймворка Binder, о котором я расскажу ниже), wakelocks (управление спящим режимом) и low memory killer. Исходно они представляли собой патчи к ядру, но их код был довольно быстро добавлен назад в upstream-ядро. Тем не менее, вы не найдёте их в «обычном линуксе»: большинство других дистрибутивов отключают эти компоненты при сборке.

В качестве libc (стандартной библиотеки языка C) в Android используется не GNU C library (glibc), а собственная минималистичная реализация под названием bionic, оптимизированная для встраиваемых (embedded) систем  —  она значительно быстрее, меньше и менее требовательна к памяти, чем glibc, которая обросла множеством слоёв совместимости.

В Android есть оболочка командной строки (shell) и множество стандартных для Unix-подобных систем команд/программ. Во встраиваемых системах для этого обычно используется пакет Busybox, реализующий функциональность многих команд в одном исполняемом файле; в Android используется его аналог под названием Toybox. Как и в «обычных» дистрибутивах Linux (и в отличие от встраиваемых систем), основным способом взаимодействия с системой является графический интерфейс, а не командная строка. Тем не менее, «добраться» до командной строки очень просто  —  достаточно запустить приложение-эмулятор терминала. По умолчанию он обычно не установлен, но его легко, например, скачать из Play Store (Terminal Emulator for Android, Material Terminal, Termux). Во многих «продвинутых» дистрибутивах Android  —  таких, как LineageOS (бывший CyanogenMod)  —  эмулятор терминала предустановлен.

Второй вариант  —  подключиться к Android-устройству с компьютера через Android Debug Bridge (adb). Это очень похоже на подключение через SSH:

user@desktop-linux$ adb shell
android$ uname
Linux

Из других знакомых компонентов в Android используются библиотека FreeType (для отображения текста), графические API OpenGL ES, EGL и Vulkan, а также легковесная СУБД SQLite.

Кроме того, раньше для реализации WebView использовался браузерный движок WebKit, но начиная с версии 7.0 вместо этого используется установленное приложение Chrome (или другое; список приложений, которым разрешено выступать в качестве WebView provider, конфигурируется на этапе компиляции системы). Внутри себя Chrome тоже использует основанный на WebKit движок Blink, но в отличие от системной библиотеки, Chrome обновляется через Play Store  —  таким образом, все приложения, использующие WebView, автоматически получают последние улучшения и исправления уязвимостей.

It’s all about apps

Как легко заметить, использование Android принципиально отличается от использования «обычного Linux» —  вам не нужно открывать и закрывать приложения, вы просто переключаетесь между ними, как будто все приложения запущены всегда. Действительно, одна из уникальных особенностей Android — в том, что приложения не контролируют напрямую процесс, в котором они запущены. Давайте поговорим об этом подробнее.

Основная единица в Unix-подобных системах  —  процесс. И низкоуровневые системные сервисы, и отдельные команды в shell’е, и графические приложения  —  это процессы. В большинстве случаев процесс представляет собой чёрный ящик для остальной системы  —  другие компоненты системы не знают и не заботятся о его состоянии. Процесс начинает выполняться с вызова функции main() (на самом деле _start), и дальше реализует какую-то свою логику, взаимодействуя с остальной системой через системные вызовы и простейшее межпроцессное общение (IPC).

Поскольку Android тоже Unix-подобен, всё это верно и для него, но в то время как низкоуровневые части  —  на уровне Unix  —  оперируют понятием процесса, на более высоком уровне  —  уровне Android Framework  —  основной единицей является приложение. Приложение  —  не чёрный ящик: оно состоит из отдельных компонентов, хорошо известных остальной системе.

У приложений Android нет функции main(), нет одной точки входа. Вообще, Android максимально абстрагирует понятие приложение запущено как от пользователя, так и от разработчика. Конечно, процесс приложения нужно запускать и останавливать, но Android делает это автоматически (подробнее я расскажу об этом в следующих статьях). Разработчику предлагается реализовать несколько отдельных компонентов, каждый из которых обладает своим собственным жизненным циклом.

In Android, however, we explicitly decided we were not going to have a main() function, because we needed to give the platform more control over how an app runs. In particular, we wanted to build a system where the user never needed to think about starting and stopping apps, but rather the system took care of this for them… so the system had to have some more information about what is going on inside of each app, and be able to launch apps in various well-defined ways whenever it is needed even if it currently isn’t running.

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

Этот механизм  —  Binder.

Binder

Binder  —  это платформа для быстрого, удобного и объектно-ориентированного межпроцессного взаимодействия.

Разработка Binder началась в Be Inc. (для BeOS), затем он был портирован на Linux и открыт. Основной разработчик Binder, Dianne Hackborn, была и остаётся одним из основных разработчиков Android. За время разработки Android Binder был полностью переписан.

Binder работает не поверх System V IPC (которое даже не поддерживается в bionic), а использует свой небольшой модуль ядра, взаимодействие с которым из userspace происходит через системные вызовы (в основном ioctl) на «виртуальном устройстве» /dev/binder. Со стороны userspace низкоуровневая работа с Binder, в том числе взаимодействие с /dev/binder и marshalling/unmarshalling данных, реализована в библиотеке libbinder.

Низкоуровневые части Binder оперируют в терминах объектов, которые могут пересылаться между процессами. При этом используется подсчёт ссылок (reference-counting) для автоматического освобождения неиспользуемых общих ресурсов и уведомление о завершении удалённого процесса (link-to-death) для освобождения ресурсов внутри процесса.

Высокоуровневые части Binder работают в терминах интерфейсов, сервисов и прокси-объектов. Описание интерфейса, предоставляемого программой другим программам, записывается на специальном языке AIDL (Android Interface Definition Language), внешне очень похожем на объявление интерфейсов в Java. По этому описанию автоматически генерируется настоящий Java-интерфейс, который потом может использоваться и клиентами, и самим сервисом. Кроме того, по .aidl-файлу автоматически генерируются два специальных класса: Proxy (для использования со стороны клиента) и Stub (со стороны сервиса), реализующие этот интерфейс.

Для Java-кода в процессе-клиенте прокси-объект выглядит как обычный Java-объект, который реализует наш интерфейс, и этот код может просто вызывать его методы. При этом сгенерированная реализация прокси-объекта автоматически сериализует переданные аргументы, общается с процессом-сервисом через libbinder, десериализует переданный назад результат вызова и возвращает его из Java-метода.

Stub работает наоборот: он принимает входящие вызовы через libbinder, десериализует аргументы, вызывает абстрактную реализацию метода, сериализует возвращаемое значение и передаёт его процессу-клиенту. Соответственно, для реализации сервиса программисту достаточно реализовать абстрактные методы в унаследованном от Stub классе.

Такая реализация Binder на уровне Java позволяет большинству кода использовать прокси-объект, вообще не задумываясь о том, что его функциональность реализована в другом процессе. Для обеспечения полной прозрачности Binder поддерживает вложенные и рекурсивные межпроцессные вызовы. Более того, использование Binder со стороны клиента выглядит совершенно одинаково, независимо от того, расположена ли реализация используемого сервиса в том же или в отдельном процессе.

Для того, чтобы разные процессы могли «найти» сервисы друг друга, в Android есть специальный сервис ServiceManager, который хранит, регистрирует и выдаёт токены всех остальных сервисов.

Binder широко используется в Android для реализации системных сервисов (например, пакетного менеджера и буфера обмена), но детали этого скрыты от разработчика приложений высокоуровневыми классами в Android Framework, такими как Activity, Intent и Context. Приложения могут также использовать Binder для предоставления друг другу собственных сервисов  —  например, приложение Google Play Services вообще не имеет собственного графического интерфейса для пользователя, но предоставляет разработчикам других приложений возможность пользоваться сервисами Google Play.

Подробнее про Binder можно узнать по этим ссылкам:

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

Архитектура Android-приложений. Часть I — истоки / Хабр

В этой статье мы рассмотрим архитектуру Android-приложений.

Откровенно говоря, официальную статью Google по этой теме я считаю не очень полезной. Детально отвечая на вопрос «как», она совсем не объясняет «что» и «почему». Итак, вот моя версия, и, я надеюсь, она внесёт некоторую ясность. Да, кстати, я полностью одобряю чтение статей Google, поскольку они содержат полезную информацию, повторять которую я не собираюсь.

Архитектура ОС Android — немного истории

Как это часто бывает в IT, многие вещи не могут быть объяснены в отрыве от истории возникновения конкретного программного обеспечения. Вот почему мы должны обратиться к истокам ОС Android.

Разработка ОС Android была начата в 2003 молодой компанией Android Inc. В 2005 году эта компания была куплена Google. Я считаю, что главные особенности архитектуры Android были определены именно в этот период. Это заслуга не только Android Inc; архитектурные концепции и финансовые ресурсы Google оказали решающее влияние на архитектуру Android. Далее я приведу несколько примеров.

Если вы помните, 2003-2005 года были ознаменованы повышенным вниманием к AJAX приложениям. Я думаю, это оказало основополагающее влияние на архитектуру Android: во многих аспектах она ближе к архитектуре типичного AJAX приложения, нежели к десктопному GUI приложению, написанному на Java, C#, C++, VB и тп.

Не знаю, почему так произошло. Моя догадка — это придумал кто-то из Google в тот период, когда насыщенные интернет-приложения (Rich Internet Applications, RIA) в духе Google Docs или Gmail считались решением всех проблем. По-моему, эту идею нельзя назвать ни плохой, ни хорошей. Просто помните, что Android-приложения очень сильно отличаются от десктопных.

Влияние архитектурной философии Eclipse заметно в выборе принципа реализации GUI, который больше похоже на SWT, нежели на Swing.

В стандартах оформления кода Android присутствует «венгерская нотация», рождённая в стенах MS. Можно предположить, что тот, кто писал эти стандарты, ранее занимался разработкой под Windows.

Архитектурные уровни Android

Операционная система Android имеет три весьма различных и сильно отделённых друг от друга уровня:

  1. В основе лежит модифицированная и урезанная версия Linux, как я и упоминал в одной из моих предыдущих статей.
  2. Над уровнем Linux находится уровень инфраструктуры приложения, содержащий виртуальную машину Dalvik, веб-браузер, базу данных SQLite, некие инфраструктурные «костыли» и Java API.
  3. И, наконец, уровень написанных в Google Android-приложений. Вообще говоря, они являются расширением уровня инфраструктуры, поскольку разработчик может использовать эти приложения или их части как строительные блоки для собственных разработок.

Рассмотрим эти слои один за другим и более подробно.

Уровень Linux

Представьте себе, что вы — архитектор в молодой компании. Вы должны разработать ОС для нового типа устройств. Что вы будете делать?

Грубо говоря, у вас два пути: реализовывать собственные идеи, начав с нуля или же использовать существующую ОС и адаптировать её под свои устройства.

Реализация с нуля всегда звучит захватывающе для программистов. В эти моменты мы все верим в то, что в этот раз мы всё сделаем лучше, чем делают другие, и даже лучше, чем мы сами делали ранее.

Тем не менее, это не всегда практично. Например, использование ядра Linux заметно уменьшило стоимость разработки (возможно где-то и без того чрезмерно большую). Согласитесь, если кто-то решит создать нечто, напоминающее ядро Linux в его сегодняшнем состоянии, ему потребуется несколько миллионов долларов.

Если вы руководите Android Inc, то у вас по определению не может быть столько денег. Если вы руководите Google, то у вас такие деньги найдутся, но вы, скорее всего, подумаете дважды, прежде чем потратить их на создание собственной ОС. Так же вы потратите несколько лет, прежде чем достигните сегодняшнего состояния Linux; несколько лет задержки могут стать слишком большим опозданием при выходе на рынок.

В подобной ситуации компания Apple решила построить Mac OS на основе Free BSD. Android Inc приняла решение использовать Linux как основу для Android. Исходники как Free BSD, так и Linux, находятся в свободном доступе и предоставляют собой хорошую основу для любых разработок, будь то Apple или Google.

Но в то время запустить стандартный Linux на мобильном устройстве было невозможно (сейчас это уже не так). Устройства имели слишком мало оперативной и энергонезависимой памяти. Процессоры были значительно медленнее по сравнению с процессорами компьютеров, где обычно используется Linux. Как результат, разработчики Android решили минимизировать системные требования Linux.

Если рассматривать Linux на высоком уровне, то это комбинация ядра (без которого нельзя обойтись) и множества других, необязательных частей. Можно даже запустить одно ядро, без чего бы то ни было ещё. Так, Google вынуждена в любом случае использовать ядро Linux как часть ОС Android. Кроме того, были рассмотрены необязательные части и из них выбрано самое необходимое. Например, были добавлены сетевой фаервол IPTables и оболочка Ash. Любопытно, что добавили именно Ash, а не Bash, не смотря на то, что последний на порядок мощнее; вероятно, это решение было основано на том, что Ash менее требователен к ресурсам.

Разработчики Android модифицировали ядро Linux, добавив поддержку железа, используемого в мобильных устройствах и, чаще всего, недоступного на компьютерах.

Выбор Linux в качестве основы оказал огромное влияние на все аспекты ОС Android. Сборка Android, по сути, есть вариация процесса сборки Linux. Код Android находится под управлением git (инструмент, разработанный для управления кодом Linux). И так далее.

Пускай это всё и интересно, но вы, скорее всего, никогда не коснётесь всех этих специфических моментов до тех пор, пока ваша цель просто разработать приложения под Android. Исключение может составить разве что обзор файловой системы с помощью команд ash. Главное, что вы должны знать, разрабатывая приложения под Android — это уровень инфраструктуры приложения.

Вы можете спросить, как же быть, если необходимо разработать нативное приложение для Android? Google настоятельно не рекомендует делать этого. Технически, конечно, это возможно, но в дальнейшем у вас не будет возможности распространять это приложение нормальным способом. Так что подумайте дважды, прежде чем начать нативную разработку под Android, если конечно, вы не работает над Android Open Source Project (AOSP), т.е. собственно ОС Android.

Уровень инфраструктуры приложения

Несмотря на некоторое сходство Apple iOS и Android ОС, существуют значительные отличия между архитектурными решениями на инфраструктурном уровне обоих ОС.

Apple решила использовать Objective-C как язык программирования и среду выполнения приложения iOS. Objective-C выглядит более или менее естественным выбором для ОС, в основе которой лежит Free BSD. Можно рассматривать Objective-C как обычный C++ с кастомным препроцессором, который добавляет некоторые специфические лингвистические конструкции. Почему же нельзя использовать стандартный C++, на котором написана Free BSD? Мне кажется причина в том, что Apple старается всё делать в своём, «эппловском» стиле.

Основная идея в том, что приложения iOS написаны более или менее на том же языке, что и стоящая за ними ОС.

Android-приложения сильно отличаются в этом смысле. Они написаны на Java, а это совсем другая технология, нежели C++ (хотя синтаксис и унаследован от C++).

Почему это так? Почему, например, Android-приложения не написаны на C++? Со стороны Google я не нашёл никаких объяснений, поэтому могу поделиться лишь собственными соображениями.

Я думаю, основная причина состоит в необходимости одному и тому же приложению работать на различном аппаратном обеспечении. Эта проблема имеет место лишь для ОС Android; у ребят из Apple такой проблемы нет. iOS работает только на оборудовании собственного производства, и Apple полностью контролирует весь процесс. Для Android же всё наоборот: Google не контролирует производителей аппаратных средств. Например, ОС Android работает на процессорах с архитектурой x86, ARM и Atom (в комментах подсказывают, что x86 включает в себя Atom, и Android работает на x86, ARM, PPC и MIPS — примечание переводчика). На бинарном уровне эти архитектуры несовместимы.

Если бы архитекторы ОС Android выбрали тот же путь, что и архитекторы из Apple, разработчики приложений под Android были бы вынуждены распространять несколько версий одного и того же приложения одновременно. Это стало бы серьёзной проблемой, которая могла бы привести к краху всего проекта Android.

Для того, чтобы одно и то же приложение могло работать на разном аппаратном обеспечении, компания Google использовала контейнер-ориентированную архитектуру (container-based architecture). В такой архитектуре двоичный код выполняется программным контейнером и изолируется от деталей конкретного аппаратного обеспечения. Примеры всем знакомы — Java и C#. В обоих языках двоичный код не зависит от специфики аппаратного обеспечения и выполняется виртуальной машиной.

Конечно, есть и другой способ достигнуть независимости от аппаратного обеспечения на уровне двоичного кода. Как один из вариантов, можно использовать эмулятор аппаратного обеспечения, так же известный как QEMU. Он позволяет эмулировать, например, устройство с процессором ARM на платформе x86 и так далее. Google могла бы использовать C++ как язык для разработки приложений внутри эмуляторов. Действительно, Google использует такой подход в своих эмуляторах Android, которые построены на основе QEMU.

Очень хорошо, что они не пошли по такому пути, поскольку тогда кому-то пришлось бы запускать ОС на эмуляторе, требующем намного больше ресурсов, и, как итог, скорость работы снизилась бы. Для достижения наилучшего быстродействия эмуляция была оставлена только там, где этого нельзя было избежать, в нашем случае — в Android-приложениях.

Как бы то ни было, компания Google пришла к решению использовать Java как основной язык разработки приложений и среды их выполнения.

Я думаю, это было критически важное архитектурное решение, которое поставило Android в стороне от остальных мобильных ОС на основе Linux, представленных в настоящее время. Насколько мне известно, ни у одной из них нет совместимости двоичного кода на уровне приложений. Возьмём для примера MeeGo. Она использует C++ и фреймворк Qt; не смотря на то, что Qt кроссплатформенный, необходимость делать разные сборки для разных платформ не исчезает.

Выбрав Java, нужно было решить, какую виртуальную машину (JVM) использовать. Ввиду ограниченности ресурсов использование стандартной JVM было затруднено. Единственным возможным выбором было использование Java ME JVM, разработанной для мобильных устройств. Однако счастье Google было бы неполным без разработки собственной виртуальной машины, и появилась Dalvik VM.

Dalvik VM отличается от других виртуальных Java-машин следующим:

  • Она использует специальный формат DEX для хранения двоичных кодов, в противовес форматам JAR и Pack200, которые являются стандартом для других виртуальных Java-машинах. Компания Google заявила, что бинарники DEX меньше, чем JAR. Я думаю, с тем же успехом они могли бы использовать Pack200, но они решили пойти своим путём.
  • Dalvik VM оптимизирована для выполнения нескольких процессов одновременно.
  • Dalvik VM использует архитектуру, основанную на регистрах против стековой архитектуры в других JVM, что приводит к увеличению скорости выполнения и уменьшению размеров бинарников.
  • Она использует собственный набор инструкций (а не стандартный байткод JVM)
  • Возможен запуск (если необходимо) нескольких независимых Android-приложений в одном процессе
  • Выполнение приложения может охватывать несколько процессов Dalvik VM «естественным образом» (позже мы обсудим, что это значит). Для поддержи этого добавлено:
    • Специальный механизм сериализации объектов, основанный на классах Parcel и Parcelable. Функционально преследуются те же цели, что и Java Serializable, но в результате данные имеют меньший объём и потенциально более терпимы к версионным изменениям классов.
    • Особый способ для выполнения вызовов между процессами (inter process calls, IPC), основный на Android Interface Definition Language (AIDL).
  • До Android 2.2 Dalvik VM не поддерживала JIT-компиляцию, что было серьёзным ударом по производительности. Начиная с версии 2.2, скорость выполнения часто используемых приложений заметно возросла.

Ребята из Google также пересмотрели стандартные пакеты Java JDK API. Они удалили некоторые из них (например всё, что касалось Swing) и добавили некоторое количество собственных — их имя начинается с «android».

Также они добавили несколько пакетов с открытым кодом, не являющихся частью стандартного JDK: Bouncy Castle crypto API, HTTPClient с поддержкой разделения HTTP/HTTPS на стороне клиента.

Также Google добавила веб-браузер в уровень инфраструктуры приложения. Это не полноценный Google Chrome для мобильных устройств, но очень близок к нему, поскольку основан на том же движке WebKit и использует движок JavaScript V8 из Chrome. В конце концов, это крайне современный и высокотехнологичный браузер. Он может быть интегрирован в любые Android-приложения.

На сегодня это всё. В следующей статье мы сосредоточим внимание на архитектуре Android-приложений.

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

Следующие статьи:

структура, назначение папок в файловой системе

Структура файловой системы Android в обычном режиме скрыта от пользователя. Доступ к различным данным осуществляется через соответствующие приложения: галерею мультимедии, контакты, текстовые редакторы и другие. Чтобы вносить изменения в системные настройки и работать непосредственно с файлами, нужно воспользоваться файловым менеджером. Перед внесением изменений необходимо разобраться в тонкостях устройства файловой системы Андроид.

Компоненты

Файловая система Андроид-устройств организована несколько иначе, чем привычная Windows. В корневой каталог можно попасть из файлового менеджера (обычно он называется «Проводник», «File Commander», «Total Commander»). Далее появятся доступные разделы памяти, данные в них организованы следующим образом:

  • Память устройства. Папки в ней выглядят так же, как и в Виндовс: в них содержатся файлы разного формата, их можно изменять, удалять и создавать по желанию владельца.
  • SD-карта. Внешние накопители не обязательны, однако пользуются большим спросом. В памяти они выделены в отдельный раздел, при желании его можно сделать место установки новых приложений или переместить уже скачанные.
  • Root. Корневая папка, в которой сохраняется информация о системных настройках и их изменениях. Для ее открытия необходимо иметь root-права, не каждая программа-менеджер может получить к ней доступ.

При недостатке места встает вопрос об удалении мусора из памяти смартфона. Обычно для того используют специальные приложения, но они не всегда эффективны. Чтобы провести очистку корректно, нужно понять, какие папки можно удалить на Андроиде, а какие трогать нельзя.

Что и где находится

Открывая  менеджер системы на андроид-устройствах, неопытный пользователь удивится обилию папок. По названию некоторых можно понять об их содержимом, с другими придется сложнее. Чтобы не совершить ошибок в работе с файлами, желательно ознакомиться с основными элементами каталога:

  • Boot. Важная папка, изменять не рекомендуется: в ней содержатся файлы, связанные с ядром системы и виртуальным диском.
  • System. Содержит информацию обо всех системных настройках и вносимых изменений.
  • Cache. Здесь хранятся временные файлы, создаваемые при работе программ.
  • Misc. В эту папку сохраняется информация о настройках сотового оператора, установленных конфигурациях и других параметров.
  • Recovery. Этот раздел создается для резервного копирования данных.
  • Data. Осуществляет хранение пользовательских данных: фото, видео, загрузок и других.

По умолчанию владелец может работать только с последней папкой, для других нужны специальные права. Обычно пользователю нужны именно файлы из Data, с ними удобно работать даже в встроенном менеджере.

Совет! Если по каким-то причинам неудобно просматривать корневой каталог на экране смартфона, это можно сделать через ПК. Достаточно подключить через USB-шнур устройство и выбрать режим передачи файлов.

Структура папки data

Как отмечалось выше, в этот раздел памяти собраны все файлы, созданные или скачанные пользователем. Над ними можно совершать различные действия: удалять, копировать, изменять или перемещать. Для удобства нахождения они разделены в несколько папок:

  • Documents. Содержит документы, созданные в редакторе смартфона.
  • Downloads. Здесь сохраняется вся скаченная информация по умолчанию.
  • Bluetooth. В эту папку копируются все переданные с помощью Блютуза файлы.
  • Podcasts.Папка создается в случае прослушивания подкастов.
  • Video, Music, Movies. Хранение мультимедии, автоматически отображаются в списках соответствующих для их чтения программ.
  • Ringtones, Alarms, Notifications и другие. Предназначены для сохранения звуков будильника, рингтона и уведомлений.

Многим пользователей волнует DCIM – что это за папка и почему весит так много. Ответ прост – в нее сохраняются все сделанные снимки и видео. Поэтому ее содержимое легко уменьшить, перенеся элементы на ПК или внешний накопитель.

Подозрительные папки

Некоторые владельцы смартфонов сталкиваются с наличием в корневом каталоге элемента с непонятным названием. Если встретилась папка Dianxin на андроиде, что это такое, разобраться нетрудно. Это продукт китайской прошивки, а точнее, ее пользовательской оболочки. В нее система помещает все файлы, связанные с процессорами и данным работы смартфона. Ее размер может быть большим из-за обилия информации, удалять ее обычным способом бессмысленно – она восстановится вновь.

Многие принимают ее за вирус, ведь обнаруживается эта папка чаще всего случайно. Для полного удаления Dianxin из каталога нужно зайти например в настройки ЕС проводника и снять галочку с пункта «Оповестить о разрешениях приложений». После этого удалить саму папку и перезагрузить устройство.

Также редко, но можно встретить папку chartboost на android, но что это – объяснить сложнее. Она является результатом показа рекламы на устройстве. Обычно она сопровождает игры для детей, это показы баннеров – такой способ монетизации выбрали разработчики. Обнаружить этот элемент непросто, обычно он находится в скрытом режиме на SD-карте. Вреда от него нет, но места в памяти может быть занято немало – до нескольких гигабайт!

Попробовать решить проблему можно двумя способами:

  1. Запретить запись в файл, оставить только чтение или удалить его. Это делается в настройках самой папки.
  2. Создать пустой файл без расширения (дубликат), удалив папку со старыми данными.

Если удалить Chartboost таким образом не получится, можно установить файловые менеджеры и применить их. В любом случае, пользы от этой папки нет, она только расходует трафик (реклама появляется при подключении к Интернету) и занимает место.

Заключение

Знание устройства файловой системы позволит быстро работать с каталогом папок в проводнике.

Без root-прав доступ есть только к «безопасным» изменениям, к системным параметрам подобраться без них нельзя. Перед удалением или изменением содержимого памяти смартфона необходимо удостовериться, что это не навредит устройству.

Файловая система Андроид: структура папок и назначение папок в системе Android

Последнее обновление: 26/08/2020

Файловая система андроид гораздо проще чем может показаться, и состоит всего из 6-ти разделов. Мы опишем назначение каждого раздела и подробно рассмотрим структуру папок в разделе data. Чтобы уверено сортировать и перемещать файлы на внутреннем накопителе, требуется знать назначение папок в файловой системе андроид. В статье мы подробно узнаем, в каких папках хранится пользовательская информация, а где данные приложения, удаление или перемещение которых нарушит работу установленных программ.

Разделы памяти Android

Так как Android – ОС на базе Linux, то файловая система андроид включает шесть разделов. По умолчанию пользователю доступен только раздел внутренней памяти – data. Доступ или изменение файлов других разделов, без ROOT прав запрещен.

  • Boot. Внутри папки хранится ядро системы, виртуальный диск и другие файлы, необходимые для запуска мобильного устройства.
  • System. Используется для хранения файлов операционной системы, графики пользовательского интерфейса и предустановленных программ.
  • Recovery. Папка с резервными копиями данных для восстановления и загрузки системы. Подробнее об андроид рекавери.
  • Data. Раздел внутренней памяти, где хранится пользовательская информация: файлы мультимедиа, игры, приложения и т.д.
  • Cache. Папка необходима системе для временного хранения часто используемых данных и компонентов приложений.
  • Misc. Хранит данные о настройках системы, установленных пользователем конфигураций, параметрах сети сотового оператора. Так же различные параметры, которые в системе отображаются в виде переключателей.

Папки в разделе data

Закачка файлов, скриншоты или установка приложений осуществляется в разные папки раздела DATA.

  • Android — папка, в которую устанавливаются приложения. Внутри находятся две папки – obb и data. Первая хранит кэш игр, вторая данные установленных приложений. Удаление или перемещение папок приведет к потере настроек и некорректной работе программ.
  • Alarms, Ringtones, Notifications. Папки предназначены для хранения звуков и музыкальных композиций, для будильников, рингтонов и уведомлений. Помещенные файлы в эти папки, отобразятся в системе при выборе мелодий. В ином случае, звуки придется выбирать при помощи плеера или файлового менеджера.
  • Bluetooth. В папке содержаться файлы, принятые по беспроводному соединению Bluetooth.
  • DCIM. В папке хранятся фотографии и видео, снятые при помощи стандартного приложения. Если в настройках программы выбрано «хранение файлов на MicroSD», тогда отснятый материал попадет в папку DCIM на внешнем накопителе.
  • Documents. Место для хранения текстовых документов.
  • Downloads. Папка для загрузок. Скачиваемые файлы через Chrome или другие Google сервисы, автоматически попадают в данный раздел. Сторонние приложения так же сохраняют файлы в папку Downloads, но чаще используют собственные папки.
  • Pictures, Music, Movies, Video. Папки для хранения файлов мультимедиа, которые используются плеерами по умолчанию. Помещенные туда музыка или видео, автоматически отобразятся при запуске соответствующего приложения. В ином случае требуется указать путь для файлов вручную. Так же в папке Pictures хранятся скриншоты.
  • Podcasts. Папка используется приложениями, в случае прослушивания подкастов.

Стоит отметить, неиспользуемые папки остаются пустыми. Сторонние приложения чаще создают собственные каталоги для хранения временных и постоянных файлов, например Viber или Titanium Backup.

Вывод

Удаление любой папки или файла в разделе внутренней памяти, влечет только потерю некоторых данных. Поэтому нарушить работу или повредить мобильное устройство такими действиями, не получится. При следующем запуске, приложение скачает и запишет недостающие файлы.

А вот удаление/перемещение файлов за пределами раздела data, гарантировано нарушит целостность системы и сделает работу устройства не стабильной. В таком случае поможет сброс до заводских установок или повторная запись прошивки. Поэтому при наличии ROOT прав, не желательно трогать файлы системного раздела.

Post Views: 1 960

Структура приложения для Android

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

Android использует пакеты не только для организации кода в приложении, но и для управления самим приложением.

На приведенной выше диаграмме показаны основные стандартные блоки приложения Android. Приложение Android в Eclipse или в любом средстве разработки имеет предопределенную структуру с кодом и ресурсами, организованными в несколько папок.

Имя папки Описание
src «src» означает Исходный код. Он содержит исходные файлы Java.
gen «gen» означает Generated Java Library. Эта библиотека предназначена только для внутреннего использования Android.
Android 2.2 Здесь хранится библиотека Android Framework.
активы Используется для хранения файлов сырых активов.
libs Содержит частные библиотеки.
res «res» означает файл ресурсов. Он может хранить файлы ресурсов, такие как изображения, файлы XML и т. Д. Он содержит некоторые дополнительные папки, такие как Drawable, Layout и Values.

anim: Используется для файлов XML, которые компилируются в объекты анимации.
цвет: Используется для файлов XML, описывающих цвета.
drawable: Используется для хранения различных графических файлов.В структуре проекта Android

есть три типа папок с возможностью рисования:
1. drawable-mdpi
2. drawable-hdpi
3. drawable-ldpi

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

layout: Он используется для размещения файлов макета XML, которые определяют, как различные объекты Android, такие как текстовое поле, кнопки и т. Д., Организованы на экране.

меню: Используется для определения файлов XML в меню приложения.

raw: «raw» означает Raw Asset Files. На эти файлы ссылается приложение с помощью идентификатора ресурса в классе R.
Например, хорошее место для мультимедиа — файлы MP3 или Ogg.

значений: Он используется для файлов XML, в которых хранятся различные строковые значения, такие как заголовки, метки и т. Д.

xml: Он используется для настройки компонентов приложения.

AndroidManifest.xml В этом файле указан файл определения Android. Этот файл содержит информацию о приложении Android, такую ​​как минимальная версия Android, разрешение на доступ к возможностям устройства Android, такие как разрешение на доступ в Интернет, разрешение телефона и т. Д.
default.properties Этот файл содержит настройки проекта, такие как сборка цель. Не редактируйте этот файл вручную. Он должен поддерживаться в Системе контроля версий исходного кода.
Proguard.cfg Этот файл определяет, как ProGuard оптимизирует и делает ваш код неясным.
MainLayout.xml Этот файл описывает макет страницы. Таким образом, все компоненты, такие как текстовые поля, метки, переключатели и т. Д., Отображаются на экране приложения.
Класс активности Приложение занимает весь экран устройства, для которого требуется хотя бы один класс, унаследованный от класса Activity. Метод OnCreate () запускает приложение и загружает страницу макета.

Архитектура Android: Компонент, Фреймворк, Уровни

  • Домашняя страница
  • Тестирование

      • Назад
      • Гибкое тестирование
      • BugZilla
      • Cucumber
      • 9013 J6 Тестирование базы данных J2
      • Назад
      • JUnit
      • LoadRunner
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Postman
      • QTP
        • A Back
        • 9013

        • Центр контроля качества SAP (Центр контроля качества
        • ) SAP
        • SoapUI
        • Управление тестированием
        • TestLink
    • SAP

        • Задняя часть
        • ABAP
        • APO
        • Начинающий
        • Basis
        • BODS
        • BI
        • BPC
        • CO
        • Назад
        • CRM
        • 9013 9013
        • CRM
        • 9013AN6 Crystal Reports F137 9013AN6 Crystal Reports

        • QM
        • Заработная плата
        • Назад
        • PI / PO
        • PP
        • SD
        • SAPUI5
        • Безопасность
        • Менеджер решений
        • Successfactors
        • SAP
        • Web

        • SAP Tutorials
        • Назад
        • Apache
        • AngularJS
        • ASP.Нетто
        • C
        • C #
        • C ++
        • CodeIgniter
        • СУБД
        • JavaScript
        • Назад
        • Java
        • JSP
        • Kotlin
        • Linux 9013B
        • MS SQL
        • MS SQL

          MS SQL

        • Linux
        • Доступ к Linux. js

        • Perl
        • Назад
        • PHP
        • PL / SQL
        • PostgreSQL
        • Python
        • ReactJS
        • Ruby & Rails
        • Scala Back
        • SQL
        • SQL Server
        • SQL
        • SQL Server

        • UML
        • VB.Net
        • VBScript
        • Веб-службы
        • WPF
    • Обязательно учите!

        • Назад
        • Бухгалтерский учет
        • Алгоритмы
        • Android
        • Блокчейн
        • Бизнес-аналитик
        • Создание веб-сайта
        • Облачные вычисления
        • COBOL
        • 9013 9013 9013 9013 9013 901 9013 9013 901 9013 907 901

        • 901

          901

          9013

          Организация исходных файлов | CodePath Android Cliffnotes

          Обзор

          Приложения

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

          Условные обозначения

          Обязательно ознакомьтесь с Руководством по коду и стилю Ribot, чтобы получить более подробную информацию о предлагаемых стилях и правилах именования.

          для кода Java

          Для кода Java важны следующие соглашения об именах и регистрах:

          Тип Пример Описание Ссылка
          Переменная доходTaxRate Все переменные должны быть верблюжьи Подробнее
          Константа DAYS_IN_WEEK Все константы должны быть прописными Подробнее
          Метод конвертировать в евро Все методы должны быть в верблюжьем кейсе Подробнее
          Параметр депозит Сумма Все имена параметров должны быть в верблюжьем регистре Подробнее

          Дополнительные сведения см. В этом руководстве по присвоению имен.

          Для классов Android

          Классы

          Android должны быть названы в соответствии с определенным соглашением, которое ясно указывает на их назначение. Например, все действия должны заканчиваться Activity , как и MoviesActivity . Ниже приведены наиболее важные соглашения об именах:

          Имя Конвенция Наследует
          Деятельность CreateTodoItemActivity AppCompatActivity , Activity
          Список адаптеров TodoItemsAdapter BaseAdapter , ArrayAdapter
          Помощник базы данных TodoItemsDbHelper SQLiteOpenHelper
          Сетевой клиент TodoItemsClient НЕТ
          Фрагмент TodoItemDetailFragment Фрагмент
          Сервис FetchTodoItemService Сервис , IntentService

          Используйте здравый смысл для других типов файлов.Цель состоит в том, чтобы любые классы, специфичные для Android, можно было идентифицировать по суффиксу.

          Структура папки Android

          Существует несколько рекомендаций по организации структуры пакетов вашего приложения.

          Упорядочить пакеты по категориям

          Для этого можно сгруппировать объекты по их категориям. Каждый компонент идет в соответствующий пакет:

          • com.example.myapp.activities — содержит все действия
          • ком.example.myapp.adapters — содержит все настраиваемые адаптеры
          • com.example.myapp.models — Содержит все наши модели данных
          • com.example.myapp.network — содержит весь сетевой код
          • com.example.myapp.fragments — Содержит все фрагменты
          • com.example.myapp.utils — Содержит весь код поддержки помощников.
          • com.example.myapp.interfaces — содержит все интерфейсы

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

          Упорядочить пакеты по функциям приложения

          В качестве альтернативы, мы можем создавать пакеты по функциям, а не слои. Этот подход использует пакеты для отражения набора функций. Рассмотрим следующую структуру пакета, описанную в этом сообщении:

          • com.example.myapp.service. * — это подпакет для всех пакетов / классов фоновых служб
          • ком.example.myapp.ui. * — Подпакет для всех пакетов / классов, связанных с пользовательским интерфейсом.
          • com.example.myapp.ui.mainscreen — Содержит классы, относящиеся к главному экрану некоторых приложений
          • com.example.myapp.ui.detailsscreen — Содержит классы, относящиеся к экрану сведений об элементах некоторых приложений

          Эта функция позволяет разместить DetailsActivity , DetailsFragment , DetailsListAdapter , DetailsItemModel в одном пакете, который обеспечивает удобную навигацию, когда вы работаете с функцией «сведения об элементе».

          DetailsListAdapter и DetailsItemModel классы и / или их свойства можно сделать закрытыми для пакета и, таким образом, не открывать за пределами пакета. Внутри пакета вы можете получить доступ к их свойствам напрямую, не создавая тонны шаблонных «установочных» методов.

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

          Организация ресурсов

          Ресурсы должны быть разделены на следующие ключевые файлы и папки:

          Имя Путь Описание
          Макеты XML res / layout / Сюда мы помещаем наши файлы макета XML.
          Меню XML res / меню / Сюда мы помещаем действия меню AppBar.
          Рисунки res / вытяжка Сюда мы помещаем изображения и чертежи XML.
          Цвета разрешение / значения / colors.xml Здесь мы помещаем определения цвета.
          Размеры разрешение / значения / размер.xml Здесь мы помещаем значения размеров.
          Струны res / values ​​/ strings.xml Сюда мы помещаем струны.
          Стили res / values ​​/ styles.xml Здесь мы помещаем значения стиля.

          См. Полный список ресурсов здесь и обратите внимание на следующее:

          • Не кодируйте жестко шестнадцатеричные значения цвета в макете . Вместо того, чтобы жестко кодировать эти значения, обязательно переместите все цвета в res / values ​​/ colors.xml и укажите цвета в макетах с помощью @ color / royal_blue .
          • Не указывайте жестко размеры полей / отступов в макете . Вместо жесткого кодирования этих значений обязательно переместите все значения измерений в res / values ​​/ sizes.xml и укажите на них ссылки в макетах с помощью @ dimen / item_padding_left .
          • Для поддержки нескольких устройств мы можем затем использовать систему альтернативных ресурсов для предоставления разных цветов, строк, размеров, стилей и т. Д. В зависимости от типа устройства, размера экрана, версии API и многого другого.

          Обязательно начните правильно организовывать свои ресурсы на раннем этапе разработки приложения. Обязательно ознакомьтесь с Руководством по коду и стилю Ribot, чтобы получить более подробную информацию о предлагаемых стилях и правилах именования.

          Организация ресурсов во вложенные папки

          Часто возникают вопросы об организации не только исходных файлов, но и о лучшей организации ресурсов приложения. В современном приложении часто есть сотни различных файлов макетов, чертежей, стилей и т. Д., И по умолчанию все они сгруппированы вместе в плоский список в одном подкаталоге (т.е.e res / layout ). На данный момент храните файлы ресурсов макета в том же каталоге.

          Обратитесь к сообщению stackoverflow для обсуждения изученных вариантов. Основная проблема заключается в том, что если вы попытаетесь использовать подход к размещению вложенных ресурсов, текущая логика для подключаемого модуля Android Studio Gradle не будет обновлять файлы ресурсов после их изменения для вложенных наборов ресурсов. Текущая реализация пытается проверить каталоги ресурсов с помощью startWith (), поэтому вложенная структура каталогов (т.е.е. src / main / res / layout / layouts и src / main / res / layout / layouts_category2) будут последовательно выбирать src / main / res / layout / layouts и никогда не будут обновлять изменения. В результате вам придется перестраивать / очищать проект каждый раз при внесении изменений в файл макета.

          Заключение

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

          Однако в общем программировании на Java упаковка приложений по функциям считается предпочтительной и имеет большой смысл.

          Список литературы

          Структура проекта Android Studio, компилятор, ProGuard

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

          Когда мы запускаем новый проект Android в Android Studio, он автоматически создает для нас множество файлов и папок. Давайте посмотрим на их функции и значение. Новый проект автоматически открывается в представлении проекта Android.

          Представление проекта Android

          Представление проекта Android показывает все файлы сборки на верхнем уровне иерархии проекта в разделе «Сценарии Gradle».Каждый модуль проекта отображается в виде папки на верхнем уровне иерархии проекта и содержит следующие три элемента на верхнем уровне:

          • java / : Исходные файлы для модуля.
          • манифестов / : файлы манифеста для модуля
          • res / : файлы ресурсов для модуля

          Вот краткое описание важных файлов / папок в структуре проекта Android:

          Файл манифеста Android

          AndroidManifest.xml — один из самых важных файлов в структуре проекта Android. Он содержит информацию о пакете, включая компоненты приложения, такие как действия, службы, широковещательные приемники, поставщики контента и т. д.
          Он выполняет следующие задачи:

          • Он отвечает за защиту приложения для доступа к любым защищенным частям, предоставляя разрешения.
          • Он также объявляет API Android, что приложение будет использовать
          • В нем перечислены классы инструментовки.Классы инструментовки предоставляют профилирование и другую информацию. Эта информация удаляется непосредственно перед публикацией приложения и т. Д.

          java

          Папка java содержит файлы исходного кода Java приложения, организованные в пакеты. У нас может быть несколько пакетов в приложении для Android. Всегда полезно разбивать исходный код приложения на разные пакеты в зависимости от его основных функций. Все исходные файлы Активностей, Услуг и т. Д.зайти в эту папку.

          res

          Папка Res — это место, где хранятся все внешние ресурсы для приложения, такие как изображения, XML-файлы макета, строки, анимации, аудиофайлы и т. Д.

          Подпапки:

          • Drawable : Эта папка содержит файл растрового изображения, который будет использоваться в программе. Существуют разные папки для хранения чертежей. Это drawable-ldpi, drawable-mdpi, drawable-hdpi, drawable-xdpi и т. Д. Папки предназначены для предоставления альтернативных ресурсов изображений для определенных конфигураций экрана.Ldpi, mdpi и hdpi обозначают экраны с низкой, средней и высокой плотностью соответственно. Ресурсы для каждого разрешения экрана хранятся в соответствующих папках, и система Android выберет его в соответствии с плотностью пикселей устройства
          • Макет : он содержит файлы XML, которые определяют пользовательский интерфейс приложения
          • Меню : XML-файлы, которые определяют меню для приложения, помещаются в эту папку.
          • Mipmap : Папки mipmap используются только для размещения значков приложений.Любые другие доступные для рисования активы должны быть помещены в соответствующие доступные для рисования папки, как и раньше.
          • Значения : XML-файлы, которые определяют простые значения, такие как строки, массивы, целые числа, размеры, цвета, стили и т. Д., Помещаются в эту папку

          Сценарии Gradle

          Сценарии Gradle используются для автоматизации задач. Часть Android Studio выполняет сборку приложений в фоновом режиме без какого-либо вмешательства со стороны разработчика. Этот процесс сборки обрабатывается с помощью системы Gradle, автоматизированного набора инструментов для сборки, разработанного, чтобы позволить настраивать способы сборки проектов и управлять ими с помощью набора файлов конфигурации сборки.Он использует язык под названием groovy.

          Представление проекта

          .idea

          Eclipse использует файл project.properties для конкретных метаданных проекта. Здесь, в Android Studio, этот .idea делает то же самое. Это означает, что метаданные конкретного проекта хранятся в Android Studio.

          Модуль проекта (приложение)

          Это фактическая папка проекта, в которой находится код приложения. В папке приложения есть следующие подкаталоги:

          • build : В нем содержится весь полный вывод процесса make i.е. classes.dex, скомпилированные классы и ресурсы и т. д. В графическом интерфейсе Android Studio отображается только несколько папок. Важная часть заключается в том, что R.java находится здесь в build / generated / source / r /… / R.java
          • libs : это часто встречающаяся папка в eclipse и android studio, которая может содержать библиотеки. или файлы .jar
          • src : папка src может содержать как код приложения, так и скрипт модульного тестирования Android. Вы найдете две папки с именами «androidTest» и «main», соответствующие папке src.Основная папка содержит две подпапки java и res. Папка java содержит все коды java, а res — чертежи, макеты и т. Д.

          gradle

          Здесь находится оболочка jar системы сборки gradle. Эта баночка — это то, как Android Studio взаимодействует с gradle, установленным в Windows / MAC.

          Внешние библиотеки

          На самом деле это не папка, а место, где отображаются ссылочные библиотеки и информация о SDK целевой платформы.

          Что такое Р.Ява?

          Android R.java — это файл, автоматически сгенерированный программой aapt (Android Asset Packaging Tool), который содержит идентификаторы ресурсов для всех ресурсов каталога res /.
          При создании любого компонента в файле activity_main.xml в этом файле автоматически создается идентификатор соответствующего компонента. Этот идентификатор можно использовать в исходном файле активности для выполнения любых действий с компонентом.

          Компиляторы Android

          Компиляторы конвертируют скомпилированные файлы .class в исполняемые.dex в формате Dalvik для дальнейшего выполнения в среде Android. Ниже приведены два важных используемых инструмента:

          DEX

          Виртуальная машина Dalvik — это виртуальная машина Android, оптимизированная для мобильных устройств. Он оптимизирует виртуальную машину с точки зрения памяти, времени автономной работы и производительности. Компилятор Dex преобразует файлы классов в файл .dex, который выполняется на виртуальной машине Dalvik. Несколько файлов классов преобразуются в один файл dex. Следующий поток описывает процесс компиляции и упаковки из исходного файла:

          • Инструмент javac компилирует исходный файл java в файл класса.
          • Инструмент dx берет все файлы классов приложения и генерирует один файл .dex. Это инструмент для конкретной платформы.
          • Средство упаковки ресурсов Android ( aapt ) управляет процессом упаковки.

          Android ProGuard

          Инструмент ProGuard сжимает, оптимизирует и скрывает код, удаляя неиспользуемый код и переименовывая классы, поля и методы с семантически непонятными именами. В результате получается файл .apk меньшего размера, который труднее реконструировать.

          Установка программного обеспечения для разработки под Android | Разработчики Oculus

          Oculus Go Development

          23.06.20 Oculus объявила о планах прекратить использование Oculus Go. Информацию о датах и ​​альтернативах можно найти во введении к Oculus Go.

          В этом руководстве описывается, как установить Android Studio Development Bundle, который вы будете использовать для создания приложений Oculus Android VR.

          Android Studio Development Bundle включает в себя все необходимые инструменты, необходимые для начала разработки приложений Android:

          • Android Studio IDE (рекомендуемая IDE)
          • Платформы Android
          • Инструменты Android SDK
          • Android NDK
          • Открыть JDK

          Начало работы

          Если вы планируете использовать Mac для разработки, сначала установите Xcode — https: // developer.apple.com/xcode/download/. Если вы используете другую платформу, вы можете пропустить эту установку.

          Для начала скачайте Android Studio. Пожалуйста, обратитесь к руководству по установке Android Studio для получения подробных инструкций по установке.

          После установки Android Studio вы можете установить следующие пакеты:

          • Платформа Android SDK, уровень API 21 (разработка Oculus Go)
          • Платформа SDK Android, уровень API 26 (только разработка Oculus Quest), Уровень API 21 (разработка Oculus Go и Oculus Quest)
          • Android SDK Build Tools, v 28.0.3 или новее
          • Android NDK
          • LLDB

          Эти пакеты устанавливаются с помощью Android SDK Manager . Чтобы получить доступ к менеджеру, либо перейдите в Инструменты > SDK Manager , либо щелкните значок SDK Manager на панели инструментов (). Если у вас нет загруженного проекта, вы можете перейти к Configure> SDK Manager .

          Убедитесь, что установлены правильные пакеты и версии.

          В Android SDK Manager выберите вкладку SDK Platforms .Убедитесь, что установлена ​​следующая платформа Android, так как это минимальная версия, требуемая SDK:

          • Oculus Go: Android 5.0 (Lollipop) .
          • Oculus Quest: Android 8.0 (Oreo)

          Затем выберите вкладку SDK Tools . Убедитесь, что компоненты NDK и LLDB установлены, а также что установлены инструменты сборки Android SDK Build Tools 28.0.3 (или более поздние версии).

          Примечание. LLDB может отсутствовать в зависимости от версии Android Studio.

          Информацию о Android NDK см. На следующих страницах (https://developer.android.com/studio/projects/add-native-code.html#download-ndk) и OpenJDK (https: //developer.android.com/studio/intro/studio-config.html#jdk).

          Настройка Android Studio

          По завершении установки необходимых пакетов вы можете настроить среду разработки.

          Структура проекта Android Studio

          Чтобы проверить настройки в Android Studio, перейдите в Файл> Другие настройки> Структура проекта по умолчанию> Расположение Android SDK .Если у вас нет загруженного проекта, перейдите к Configure> Default Project Structure> Android SDK Location .

          Если присутствует, убедитесь, что установлен флажок Использовать встроенный JDK и для следующих свойств установлены соответствующие значения:

          • Расположение Android SDK
          • Расположение JDK
          • Расположение Android NDK

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

          Переменные среды и путь

          С местоположениями, записанными на предыдущем шаге, установите следующие переменные среды:

          • Установите переменную среды JAVA_HOME в местоположение JDK, обычно C: \ Program Files \ Android \ Android Studio \ jre .
          • Задайте для переменной среды ANDROID_HOME расположение Android SDK, обычно C: \ Users \ [имя пользователя] \ AppData \ Local \ Android \ Sdk .
          • Задайте для переменной среды ANDROID_NDK_HOME расположение Android NDK, обычно C: \ Users \ [имя пользователя] \ AppData \ Local \ Android \ Sdk \ ndk-bundle .
          • Добавьте каталог инструментов JDK в ваш PATH , обычно C: \ Program Files \ Android \ Android Studio \ jre \ bin .
          • Добавьте каталог инструментов платформы Android SDK в свой PATH , обычно C: \ Users \ [имя пользователя] \ AppData \ Local \ Android \ Sdk \ platform-tools .
          • Добавьте каталог инструментов Android SDK в свой PATH , обычно C: \ Users \ \ AppData \ Local \ Android \ Sdk \ tools .

          Настройка системы для обнаружения устройства Android (только для Windows)

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

          Вам может потребоваться установить драйвер USB для ADB после установки Android SDK. Драйвер и инструкции по установке можно найти на странице загрузок.

          Windows может автоматически определить правильное устройство и установить соответствующий драйвер при подключении устройства к USB-порту компьютера.

          Доступ к диспетчеру устройств через панель управления Windows . Если устройство было обнаружено автоматически, оно будет отображаться в разделе Portable Devices в диспетчере устройств .В противном случае найдите в разделе Другие устройства в диспетчере устройств и выберите устройство для обновления драйвера вручную.

          Чтобы просмотреть список обнаруженных подключенных устройств, введите в командной строке следующее:

          Примечание: Чтобы использовать эту команду, вам необходимо успешно настроить среду разработки Android.

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

          Иерархия файлов Android: макет архитектуры структуры системы — IAmAProgrammer

          Большинство пользователей Android используют свои телефоны Android только для звонков, SMS, просмотра и использования базовых приложений,

          Но с точки зрения перспективы развития, мы должны знать о внутренней структуре Android.

          Android использует несколько разделов (таких как загрузочный, системный, для восстановления, данных и т. Д.) Для организации файлов и папок на устройстве, как в ОС Windows.

          Каждый из этих разделов имеет свои собственные функции, но большинство из нас не знает значения каждого раздела и его содержимого.

          В этой статье мы познакомим вас с разделами Android.

          Итак, приступим к руководству по файловой системе Android.

          В телефонах, планшетах и ​​других устройствах Android в основном есть 6 разделов.

          Ниже приведен список разделов файловой системы Android.

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

          Но логически меньше 6 разделов можно найти на любых устройствах Android.

          • / пыльник
          • / система
          • / восстановление
          • / данные
          • / кэш
          • / разное

          Также ниже приведены системные разделы Fie карты SD.

          Обратите внимание:

          Только раздел / sdcard можно найти на всех устройствах Android, а остальные присутствуют только на некоторых устройствах.

          Узнайте размер раздела устройства Android с помощью команды adb

          Вы можете узнать, какие разделы доступны вместе с размером разделов для всех разделов на вашем устройстве Android.

          Просмотрите изображение ниже и запустите команду adb, как показано на этом изображении.

          Дополнительные команды adb можно найти в моей статье Полезные команды adb для разработки под Android.

          Также для получения дополнительных сведений об архитектуре Android вы можете прочитать мою статью Архитектура Android .

          Примечание:

          раздел загрузки и восстановления не отображается на изображении выше.

          Итак, после оболочки adb вам нужно запустить команду mount. как

          / пыльник

          Это загрузочный раздел вашего устройства Android, как следует из названия.

          Включает в себя ядро ​​андроида и рамдиск.

          Устройство не загрузится без этого раздела.

          Очистка этого раздела после восстановления должна выполняться только в случае крайней необходимости и после этого,
          устройство НЕ должно перезагружаться перед установкой нового,
          , что можно сделать, установив ПЗУ, которое включает раздел / boot.

          / система

          Как следует из названия, этот раздел содержит всю ОС Android, кроме ядра и ramdisk.

          Сюда входит графический интерфейс Android и все системные приложения, предустановленные на устройстве.

          Очистка этого раздела приведет к удалению Android с устройства без потери возможности загрузки,
          , и вы все равно сможете перевести телефон в режим восстановления или загрузчика для установки нового ПЗУ.

          / восстановление

          Это специально разработано для резервного копирования.

          Раздел восстановления можно рассматривать как альтернативный загрузочный раздел
          , который позволяет устройству загружаться в консоль восстановления для выполнения на нем расширенных операций восстановления и обслуживания.

          / данные

          Опять же, как следует из названия, он называется разделом пользовательских данных.

          Этот раздел содержит данные пользователя, такие как ваши контакты, смс, настройки и все приложения Android, которые вы установили.

          Пока вы выполняете сброс настроек на своем устройстве, этот раздел будет удален.
          Тогда ваше устройство будет в том состоянии, в котором вы использовали его в первый раз, или в том состоянии, в котором оно было после последней официальной или пользовательской установки ПЗУ.

          / кэш

          Надеюсь, у вас есть некоторое представление о кеше, так как вы являетесь экспертом в области просмотра веб-страниц.

          Это раздел, в котором Android хранит часто используемые данные и компоненты приложений.

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

          / разное

          Этот раздел содержит различные системные настройки в виде переключателей включения / выключения.

          Эти настройки могут включать CID (Carrier или Region ID), конфигурацию USB, некоторые настройки оборудования и т. Д.
          Это важный раздел, и если он поврежден или отсутствует, некоторые функции устройства не будут работать нормально.

          / SDCard

          Это не раздел внутренней памяти устройства, а раздел SD-карты.

          С точки зрения использования, это ваше пространство для хранения, которое вы можете использовать по своему усмотрению, чтобы хранить на нем свои носители, документы, ПЗУ и т. Д.

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

          Хотя некоторые установленные пользователем приложения сохраняют свои данные и настройки на SD-карте, очистка этого раздела приведет к потере всех этих данных.

          На устройствах с внутренней и внешней SD-картой — таких как Samsung Galaxy S и несколько планшетов —
          раздел / sdcard всегда используется для обозначения внутренней SD-карты.

          Для внешней SD-карты — если она есть — используется альтернативный раздел, который отличается от устройства к устройству.
          В случае устройств серии Samsung Galaxy S это / sdcard / sd, а во многих других устройствах это / sdcard2.

          В отличие от / sdcard, никакие данные системы или приложения не сохраняются автоматически на этой внешней SD-карте
          , и все, что присутствует на ней, было добавлено туда пользователем.

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

          / sd-ext

          Это не стандартный раздел Android, но он стал популярным в пользовательской среде ROM.

          По сути, это дополнительный раздел на SD-карте, который действует как раздел / data
          при использовании с определенными ПЗУ, имеющими специальные функции, называемые APP2SD + или data2ext.

          Это особенно полезно на устройствах с небольшим объемом внутренней памяти, выделенной для раздела / data.

          Таким образом, пользователи, которые хотят установить больше программ, чем позволяет внутренняя память, могут сделать этот раздел
          и использовать его с пользовательским ПЗУ, поддерживающим эту функцию, чтобы получить дополнительное пространство для установки своих приложений.

          Очистка этого раздела, по сути, аналогична очистке раздела / data — вы теряете свои контакты, SMS, приложения и настройки из магазина.

          Теперь, когда вы устанавливаете новый двоичный файл, вы можете знать, что вы потеряете, обязательно сделайте резервную копию своих данных, прежде чем запускать новый двоичный файл на вашем устройстве Android.

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

          Поиск в Интернете очень мало раскрывает иерархию файлов Android.

          Для пользователей Windows это другой мир.

          Для пользователей Linux это вариант иерархии файлов Linux.

          В Linux / Android / Unix (для простоты называется просто Linux) файловая иерархия представляет собой единое дерево,

          с вершиной дерева «/» — корень дерева.

          В разделе «/» находятся файлы и каталоги.

          В файловой иерархии Linux отсутствует понятие дисков, как в Windows.

          Вместо этого файловые системы монтируются в каталог для создания единого интегрированного дерева.

          Для файловых систем на основе мультимедиа. файловая система представляет собой раздел некоторого носителя.

          Не имеет значения, существует ли файловая система на локальном устройстве или на удаленном.

          Все интегрировано в единую файловую иерархию, которая начинается с корня.

          Термин «путь» относится к пути к файлу или каталогу.

          Абсолютный путь к любому файлу или каталогу начинается с «/» — root.

          Например, ваше файловое приложение может отображать путь к внутренней флэш-памяти как / mnt / sdcard или просто « sdcard ».

          Если ваше устройство Android оснащено внешней SD-картой, вы также увидите / mnt / extSdCard .

          Фактические имена могут отличаться, но концепция остается той же.

          Например, CyanogenMod устанавливает внешнюю флешку, которая отображается на / mnt / sdcard , а внутренняя флеш-память — как / mnt / emmc .

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

          Как обычный пользователь, файл Android отображает только те файловые системы, к которым у вас есть доступ.

          Эти файловые системы являются лишь частью всей файловой иерархии.

          Чтобы увидеть полную иерархию файлов Android, вам нужен «root» доступ.

          В этом случае «root» относится к специальной учетной записи пользователя, которая имеет привилегии системного администратора.

          Когда вы «рутируете» Android-устройство, вы получаете доступ к корневой учетной записи.

          Есть причина не предоставлять root-доступ автоматически — одна крошечная ошибка может иметь большое значение.

          Тем не менее, для тех, кто имеет опыт работы с командами Linux и системным администрированием Linux, он открывает доступ к базовой структуре Android.

          Файловые системы Android

          Как упоминалось в разделе «Сравнение ядра Android и ядра Linux», Android использует ядро ​​Linux.

          Все операции с файлами и каталогами из приложения проходят через абстрактный уровень ядра, называемый виртуальной файловой системой (VFS).

          Каждая файловая система, а их очень много, являются реализациями VFS.

          Каждая файловая система имеет отдельный модуль ядра, который регистрирует операции, которые она поддерживает с VFS.

          При отделении реализации от абстракции добавление новой файловой системы становится вопросом написания другого модуля ядра.

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

          Ядро Android поставляется с подмножеством обширной коллекции файловых систем, которые варьируются от
          от файловой системы журнала (JFS) для AIX (разновидность Unix от IBM) до файловой системы Amiga.

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

          Файл конфигурации ядра определяет, какие модули файловой системы скомпилированы и будут ли они встроены в ядро ​​или загружены динамически.

          Следовательно, ядро ​​Android содержит только те модули файловой системы, которые имеют отношение к его работе.

          На самом деле, я не знаю ни одного дистрибутива Linux, который компилирует каждый модуль файловой системы, поскольку некоторые файловые системы зависят от архитектуры оборудования.

          Хотя поддерживаемые файловые системы различаются на разных устройствах Android, наиболее распространенными файловыми системами флэш-памяти являются:

          • exFAT — Расширенная таблица размещения файлов — это проприетарная файловая система Microsoft для флэш-памяти.
            Из-за лицензионных требований он не является частью стандартного ядра Linux.
            Однако некоторые производители предоставляют поддержку файловой системы Android.
          • F2FS — Samsung представила файловую систему, совместимую с Flash, как файловую систему Linux с открытым исходным кодом в 2012 году.
          • JFFS2 — Файловая система журнала Flash версии 2 является файловой системой флэш-памяти по умолчанию для ядер AOSP (Android Open Source Project),
            начиная с Ice Cream Sandwich. JFFS2 является заменой исходной JFFS.
          • YAFFS2 — Еще одна файловая система Flash версии 2 была файловой системой AOSP flash по умолчанию для версии ядра 2.6.32.
            YAFFS2 не поддерживается в новых версиях ядра и не отображается в дереве исходных текстов последних версий ядра с kernel.org.
            Однако отдельные поставщики мобильных устройств могут продолжать поддерживать YAFFS2.

          Помимо файловых систем флэш-памяти, устройства Android обычно поддерживают следующие файловые системы на основе мультимедиа:

          • EXT2 / EXT3 / EXT4 — Файловая система EXTended — это стандартная файловая система Linux, текущая версия — EXT4.
            С 2010 года EXT4 часто используется вместо YAFFS2 или JFFS2 в качестве файловой системы для внутренней флэш-памяти на устройствах Android.
          • MSDOS — Драйвер MSDOS поддерживает файловые системы FAT12, FAT16 и FAT32.
          • VFAT — VFAT на самом деле не файловая система, а расширение файловых систем FAT12, FAT16 и FAT32.
            Таким образом, вы всегда будете видеть модуль ядра VFAT вместе с модулем MSDOS.
            Внешние SD-карты обычно форматируются с использованием VFAT.

          Указанные выше файловые системы являются файловыми системами на основе носителей.
          VFS также поддерживает псевдофайловые системы, не являющиеся носителями.
          Ядро Linux поддерживает ряд псевдофайловых систем, наиболее важными для устройств Android являются:

          • cgroup — Псевдо-файловая система cgroup (группа управления) предоставляет средства для доступа и определения различных параметров ядра.
            Хотя cgroup является псевдофайловой системой, существует ряд различных групп управления процессом.
            Если ваше устройство Adroid поддерживает группы управления процессами, вы найдете список групп в файле
            / proc / cgroups . Android использует cgroups для acct (учет пользователей) и cpuctl (управление процессором).
          • rootfs — Эта файловая система служит точкой монтирования для корневой файловой системы («/»).
          • procfs — Файловая система procfs обычно монтируется в каталог / proc и отражает ряд структур данных ядра.
            Операции с этими файлами фактически читают данные ядра.
            Номерные каталоги отражают идентификаторы процессов (фактически, идентификатор процесса лидера группы потоков) для каждой выполняющейся задачи.
            Файл / proc / filesystems генерирует список зарегистрированных в настоящее время файловых систем.
            Файловые системы, за которыми следует NODEV, являются псевдофайловыми системами, поскольку нет связанного устройства.
            Каталог / proc / sys содержит параметры ядра, некоторые из которых можно настраивать.
          • sysfs — Модель устройства для ядра представляет собой объектно-ориентированную структуру, которая отражает устройства, известные ядру
            , через файловую систему sysfs, которая обычно монтируется в каталог / sys .
            Когда ядро ​​обнаруживает новое устройство, оно создает объект в каталоге / sys / devices .
            Ядро использует сетевой сокет для передачи информации о новом устройстве демону udevd
            , который создает запись в каталоге / dev .
            Каталог / sys / fs содержит структуры объектов ядра для файловых систем на основе носителей.
            Каталог / sys / module содержит объекты для каждого загруженного модуля ядра.
          • tmpfs — Файловая система tmpfs часто монтируется в каталог / dev .
            Поскольку это псевдофайловая система, любые данные в каталоге / dev теряются при перезагрузке устройства.

          Файловых систем кажется много, но они — лишь верхушка айсберга.

          Для тех, у кого нет root-доступа, эти файловые системы и каталоги скрыты от вашего просмотра, так как у вас нет разрешения на доступ к ним.

          Мой Samsung Galaxy SIII предоставляет параметр отладки USB в разделе Параметры разработчика в меню Настройки .

          Если этот параметр включен, можно подключиться к Samsung Galaxy SIII с помощью adb (Android Debug Bridge).

          Хотя он предоставляет только привилегии уровня пользователя, он предоставляет доступ к большинству каталогов и большинству команд Linux.

          Этот параметр может быть доступен на других устройствах Samsung Android.

          Вы также можете попробовать приложение Terminal Emulator. Он работает на моем Samsung Galaxy SIII, а также на моем B&N Nook Color с CyanogenMod 10 (Jelly Bean).

          Иерархия файлов Android

          Как упоминалось выше, файловая иерархия Android — это модифицированная версия традиционной файловой иерархии Linux.

          В разных версиях Linux и от разных производителей есть небольшие различия в структуре.

          Однако различия незначительны.

          Ниже приводится краткое описание верхних уровней структуры каталогов для версии AOSP Jelly Bean:

          • acct — Этот каталог является точкой монтирования для контрольной группы acct, которая обеспечивает учет пользователей.
          • cache — Точка монтирования для раздела / dev / block / mtdblock2 (имя раздела может отличаться).
            Размер кеша ограничен размером этого раздела.
          • d — символьная ссылка на / sys / kernel / debug .
          • data — Точка монтирования для раздела / dev / block / mtdblock1 .
          • default.prop — Этот файл определяет различные свойства по умолчанию.
          • dev — точка монтирования файловой системы tmpfs, которая определяет устройства, доступные приложениям.
            Каталог / dev / cpuctl является точкой монтирования для группы управления cpuctl, использующей псевдофайловую систему cgroup.
          • etc — символьная ссылка на / system / etc .
          • init — двоичная программа, обрабатывающая файл init.rc .
            Файл init.rc импортирует остальные файлы init. *. Rc .
            При загрузке Android ядро ​​выполняет программу init в конце процесса загрузки.
            Стоит прочитать init.rc , поскольку в нем рассказывается история конфигурации устройства Android.
            Поскольку Android не поддерживает /etc/sysctl.conf , обновления параметров / proc / sys / kernel являются частью файла init.rc .
            Если у вас нет хорошего понимания внутренней работы ядра Linux, вам не следует изменять эти параметры.
            То же самое и с параметрами / dev / cpuctl .
          • mnt — Помимо креплений для внутренних и внешних SD-карт, этот каталог служит точкой монтирования для других файловых систем.
            Каталог / mnt / asec является точкой монтирования файловой системы tmpfs и является частью системы безопасности Android.
            Каталог / mnt / obb является точкой монтирования файловой системы tmpfs и хранит файлы расширения для приложений, размер файлов которых превышает 50 МБ.
            Каталог / mnt / secure — еще один компонент безопасности Android. Вы также можете увидеть точки монтирования для одного или нескольких USB-устройств.
          • proc — точка монтирования файловой системы procfs, которая обеспечивает доступ к структурам данных ядра.Программы
            , такие как ps, lsof и vmstat, используют / proc в качестве источника информации.
          • root — домашний каталог для учетной записи root.
          • sbin — Хотя он намного меньше, чем каталог / sbin в стандартных дистрибутивах Linux, он содержит двоичные файлы для нескольких важных демонов.
          • sdcard — символическая ссылка на / mnt / sdcard .
          • sys — Точка монтирования псевдофайловой системы sysfs, которая является отражением структуры объекта устройства ядра.
            В этом каталоге много информации, но это требует понимания модели устройства ядра.
            Вкратце, каталоги представляют объекты ядра, а файлы — атрибуты этих объектов.
          • system — Этот каталог является точкой монтирования для / dev / block / mtdblock0 .
            В этом каталоге находятся каталоги, которые вы обычно видите в корневом каталоге стандартного дистрибутива Linux.
            Эти каталоги включают bin , etc , lib , usr и xbin .
          • ueventd.goldfish.rc ueventd.rc — Эти файлы определяют правила конфигурации для каталога / dev .
          • vendor — символическая ссылка на / system / vendor .

          Это всего лишь эскиз файловой структуры Android.

          Чтобы понять, как работает Android под рабочим столом, вам понадобятся фундаментальные знания Linux и командной строки Linux.

          Что касается параметров ядра, вам необходимо рабочее знание ядра Linux.В следующих статьях я более подробно исследую иерархию файлов Android.

          .