Исходники андроид приложений

HМодификация исходного кода android-приложения с использованием apk-файлаИз песочницы

Разработка под Android, Информационная безопасность

Так уж получилось, что приложение для чтения комиксов и манги, которое я использую на своем android-смартфоне, после обновления стало показывать рекламу в конце каждой главы комикса. Данное приложение пару лет назад было доступно на Google Play (платная версия которого и была мной куплена), но было удалено в силу «нарушения авторских прав», после чего ушло в подполье и стало распространятся через сайт разработчика. Увы, достойных альтернатив этому приложению на android и iOS я не нашел, но и смотреть рекламу особо не было желания, тем более я уже покупал версию без рекламы. Сам разработчик почему-то не сделал возможности отключить ее, а на просьбы добавить такую возможность не отозвался. Поэтому пришлось искать альтернативные методы ее отключения. Первое, что пришло в голову, это то, что android-приложения пишутся на java, а значит есть вероятность, что автор не обфусцировал свое приложение и его можно попытаться декомпилировать.

Немного подумав, я приступил к работе.

Для начала был загружен сам apk-файл приложения. Затем недолгий поиск по интернету привел меня на сайт http://www.decompileandroid.com/. С его помощью можно было загрузить apk-файл с приложением и на выходе получить набор исходников. Увы, декомпиляция в java-классы происходит не совсем идеально и поэтому восстановить полностью сам проект приложения в IDE(Idea) у меня не получилось, но это позволило проанализировать саму структуру проекта и разобраться как он примерно работает. После проведения анализа, было найдено два перспективных метода в классе BaseReaderFragment.javaplaceAdViewIfNeeded и removeAdViewIfNeeded.

Код метода placeAdViewIfNeeded:

Самое простое, что пришло на ум после чтения кода, это убрать все лишнее, и оставить лишь вызов return;

Но, как уже было сказано, даже если бы я изменил в java-классе что-либо, я бы не смог в итоге скомпилировать приложение в IDE. Поэтому пришлось искать альтернативу. Оказалось, что smali-файлы, которые создаются в процессе декомпиляции, позволяют также после внесения нужных изменений, вновь собрать модифицированное приложение. Увы, сайт, что был приведен выше, позволял лишь получать исходники, но не собирать новые. Поэтому пришлось искать способы сделать это самостоятельно.
Была найдена утилита ApkTools, которая позволяла декомпилировать и компилировать apk-файлы. Кроме того, потребовалась утилита aapt.exe, которая была взята мной из стандартного SDK под андроид в папке android-sdk\build-tools\20.0.0.

Для удобства вызова утилиты из под windows был создан скрипт apktool.bat:

Для декомпиляции приложения были выполнены команды:

После чего, в полученных исходниках был найден файл BaseReaderFragment.smali и нужные нам методы были изменены следующим образом:

Далее пришла очередь сборки apk-файла из исходников.

Сделать это можно cледующей командой:

Но это еще не все. Чтобы приложение можно было установить, его нужно было подписать цифровой подписью. Самый простой способ сделать это – это скачать архив в котором находится утилита для подписи приложений и цифровые сертификаты к ней.

Распаковываем архив, выполняем команду:

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

В нем было видно, что строчка:

создает дополнительную страницу, помимо тех, что есть в главе манги, с параметром, отвечающим за показ объявлений. Было решено удалить эту строчку и посмотреть результат. Снова заглядываем в аналогичный smali-файл(BaseSeamlessReaderFragment$4) и удаляем строчку:

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

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

android, декомпиляция, разработка под android, reverse engineering


наверх

Источник статей: Хабр.

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

Версия сайта: 0.8.
Об ошибках, предложениях, пожалуйста, сообщайте через Telegram пользователю @leenr, по e-mail i@leenr.ru или с помощью других способов связаться.

Всегдабр (расширение для Google Chrome)
Статистика посещений
СоХабр в ВК (новости проекта)

Реверс-инжиниринг

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

Программы под Android распространяются в архивах. Эти архивы имеют расширение «.apk». Такие файлы не шифруются и являются по сути файлами «zip». Можете переименовать apk-файл в zip, чтобы убедиться в этом.

