Название пакета для android что это

Полный список

— разбираемся, что такое Package для приложения

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

Пакет приложения мы прописываем в визарде создания приложения.

Потом его можно найти в манифесте.

Он же по дефолту становится пакетом для Java-классов

Как-то не особо значимая цель .

Может быть он используется как-то еще? Оказывается да. Более того, пакет — это крайне важная вещь при создании приложения. Пакет является идентификатором приложения в системе. Т.е. когда вы устанавливаете приложение, система смотрит его пакет и ищет уже установленное приложение с таким пакетом. Если не нашлось, то все ок и приложение устанавливается.

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

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

Проведем пару тестов. Я создам два приложения Package1 и Package2 с одинаковым пакетом.

Установлю первое. Оно появилось в списке.

Теперь не удаляя первое, установлю второе.

Первое исчезло. Осталось только второе.

Система решила, что второе является обновлением первого (т.к. пакеты и ключи совпадают), поэтому первое благополучно снесла и заменила вторым. Собственно, это и происходит при обычном обновлении.

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

Параметр r здесь означает, что приложение надо переустановить, если оно уже существует.

Видим ошибку Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]. Система сверила ключи у установленного и устанавливаемого приложений, увидела, что они разные и решила, что это будет не обновление, а просто приложение от другого разработчика ломится с тем же пакетом. И вполне разумно решила не удалять имеющееся приложение, а предупредить пользователя, что не совпадают ключи.

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

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

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

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

Читайте также:  Как изменить название bluetooth устройства android

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

И в конце урока небольшой ликбез. Пакет имеет еще одно значение. Как вы уже наверно заметили по вкладке Devices в Eclipse, пакет используется в качестве имени процесса, в котором запускается приложение. При этом, под каждое приложение система создает пользователя. Это позволяет разграничить доступ к данным. Каждое приложение запускается и работает со своими данными в отдельном процессе под отдельным пользователем. Соответственно, другие приложения не имеют к этим данным доступа, т.к. запущены под другими пользователями.

На следующем уроке:

— разбираемся с ViewPager

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Получить имя пакета и общее название приложений через ADB

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

  • Как получить общее имя приложения с именем пакета (например, com.android.blabla)? (командная строка или включенное приложение) не работает через ADB (но использует приложение, с которым вам нужно искать вручную), что соответствует запросу OP
  • Как найти приложение по имени пакета? просто возвращается к поиску URL в Google Play , который не всегда подходит (так как там не все приложения доступны).

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

Я знаю, что есть несколько инструментов для получения деталей пакета:

  • adb dumpsys package : Хотя в этом списке перечислены все пакеты с подробной информацией, «общее имя» не отображается
  • adb shell pm list : только дает имена пакетов
  • aapt сможет получить общее имя, но для этого потребуется сначала извлечь .apk файл с устройства, что не очень удобно (и, очевидно, будет довольно медленным, если установлено много и / или больших приложений)

Я что-то пропустил? Я знаю, что информация должна быть на устройстве (как еще она может отображать имена приложений в графическом интерфейсе? Я сомневаюсь, что Android анализирует .apk файл каждый раз, когда графическому интерфейсу нужно «общее имя»). Так есть ли способ получить его, используя ADB напрямую?

TL; DR

Фон (если кому-то любопытно): я хочу иметь возможность быстро получить список пользовательских приложений с любого из моих устройств, не возвращаясь к акробатике. Список имен их пакетов я могу получить, используя их adb shell pm list -3 , но так как они являются только именами пакетов, распознавание приложений является догадкой. Поэтому, если бы была какая-то команда ADB для получения общего имени для данного имени пакета, я мог бы просто использовать цикл вроде for pkg in $(adb shell pm list -3); do echo «- $(adb $pkg) ($pkg)»; done — и получить список всех установленных пользовательских приложений в «удобочитаемом формате» вместе с именами их пакетов.

Читайте также:  1000 кости для андроида

Случаи использования:

  • Посмотрите, какие «лишние» приложения установлены (которые я мог бы удалить)
  • Перекрестные списки с нескольких устройств
  • Документация 😉
  • и, вероятно, больше (но выше 3 это то, что мне нужно)

Источник

Прочитайте имя пакета Android APK

Мне нужно получить имя пакета из Android APK. Я попытался распаковать APK и прочитать содержимое AndroidManifest.xml , но, похоже, это не текстовый файл.

Как я могу извлечь имя пакета APK?

19 ответов

вы можете установить apk на свой телефон, затем

connect используя adb, вы можете запустить adb shell и выполнить PM list packages-f, который показывает имя пакета для каждого установленного apk.

Если вы открываете AndroidManifest.xml с помощью MS Notepad, поиск фразы package и вы найдете следующее:

где XXX.ХХХХХХХ.xxxxxxx-это имя вашего пакета, просто написанное пробелом после каждого символа.

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

