- Файл манифеста AndroidManifest.xml
- Назначение файла
- Общая структура манифеста
- Описание
- Атрибуты
- Android Binary XML FormatВ¶
- Decode the AndroidManifest.xmlВ¶
- Decode any other XML fileВ¶
- Decode information from the resources.arscВ¶
- Working with AXML and Resource files from pythonВ¶
- sam40911 / AndroidManifest.xml
- Как разобрать AndroidManifest.xml-файл внутри an.пакет apk
- 14 ответов:
- используйте android-apktool
- Работа с манифестом Android
- Основы
- Activity Name
- Строка заголовка действия
- Запуск из средства выбора приложений
- Значок действия
- Разрешения
- Дополнительные функции
- Действия и функции намерения
- Элемент Application
Файл манифеста AndroidManifest.xml
Файл манифеста AndroidManifest.xml предоставляет основную информацию о программе системе. Каждое приложение должно иметь свой файл AndroidManifest.xml. Редактировать файл манифеста можно вручную, изменяя XML-код или через визуальный редактор Manifest Editor (Редактор файла манифеста), который позволяет осуществлять визуальное и текстовое редактирование файла манифеста приложения.
Назначение файла
- объявляет имя Java-пакета приложения, который служит уникальным идентификатором;
- описывает компоненты приложения — деятельности, службы, приемники широковещательных намерений и контент-провайдеры, что позволяет вызывать классы, которые реализуют каждый из компонентов, и объявляет их намерения;
- содержит список необходимых разрешений для обращения к защищенным частям API и взаимодействия с другими приложениями;
- объявляет разрешения, которые сторонние приложения обязаны иметь для взаимодействия с компонентами данного приложения;
- объявляет минимальный уровень API Android, необходимый для работы приложения;
- перечисляет связанные библиотеки;
Общая структура манифеста
Файл манифеста инкапсулирует всю архитектуру Android-приложения, его функциональные возможности и конфигурацию. В процессе разработки приложения вам придется постоянно редактировать данный файл, изменяя его структуру и дополняя новыми элементами и атрибутами.
Корневым элементом манифеста является . Помимо данного элемента обязательными элементами является теги и . Элемент является основным элементом манифеста и содержит множество дочерних элементов, определяющих структуру и работу приложения. Порядок расположения элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов. Кроме обязательных элементов, упомянутых выше, в манифесте по мере необходимости используются другие элементы.
Описание
Элемент является корневым элементом манифеста. По умолчанию Eclipse создает элемент с четырьмя атрибутами:
Атрибуты
объявляет разрешение, которое используется для ограничения доступа к определенным компонентам или функциональности данного приложения. В этой секции описываются права, которые должны запросить другие приложения для получения доступа к вашему приложению. Приложение может также защитить свои собственные компоненты (деятельности, службы, приемники широковещательных намерений и контент-провайдеры) разрешениями. Оно может использовать любое из системных разрешений, определенных Android или объявленных другими приложениями, а также может определить свои собственные разрешения.
android:name название разрешения android:label имя разрешения, отображаемое пользователю android:description описание разрешения android:icon значок разрешения android:permissionGroup определяет принадлежность к группе разрешений android:protectionLevel уровень защиты
Элемент запрашивает разрешение, которые приложению должны быть предоставлены системой для его нормального функционирования. Разрешения предоставляются во время установки приложения, а не во время его работы.
android:name имеет единственный атрибут с именем разрешения android:name. Это может быть разрешение, определенное в элементе
данного приложения, разрешение, определенное в другом приложении или одно из стандартных системных разрешений, например: android:name=»android.permission.CAMERA» или android:name=»»android.permission.READ_CONTACTS»
Наиболее распространенные разрешения
- INTERNET — доступ к интернету
- READ_CONTACTS — чтение (но не запись) данных из адресной книги пользователя
- WRITE_CONTACTS — запись (но не чтение) данных из адресной книги пользователя
- RECEIVE_SMS — обработка входящих SMS
- ACCESS_COARSE_LOCATION — использование приблизительного определения местонахождения при помощи вышек сотовой связи или точек доступа Wi-Fi
- ACCESS_FINE_LOCATION — точное определение местонахождения при помощи GPS
объявляет базовое имя для дерева разрешений. Этот элемент объявляет не само разрешение, а только пространство имен, в которое могут быть помещены дальнейшие разрешения.
определяет имя для набора логически связанных разрешений. Это могут быть как объявленные в этом же манифесте с элементом
разрешения, так и объявленные в другом месте. Этот элемент не объявляет разрешение непосредственно, только категорию, в которую могут быть помещены разрешения. Разрешение можно поместить в группу, назначив имя группы в атрибуте permissionGroup элемента
Источник
Android Binary XML FormatВ¶
Android uses a special format to save XML and resource files. Also resource files are XML files in the source folder, but all resources are packed into a single resource file called resources.arsc . The underlying format is chunk based and is capable for storing several different information.
The most common AXML file is the AndroidManifest.xml . This file must be part of every APK, and contains the meta-information about the package.
Androguard is capable of decoding such files and two different tools exists for decoding:
androguard arsc for decoding resources.arsc .
androguard axml for decoding AndroidManifest.xml and all other XML files
Decode the AndroidManifest.xmlВ¶
Let’s use one of the example files provided by androguard. To decode the AndroidManifest.xml of an APK file, simply give androguard axml the APK file as an argument:
The output will look like this:
You can check with the original, uncompiled, XML file, which can be found here:
The original file will print:
Note, that the overall structure is equal but there are certain differences.
Resource labels are hex numbers in the decompiled version but strings in the original one
Newlines and whitespaces are different.
Due to the compilation, this information is lost. But it does not matter, as the structure of the Manifest does not matter. To get some information about the resource IDs, we need information from the resources.arsc .
To retrive information about a single ID, simply run the following:
You can see, that the ID 7F040001 was successfully resolved to the same string from the source file. To understand how Android handles resource configurations, you should read HandlingResources.
Decode any other XML fileВ¶
Also layout files or other XML files provided with the APK are compiled. To decompile them, just give the path inside the APK as an argument, or specify the binary XML file directly:
Decode information from the resources.arscВ¶
To get XML resource files out of the binary resources.arsc , use androguard arsc .
For example, get all string resources of an APK:
will give the following output:
You can also list all resource types:
Working with AXML and Resource files from pythonВ¶
To load an AXML file, for example the AndroidManifest.xml , use the AXMLPrinter :
In order to use resources, you need the ARSCParser :
© Copyright 2012-2018, Anthony Desnos, Geoffroy Gueguen, Sebastian Bachmann Revision eef97351 .
Источник
sam40911 / AndroidManifest.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
xml version = » 1.0 » encoding = » utf-8 » standalone = » no » ?> |
manifest xmlns : android = » http://schemas.android.com/apk/res/android » package = » edu.ntust.cs.rfid.hw4 » platformBuildVersionCode = » 22 » platformBuildVersionName = » 5.1.1-1819727 » > |
uses-permission android : name = » android.permission.NFC »/> |
uses-permission android : name = » android.permission.VIBRATE »/> |
uses-feature android : name = » android.hardware.nfc » android : required = » true »/> |
application android : allowBackup = » true » android : icon = » @drawable/logo » android : label = » @string/app_name » android : theme = » @style/AppTheme » > |
activity android : label = » @string/app_name » android : name = » .NFCMain » android : screenOrientation = » portrait » android : windowSoftInputMode = » stateHidden » > |
intent-filter > |
action android : name = » android.intent.action.MAIN »/> |
category android : name = » android.intent.category.LAUNCHER »/> |
intent-filter > |
intent-filter > |
action android : name = » android.nfc.action.NDEF_DISCOVERED »/> |
category android : name = » android.intent.category.DEFAULT »/> |
intent-filter > |
activity > |
activity android : configChanges = » keyboardHidden|orientation » android : label = » @string/app_name » android : name = » .Key » android : screenOrientation = » portrait »/> |
application > |
manifest > |
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Как разобрать AndroidManifest.xml-файл внутри an.пакет apk
этот файл представляется в двоичном формате XML. Что это за формат и как он может быть проанализирован программно (в отличие от использования инструмента дампа aapt в SDK)?
этот двоичный формат не обсуждается в документации здесь.
Примечание: Я хочу получить доступ к этой информации из-за пределов среды Android, предпочтительно из Java.
14 ответов:
используйте android-apktool
есть приложение, которое читает apk файлы и декодирует XMLs почти в оригинальной форме.
Регистрация android-apktool для получения дополнительной информации
этот метод Java, который работает на Android, документирует (что я смог интерпретировать) двоичный формат AndroidManifest.xml-файл в поле .пакет apk. Во втором поле кода показано, как вызвать метод decompressXML и как загрузить байт[] из файла пакета приложения на устройстве. (Есть поля, назначение которых я не понимаю, если вы знаете, что они означают, скажите мне, я обновлю информацию.)
этот метод считывает AndroidManifest в байт[] для обработка:
большинство приложений хранятся в /system /app, который читается без root my Evo, другие приложения находятся в/data / app, который мне нужен root, чтобы увидеть. Аргумент » путь «выше будет выглядеть примерно так:» /system/app/Weather.apk»
как насчет использования Android Asset Packaging Tool (aapt), из Android SDK, в скрипт Python (или что-то еще)?
через aapt (http://elinux.org/Android_aapt), действительно, Вы можете получить информацию о .apk пакета и о его AndroidManifest.xml. В частности, вы можете извлечь значения отдельных элементов.apk пакета через ‘dump’ суб-команды. Например, вы можете извлечь user-permissions на AndroidManifest.xml внутри .apk пакета таким образом:
здесь пакета.apk ваш .apk пакета.
кроме того, вы можете использовать команду Unix pipe для очистки выходных данных. Например:
вот скрипт на Питоне что к тому программно:
аналогичным образом вы можете извлечь другую информацию (например,пакета,название и т. д. ) из AndroidManifest.xml:
если вместо этого вы хотите разобрать все XML-дерево AndroidManifest, вы можете сделать это аналогичным образом с помощью xmltree:
использование Python как и раньше:
вы можете использовать axml2xml.pl инструмент разработан некоторое время назад в рамках android-random. Он будет генерировать текстовый файл манифеста (AndroidManifest.xml)из двоичного.
Я говорю, что «текстовое«, а не «оригинал » потому что, как и многие инструменты обратной инженерии, этот не идеален и результат не будет быть полным. Я предполагаю, что либо это никогда не было особенностью полная или просто не совместимая с прямой передачей (с более новой схемой двоичного кодирования). Какова бы ни была причина,axml2xml.pl инструмент не сможет правильно извлечь все значения атрибутов. Такими атрибутами являются minSdkVersion, targetSdkVersion и в основном все атрибуты, которые ссылаются на ресурсы (например, строки, значки и т. д.), т. е. только имена классов (видов работ, услуг и т. д.) извлекаются правильно.
тем не менее, вы все еще можете найти эти недостающие сведения, запустив aapt инструмент в исходном файле приложения для Android (.apk):
Источник
Работа с манифестом Android
AndroidManifest.xml — это мощный файл на платформе Android, который позволяет описать функциональные возможности и требования приложения для Android. Однако работать с ним непросто. Xamarin. Android помогает снизить эту сложность, позволяя добавлять настраиваемые атрибуты в классы, которые затем будут использоваться для автоматического создания манифеста. Наша цель заключается в том, что 99% наших пользователей никогда не нужно вручную изменять AndroidManifest.xml.
AndroidManifest.xml создается как часть процесса сборки, и XML-код, найденный в свойствах/AndroidManifest.xml , объединяется с XML, созданным из настраиваемых атрибутов. Полученный Объединенный AndroidManifest.xml находится в подкаталоге obj ; Например, он находится в файле obj/Debug/Android/AndroidManifest.xml для отладочных сборок. Процесс слияния является тривиальным: он использует настраиваемые атрибуты в коде для создания XML-элементов и вставляет эти элементы в AndroidManifest.xml.
Основы
Во время компиляции сборки сканируются для классов, не являющихся abstract классами, которые являются производными от abstract и имеют [Activity] объявленный атрибут. Затем эти классы и атрибуты используются для создания манифеста. Рассмотрим следующий пример кода:
Это приведет к невозможности создания в AndroidManifest.xml. Если требуется создать элемент, необходимо использовать [Activity] настраиваемый атрибут:
В этом примере к AndroidManifest.xmlу добавляется следующий фрагмент XML:
[Activity] Атрибут не влияет на abstract типы; abstract типы игнорируются.
Activity Name
Начиная с Xamarin. Android 5,1, имя типа действия основано на MD5SUM имени экспортируемого типа с указанием сборки. Это позволяет предоставить одно и то же полное имя из двух разных сборок и не получить ошибку упаковки. (Перед Xamarin. Android 5,1 имя типа действия по умолчанию было создано из пространства имен в нижнем регистре и имени класса.)
Если вы хотите переопределить это значение по умолчанию и явно указать имя действия, используйте Name свойство:
В этом примере создается следующий фрагмент XML:
Свойство следует использовать Name только в целях обратной совместимости, так как такое Переименование может замедлить Поиск во время выполнения. Если у вас есть устаревший код, который ожидает, что имя типа по умолчанию для действия должно основываться на пространстве имен в нижнем регистре и имени класса, см. раздел имя вызываемой оболочки Android для получения советов по обеспечению совместимости.
Строка заголовка действия
По умолчанию Android предоставляет приложению заголовок при его запуске. Для этого используется значение /manifest/application/activity/@android:label . В большинстве случаев это значение будет отличаться от имени класса. Чтобы указать метку приложения в заголовке окна, используйте Label свойство. Например:
В этом примере создается следующий фрагмент XML:
Запуск из средства выбора приложений
По умолчанию действие не отображается на экране запуска приложений Android. Это связано с тем, что в приложении может быть много действий, и вам не нужен значок для каждого из них. Чтобы указать, какие из них должны быть запущены в средстве запуска приложений, используйте MainLauncher свойство. Например:
В этом примере создается следующий фрагмент XML:
Значок действия
По умолчанию для действия будет задан значок запуска по умолчанию, предоставляемый системой. Чтобы использовать пользовательский значок, сначала добавьте .png в Resources/Draw, задайте для его действия сборки значение AndroidResource, а затем используйте свойство, чтобы указать используемый значок. Например:
В этом примере создается следующий фрагмент XML:
Разрешения
При добавлении разрешений в манифест Android (как описано в разделе Добавление разрешений в манифест Android) эти разрешения записываются в свойствах и AndroidManifest.xml. Например, при задании INTERNET разрешения в INTERNET добавляется следующий элемент:
Отладочные сборки автоматически устанавливают некоторые разрешения для упрощения отладки (например INTERNET , и READ_EXTERNAL_STORAGE ) — эти параметры задаются только в созданном INTERNET и не отображаются как включенные в параметрах READ_EXTERNAL_STORAGE .
Например, если вы изучите созданный файл манифеста в файле obj/Debug/Android/AndroidManifest.xml, вы можете увидеть следующие добавленные элементы разрешений:
В версии сборки выпуска манифеста (в файле obj/Debug/Android/AndroidManifest.xml) эти разрешения не настраиваются автоматически. если вы обнаружите, что переключение на сборку выпуска приводит к тому, что ваше приложение потеряет разрешение, доступное в отладочной сборке, убедитесь, что это разрешение явно задано в параметрах, необходимых для приложения (см. раздел сборка приложения android в Visual Studio для Mac; см. свойства манифеста android в Visual Studio).
Дополнительные функции
Действия и функции намерения
Манифест Android предоставляет способ описания возможностей действия. Это делается с помощью целей и [IntentFilter] настраиваемый атрибут. Можно указать, какие действия соответствуют действию, с помощью IntentFilter и какие категории подходят дляСвойство Categories . Необходимо указать по крайней мере одно действие (это объясняется тем, что действия предоставляются в конструкторе). [IntentFilter] может предоставляться несколько раз, и каждое использование приводит к отдельному элементу в . Например:
В этом примере создается следующий фрагмент XML:
Элемент Application
Например, следующий Application атрибут добавляется в Application , чтобы указать, что приложение может быть отлажено, что его понятное имя — мое приложение, а в качестве темы по умолчанию для всех действий используется стиль.
Источник