Вам необходимо поковыряться в APK-файле и получить какие-то данные. Можно потренироваться на кошках. Возьмём свою программу «Hello Kitty», найдём его apk-файл в папке проекта app\build\outputs\apk и переместим в отдельную папку для опытов.

Распаковав архив, вы можете увидеть структуру приложения и встретить знакомые файлы. И даже извлечь некоторые файлы для просмотра. К примеру, в папке res/drawable-hdpi-v4 я нашёл свою картинку pinkhellokitty.png. Казалось бы, вот оно — счастье. Но погодите радоваться. Если с изображениями проблем нет, то с чтением XML-файл вас ждёт облом. Какие-то строки вам видны, но в целом текст совершенно нечитаем. Поэтому сначала пойдём другим путём.

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

Содержимое архива обычно выглядит примерно так:

Каталог META-INF содержит:

CERT.RSA — сертификат приложения
CERT.SF — контрольные суммы файлов ресурсов (картинок, звуков и т.д.)
MANIFEST.MF — служебная информация, описывающая сам apk-файл

Каталог res содержит ресурсы — значки в нескольких разрешениях, описание размещения элементов на форме в xml-файле.

AndroidManifest.xml — служебная информация о приложении. В этом файле содержатся и так называемые «permission» — разрешения, которые требуются для работы приложения (например, доступ к сети или доступ к телефонной книге).

classes.dex — исполняемый код приложения. Именно этот файл интересует нас в первую очередь.

resources.arsc — таблица ресурсов. В этом файле собраны xml-описания всех ресурсов.

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

Теперь рассмотрим популярные утилиты, используемые для изучения программ.

Apktool

Для начала скачиваем утилиту Apktool, который представляет собой jar-файл с номером версии. Для удобства переименовываем его в короткий вид apktool.jar, так как будем работать в командной строке. Подопытный файл разместите в той же папке с утилитой.

Запускаем в окне командной строки утилиту с флагом d:

Появится отдельная папка, имя которой будет совпадать с именем вашего файла. Зайдите в неё и исследуйте файлы. Вы заметите, что XML-файлы теперь доступны для чтения в нормальном виде. Таким образом, мы можем открыть файл activity_main.xml и узнать разметку своей активности.

В папке вы также найдёте множество системных файлов, которые проект тянет с собой при создании приложения. На них не обращаем внимания.

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

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

Моя тестовая программа была слишком проста. В других примерах могут быть дополнительные папки, например, assets, которая может содержать файлы, картинки и т.д. Там могут находиться html-файлы с сценариями на Javascript, которые ведут на вредные страницы.

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

Первую часть задачи мы выполнили.

dex2jar

Вторая утилита dex2jar, позволяет преобразовать файлы dex в jar. Скачиваем последнюю версию и распаковываем архив утилиты. Утилита содержит множество файлов для различных ситуаций. Можете поизучать их на досуге.

Запускаем команду d2j-dex2jar.bat app-debug.apk и получаем на выходе файл app-debug-dex2jar.jar. Это стандартный тип файлов для Java, но для нас пока не слишком полезный. Тем не менее мы выполнили второй шаг и получили промежуточный файл.

JD-GUI

Утилита, которая поможет нам прочитать jar-файл, называется JD-GUI. На странице разработчика можно найти ссылки на плагины к средам разработки и даже онлайн-версию.

Скачиваем последнюю версию и распаковываем архив. Там всего два файла — исполняемый exe-файл и readme.txt

Запускаем программу и перетаскиваем на него jar-файл. И весь код на ладони.

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

Сравните с кодом в утилите.

Иными словами, вместо констант из класса R подставляются их реальные значения. Вам придётся попотеть, чтобы сопоставить данные. Но вы справитесь, я в вас верю.

Burp Suite

Burp Suite позволит вам просматривать HTTP-траффик на эмуляторе. Скачайте последнюю версию.

Далее следует настроить прокси и другие параметры.

Разбор вредоносной программы