Если вы смотрите на google play и хотите узнать его имя пакета, вы можете посмотреть url или адресную строку. Вы получите имя пакета. Вот!—1—> — имя пакета

следующий скрипт bash отобразит имя пакета и основное имя действия:

apk_package.sh

запустите его так:

на основе ответа @hackbod . но связано с windows.

aapt команда находится на Android\SDK\build-tools\version . Если вам нужна дополнительная информация о том, что appt command (Android Asset Packaging Tool) прочитайте это https://stackoverflow.com/a/28234956/812915

на dump суб-команда aapt используется для отображения значений отдельных элементов или частей пакет:

aapt dump badging

если вы хотите увидеть только строку с package: name информация, использовать findstr

aapt dump badging

| findstr -n «package: name» | findstr «1:»

надеюсь, что это поможет другому пользователю windows!

Программный Ответа

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

пример: com.example.appname (и ничего еще)

требования

aapt — Android инструмент упаковки активов, часть SDK Tools загрузить

Решение 1

используя awk указать ‘ в качестве разделителя полей найдите строку с package: name= , и напечатать только 2-е «поле» в строку:

недостатком этого метода является то, что он полагается на aapt для вывода информационных полей пакета в том же порядок:

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

решение 2

используя awk указать » в качестве разделителя полей найдите строку с package= , и напечатать только 2-е «поле» в строку:

слабость этого метода заключается в том, что он полагается на aapt для вывода package= только в Android Manifest: раздел вывода. У нас нет обязательств от разработчиков поддерживать это формат.

решение 3

разверните файл apk с помощью apktool d и прочитайте AndroidManifest.XML.

это был бы лучший метод, но AndroidManifest.xml-это двоичный файл, и все ответы SO, которые я вижу для преобразования его в текст, не работают. (Используя apktool d вместо простого unzip должен делать это для вас, но это не так.) прокомментируйте, пожалуйста, если у вас есть решение этой проблемы

Читайте также:  Wifi analyzer для андроид описание

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

другое решение-использовать список aapt и использовать sed для анализа этого:

aapt list -a $PATH_TO_YOUR_APK | sed -n «/^Package Group[^s]/s/.*name=//p»

Я думаю, что лучший и самый простой способ извлечь только имя пакета в Linux

  1. aapt извлекает информацию APK
  2. Grep «пакет», чтобы сохранить только строку о пакете информации
  3. Make sed замените всю строку именем пакета, используя только следующее регулярное выражение: package: name='([a-z0-9.]*)’.* и замена первой (и только) соответствующей группой.

вы можете извлечь AndroidManifest.xml из APK, удалите все нулевые байты, пропустите все до тех пор, пока после строки «манифест», а затем вы находитесь в байте длины, за которым следует имя пакета (и что происходит после него). Для трудной задачи я использую великое гема tool, поэтому команда выглядит так:

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

есть очень простой способ, если у вас есть APK allready на вашем смартфоне. Просто используйте одно из этих приложений:

простым решением было бы открыть Android Studio — > Build — > Analyze Apk. просмотрите и выберите APK теперь вы можете найти имя пакета и в значительной степени вы можете прочитать.

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

Я также пробовал де-компиляцию, она работает, но недавно я нашел самый простой способ:

Загрузите и установите Appium из веб-сайт Appium

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

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

вот скрипт, который я использую:

чтобы вы могли написать:

ADB uninstall`. /getPackageName.sh файл.apk’

для Windows следующее работало для меня:

Примечание

пожалуйста, отредактируйте пути АБР, aapt, APKPath по пути АБР, aapt, и место АПК в вашей системе.

работает:

  • здесь я добавил apk в папку на рабочем столе » \Desktop\APK\Instant_Instal\».
  • команда %adb% install %apk% устанавливает приложение, если устройство подключено.
  • этот %aapt% dump badging %APKFullPath% | FIND «package: name=» > temp.txt извлекает имя пакета и несколько других деталей, таких как версия и т. д. из apk и магазинов в temp.txt файл в том же месте, что и apk.
  • FOR / F «tokens=2 delims= ‘» %%s IN (temp.txt) установите pkgName=%%s extracts the package name and assigns to переменная pkgName
  • наконец-то %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1 запускает приложение.

по сути, приведенный выше код устанавливает apk из заданного местоположения на рабочем столе «Desktop\APK\Instant_Instal\» на устройство и запускает приложение.

Как я не смог найти имя пакета в .файл apk с редактором (как предложено выше), я проверил функции в приложении «ES Datei Explorer» / «ES File Explorer» (бесплатная версия), который я уже установил. В этом инструменте имя пакета отображается правильно.
Поскольку я думаю, что хороший проводник не должен отсутствовать на телефоне, я предлагаю использовать этот инструмент (если вы уже установили apk на мобильном телефоне и должны знать имя пакета).

Я рекомендую вам сохранить его .txt, потому что он может быть очень длинным. Итак:

список aapt — «path_to_apk» > файл.txt

Источник

Оцените статью