Источник: Разбор вредоносной программы под Android на примере Trojan-Spy.AndroidOS.Zbot.a / Android.Smssniffer / Android/SpySMS / AndroidOS_SMSREP.B

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

Чтобы лучше понять, что именно искать, нужно проанализировать файл «AndroidManifest.xml» — посмотреть, какие именно разрешения требуются анализируемому приложению. Данный файл бинарный, а не обычный текстовый xml. Для того, чтобы его прочитать нужно воспользоваться консольной утилитой «aapt» из комплекта Android SDK. Она находится в каталоге «platform-tools». Так как графического интерфейса нет, то команду нужно вводить в консоли. Например, для Windows:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk

Разумеется, вы должны подставить свои пути. В Linux команда будет такой же с очевидными отличиями (не будет букв дисков и расширения «exe» у утилиты). Для большего удобства вывод можно перенаправить в файл:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk>>C:\incoming\manifest.txt

В файле нужно найти секцию «Android manifest» и искать перечисление разрешений. В анализируемом файле это выглядит так:

«android.permission.READ_PHONE_STATE» (Raw: «android.permission.READ_PHONE_STATE») «android.permission.INTERNET» (Raw: «android.permission.INTERNET») «android.permission.» (Raw: «android.permission.RECEIVE_SMS»)

Из этой информации становится понятно, что программа может получать состояние телефона (сюда включаются, например «телефон в режиме вызова», «телефон в режиме принятия данных»). Это разрешение нужно и для получения номера телефона, на котором запущена программа, работать с сетью и мониторить приход СМС. На этих аспектах и нужно сосредоточить внимание при дальнейшем анализе.

Для того, чтобы получить доступ к коду нужно выполнить два шага — преобразовать apk-файл в jar-файл и декомпилировать полученный байткод в более понятный для человека вид.

Воспользуемся конвертером «dex2jar»:

C:\dex2jar\dex2jar.bat C:\incoming\suspicious.apk

Сконвертированный файл будет находится в том же каталоге, что и оригинальный файл. К его имени будет добавлено «.dex2jar.jar», то есть в данном примере это будет «suspicious.apk.dex2jar.jar».

Этот файл можно открыть декомпилятором. Иерархия пакета в окне декомпилятора выглядит так:

На этом подготовительные шаги заканчиваются — дальнейший успех зависит только от вашего знания Java и умения пользоваться поисковиком.

К счастью, экземпляр выбранный для примера имеет довольно скромные размеры — финальный jar всего 7,01 KB.

В программе всего шесть классов. Исключим те, которые не представляют интереса. Это класс R, в котором только перечислены идентификаторы всех ресурсов. Так же из рассмотрения можно исключить класс Config, в котором содержится конфигурация сборки.

Рассмотрим подробнее оставшиеся три класса.

Activation

Этот класс срабатывает по событию onCreate(), то есть сразу после старта приложения.

TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService(«phone»); — создает localTelephonyManager, в которую помещает данные об устройстве.

str1 = localTelephonyManager.getDeviceId(); — выбирает из полученных данных идентификационный номер устройства и помещает его в строку str1

Дальше идет цикл, который делит DeviceId на кусочки по четыре цифры, вставляя между ними дефис «-«, то есть из XXXXXXXXXXXXXXXX получается XXXX-XXXX-XXXX-XXXX. Полученную строку цифр и дефисов передают в TextView с идентификатором 2131034112.

SmsReciever

Этот класс срабатывает при приходе СМС-сообщения, событие onReceive().

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

MainService

Этот класс довольно велик, поэтому не стану приводить его целиком. Сразу после вызова запускает субкласс «SmsBlockerThread», который блокирует уведомление о поступившем СМС, чтобы пользователь не был оповещен о новом входящем СМС.

Затем входящее СМС обрабатывается таким образом:

String str1 = localSmsMessage.getOriginatingAddress(); — номер телефона-получателя (то есть номер телефона, на котором установлен троянец) помещается в переменную str1.

String str2 = localSmsMessage.getMessageBody(); — тело сообщения помещается в переменную str2

Затем создаются связанные пары localBasicNameValuePair1 и localBasicNameValuePair2 в которые помещаются значения

f0=<номер телефона> b0=<текст сообщения>

Эти пары сохраняют в массив localArrayList, в который позже добавляют пару localBasicNameValuePair3, представляющую собой id=<id устройства>

При этом, как видите, DeviceId получается заново, а не используется то, что было получено в классе Activation.

Заканчивается тем, что вызывается метод postRequest() из последнего класса ServerSession:

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

ServerSession

Этот класс имеет два метода: initUrl(), который возвращает часть ссылки «(http://softthrifty.com/security.jsp)»:

и большой метод postRequest(), который вызывался из класса MainService. Несмотря на размер, задача postRequest() проста — отправить на сервер по ссылке, возвращаемой методом initUrl(), данные, добавив пары из массива, собранного в MainService. То есть всего лишь обратиться по ссылке:

(http://softthrifty.com/security.jsp?f0=<номер телефона>&b0=<текст сообщения>&id=<id устройства>)

Итог

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

1) злоумышленник должен заразить компьютер жертвы, чтобы перехватить данные для он-лайн банкинга;
2) злоумышленник должен заразить телефон жертвы для перехвата СМС с кодом подтверждения от банка;
3) злоумышленник должен каким-то образом связать пользователя зараженного компьютера и зараженного телефона, чтобы знать, от каких учетных данных он-лайн банкинга данный код подтверждения;

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

Реклама

Статья проплачена кошками — всемирно известными производителями котят.

Если статья вам понравилась, то можете поддержать проект.

Open Source

Здесь будут представлены описания продуктов с открытыми исходными кодами. Наиболее известным репозиторием для таких программ является GitHub, символом которого является Octocat (Кот-осьминог).

CamTimer

Камера с таймером. Вы можете выбрать нужный интервал — 5 сек, 10 сек, 15 сек и отбежать на нужное расстояние. Через указанное время камера сработает. Также можно выбрать количество кадров (до 4-х). Может пригодиться.

dozingcat/CamTimer · GitHub. Обратите внимание на псевдоним автора, наш человек.

AnkiDroid

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

Домашняя страница https://code.google.com/p/ankidroid/. Сами исходники находятся на ГитХабе

Виджет Колёсико

Wheel widget for Android — интересный компонент для вращения элементов, как в игровых автоматах. Не пробовал.

apps-for-android

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

Shelves — книжная полка

Каталог книг — можно отсканировать штрих-код и узнать все сведения о книге.

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

Page Curl for Android — листаем страницы

Page Curl for Android — красивый компонент на Canvas с эффектом листания страниц. На видео можете посмотреть эффект в действии. Переключение идёт между двумя картинками.

Android Page Curl

Pretty Painter

Стандартная рисовалка — вы можете выбрать несколько видов кистей и цвет для рисования. Свои шедевры можно сохранить.

Описание от автора на Хабре — Pretty Painter – мое первое приложение под Android

Скачать готовое приложение на Google Play

Исходники на GitHub

Wikipedia

List of open source Android applications — Обширный список приложений с открытым исходным кодом, разбитых по категориям (игры, утилиты и пр.).

Apps for Android

Sample Applications for the Android platform — Примеры приложений Google для Android.

A cook book for the Android platform — книга рецептов. Можно ввести название рецепта, ингридиенты, последовательность приготовления, а также отсылать SMS со списком ингридиентов. Старый проект.

Реклама

Статья проплачена кошками — всемирно известными производителями котят.

Если статья вам понравилась, то можете поддержать проект.

Работа с проектами в eclipse, создание первого android-приложения, структура apk-файлов

А статья уже довольно сильно устарела, часть скриншотов точно не соответствует реальности, часть текста тоже. Такие дела.

В этой статье мы наконец создадим в Eclipse ADT первое работающее андроидное приложение. И не просто создадим, но и проверим его работу в виртуальном девайсе.

Как и в любой интегрированной среде разработки, в Eclipse ADT создание работающего приложения сводится к трём шагам:

  1. создание андроид-проекта в Eclipse (минимальный шаблонный проект);
  2. написание программного кода, рисование дизайна и т.п.;
  3. «компиляция» проекта в окончательный apk-файл.

Создание первого проекта

Для начала запускаем eclipse (например, командой , которую мы делали в прошлой статье), открываем Android SDK Manager (WindowAndroid SDK Manager) и устанавливаем версию платформы Android 2.3.3 (модуль Android 2.3.3 (API 10)/SDK Platform). Если он уже установлен, идём дальше.

Проект содержит все необходимые вещи для приложения: программный код, инструкции по сборке, ресурсы (например, картинки), описания интерфейсов, документацию и т.д. Создаём первый проект, через меню: FileNewAndroid Project, после чего открывается вот такой диалог:

Внешний вид этого диалога практически одинаков для всех типов проектов: вам нужно выбрать название проекта (в нашем случае это «first project»), каталог, в котором проект создавать (нас вполне устраивают значения по умолчанию). Жмём Next > и видим следующий шаг:

Здесь нам предлагается выбрать, под какую версию андроид-платформы мы хотим создать проект, в списке доступны установленные в SDK модули для разных версий платформы, а выбрать вы можете только одну. На скриншоте вы видите, что доступны три версии: Android 2.2, Android 2.3.3 и Android 4.0.3. Выбираем версию 2.3.3., жмём Next > и попадаем на следующий экран:

На этом экране мы задаём информацию о нашем приложении, заполните так, как показано на скриншоте. Совсем коротко об этих полях. Application Name — это название проекта, обычная строка текста. Package Name — это название пакета, по сути индентификатор приложения, его пространство имён (namespace в терминологии Java), способ его формирования стандартен для Java-приложений (подробнее об этом можно почитать в официальной документации по Java). Оставляем крыжик в поле Create Activity, значение этого поля также оставляем по умолчанию, я позднее расскажу, что такое Activity. В поле Minmum SDK мы можем выбрать минимальную версию андроида, на которую можно будет поставить приложение, по сути это поле дублирует предыдущий экран. Поле и крыжик Crate a Test Project пока отключаем. Всё нужное заполнили, жмём Finish. Пару секунд Eclipse будет создавать шаблонный проект с выбранными параметрами, после чего он появится во вьюшке Package Explorer. Если вы эту вьюшку потеряли, вспонимаем, как открыть её через меню WindowShow ViewPackage Explorer).

Раскрываем папку с проектом в Package Explorer и начинаем изучать, при этом окно Eclipse у вас должно выглядеть примерно так:

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

src — здесь лежит ваш программный код на языке Java.

gen — в этой папке лежат автоматически сгенерированные файлы, например, файлы локализации приложения.

Android 2.3.3 — это контейнер с классами выбранной платформы.

res — здесь лежат ресурсы вашего приложения (картинки, строки локализации, макеты интерфейса).

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

proguard.cfg — это файл конфигурации для системы ProGuard, инструмента из SDK для оптимизации и защиты приложения. Про этот файл и вообще систему ProGuard я расскажу как-нибудь потом, пока этот файл не трогайте, пусть лежит.

project.properties — это файл для сборочной системы Ant, он автоматически пересоздаётся при модификации свойств проекта, так что не стоит в него писать.

На остальные файлы и контейнеры пока не обращайте внимания.

Сборка и запуск проекта

Несмотря на то что мы не написали ни строчки кода, мы вполне можем уже запустить только что созданный проект! Для запуска нужен девайс, либо виртуальный, либо реальный. Реального у нас пока нет, поэтому запустим виртуальный. Нам необходимо создать новый виртуальный девайс на основе версии платформы Android 2.3.3. Делается это через AVD Manager (меню WindowAVD Manager). Вспоминаем из прошлой главы, как создавать виртуальные устройства и создаём (запускать пока не надо).

Для запуска приложения есть несколько эквивалентных способов:

  1. Через меню выбрать RunRun.
  2. Нажать кнопку Run на панели инструментов.
  3. Нажать хоткей (если вы его ни на что не переопределили).

Делаем что-нибудь одно, на экране должен появиться диалог выбора, как именно мы хотим запустить проект, выбираем пункт Android application. Eclipse автоматически находит подходящий девай — наш недавно созданный виртуальный девайс, — запускает его, копирует туда скомпилированное приложение из проекта и запускает внутри виртуального девайса. Если виртуальный девайс уже запущен, приложение будет отправлено туда. Вот как это выглядит на экране (клик по ссылке откроет скриншот в полном размере):

Что же было сделано средой разработки только что?

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

Структура APK-файла, манифест

Скомпилированный APK-файл создаётся в каталоге нашего проекта, вот он:

% cd ~/android/eclipse-workspace/first\ project/bin/ % ls -l first\ project.apk -rw-r—r— 1 cancel cancel 13282 Фев 13 20:37 first project.apk

Этот файл на самом деле является ZIP-архивом с расширением :

% unzip -l first\ project.apk Archive: first project.apk Length Date Time Name ——— ———- —— —- 520 2012-02-13 20:37 res/layout/main.xml 1508 2012-02-13 20:37 AndroidManifest.xml 1176 2012-02-13 20:37 resources.arsc 3966 2012-02-13 20:37 res/drawable-hdpi/ic_launcher.png 1537 2012-02-13 20:37 res/drawable-ldpi/ic_launcher.png 2200 2012-02-13 20:37 res/drawable-mdpi/ic_launcher.png 1980 2012-02-13 20:37 classes.dex 585 2012-02-13 20:37 META-INF/MANIFEST.MF 638 2012-02-13 20:37 META-INF/CERT.SF 776 2012-02-13 20:37 META-INF/CERT.RSA ——— ——- 14886 10 files

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

Манифест (файл ) является очень важным элементом проекта, он представляет собой XML-файл, в котором описаны свойства приложения (название, описание), зависимости и требования к платформе на девайсе, фичи, которые предоставляет пакет и другие подобные вещи. Для редактирования манифеста можно пользоватся встроенным в ADT редактором, для его запуска просто откройте файл для редактирования, вот как это может выглядеть (клик откроет картинку в полном размере):

В центральной области Eclipse открыт редактор манифеста, внизу вы должны заметить кнопки-табы для переключения между секциями манифеста: Manifest, Application, Permissions, Instrumentation; а последняя кнопка — AndroidManifest.xml — позволит редактировать XML-код манифеста вручную. Сейчас я не буду подробно описывать значения всех полей, так как для этого придётся очень сильно погружаться во внутреннюю структуру андроидного приложения, поэтому быстро пробежимся по табам манифеста.

Manifest

Здесь у нас главная системная информация о приложении.

Поле Package
имя главного неймспейса.
Поле Version code
номер версии приложения в виде целого числа, каждая следующая версия приложения должна иметь бо́льший, чем предыдущие; именно это значение используется системой для сравнения версий, например.
Поле Version name
версия приложения в виде произвольной строки, здесь допускается практически что угодно, система это поле использует только в качестве описания.
Поля Shared user id и Shared user label
используются для группировки разных приложений от одного производителя, приложения, у которых совпадают Shared user id и которые подписаны одинаковым сертификатом, могут получать доступ к ресурсам друг друга.

(О сертификатах и подписанных пакетах речь пойдёт в следующих главах)

Поле Install location
здесь определяется, можно ли будет приложение ставить на SD-карточку.

В блоке Manifest extras можно добавить дополнительные опциональные элементы в манифест, например, какие размеры экранов поддерживает приложение.

Дальше в этом окне идут ссылки на операции с пакетом (экспорт APK-файла, например), документацию или другие табы редактора манифеста.

Application

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

Permissions

На этой странице задаются требуемые приложением пермиссии/разрешения. О пермиссиях чуть подробнее.

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

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

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

Ссылки

Читайте в следующей части:java-классы проекта, макеты интерфейсов, ресурсы, доступ к ресурсам из кода

← предыдущая часть | следующая часть →

.

Добавить комментарий

Закрыть меню