Прочитайте имя пакета Android APK
Как я могу извлечь имя пакета APK?
19 ответов
вы можете установить apk на свой телефон, затем
connect используя adb, вы можете запустить adb shell и выполнить PM list packages-f, который показывает имя пакета для каждого установленного apk.
Если вы открываете AndroidManifest.xml с помощью MS Notepad, поиск фразы package и вы найдете следующее:
где XXX.ХХХХХХХ.xxxxxxx-это имя вашего пакета, просто написанное пробелом после каждого символа.
это полезный способ, когда у вас нет каких-либо конкретных установленных инструментов.
следующий скрипт bash отобразит имя пакета и основное имя действия:
apk_package.sh
на dump суб-команда aapt используется для отображения значений отдельных элементов или частей пакет:
если вы хотите увидеть только строку с package: name информация, использовать findstr
надеюсь, что это поможет другому пользователю windows!
Программный Ответа
Если вам нужно сделать это программно, это немного больше, чем просто ответ в ваш мозг. У меня есть скрипт, который я использую для подписи всех наших приложений, но каждый использует другой ключ. Вот 2 способа получить только имя пакета как выход, так что вы можете поместить его в переменную или сделать все, что вам нужно с ним.
пример: com.example.appname (и ничего еще)
требования
Решение 1
недостатком этого метода является то, что он полагается на aapt для вывода информационных полей пакета в том же порядок:
у нас нет обязательств от разработчиков поддерживать этот формат.
решение 2
слабость этого метода заключается в том, что он полагается на aapt для вывода package= только в Android Manifest: раздел вывода. У нас нет обязательств от разработчиков поддерживать это формат.
решение 3
разверните файл apk с помощью apktool d и прочитайте AndroidManifest.XML.
это был бы лучший метод, но AndroidManifest.xml-это двоичный файл, и все ответы SO, которые я вижу для преобразования его в текст, не работают. (Используя apktool d вместо простого unzip должен делать это для вас, но это не так.) прокомментируйте, пожалуйста, если у вас есть решение этой проблемы
Если вы просто хотите знать имя пакета, запустите adb logcat, запустите действие, которое вы хотите, вы получите подсказку об имени пакета.
другое решение-использовать список aapt и использовать sed для анализа этого:
Я думаю, что лучший и самый простой способ извлечь только имя пакета в Linux
вы можете извлечь AndroidManifest.xml из APK, удалите все нулевые байты, пропустите все до тех пор, пока после строки «манифест», а затем вы находитесь в байте длины, за которым следует имя пакета (и что происходит после него). Для трудной задачи я использую великое гема tool, поэтому команда выглядит так:
конечно, вы можете использовать любой другой инструмент для фильтрации.
есть очень простой способ, если у вас есть APK allready на вашем смартфоне. Просто используйте одно из этих приложений:
вы можете установить Package_Name_Viewer.apk на эмуляторе, а затем вы можете увидеть имя пакета всех установленных приложений на эмуляторе.
Я также пробовал де-компиляцию, она работает, но недавно я нашел самый простой способ:
Загрузите и установите Appium из веб-сайт Appium
чтобы использовать это в пакетных сценариях, удобно, чтобы скрипт возвращал только имя пакета (например, для удаления приложения, когда у вас есть APK).
вот скрипт, который я использую:
чтобы вы могли написать:
ADB uninstall`. /getPackageName.sh файл.apk’
для Windows следующее работало для меня:
Примечание
пожалуйста, отредактируйте пути АБР, aapt, APKPath по пути АБР, aapt, и место АПК в вашей системе.
работает:
по сути, приведенный выше код устанавливает apk из заданного местоположения на рабочем столе «Desktop\APK\Instant_Instal\» на устройство и запускает приложение.
Каким должно быть имя пакета приложения Android?
Я хочу знать, почему это happnes? И как правильно название пакета для Android?
Если кто знает причина или ответ на этот вопрос, пожалуйста, дайте мне знать.
6 ответов
Как указано здесь: имена пакетов записываются в нижнем регистре, чтобы избежать конфликтов с именами классов или интерфейсов.
коллизии имен, которые происходят в одной компании, должны обрабатываться соглашением внутри этой компании, возможно, путем включения региона или имени проекта после названия компании (например, com.образец.регион.пакета mypackage).
пакеты на самом языке Java начинаются с java. или javax.
в некоторых случаях имя домена интернета может быть недопустимым именем пакета. Это может произойти, если имя домена содержит дефис или другой специальный символ, если имя пакета начинается с цифры или другого символа, который незаконно использовать в качестве начала имени Java, или если имя пакета содержит зарезервированное ключевое слово Java, такое как «int». В этом случае предлагаемое соглашение заключается в добавлении подчеркивания. Например:
Android следует тем же соглашениям об именах, что и Java,
Именования
имена пакетов записываются в нижнем регистре, чтобы избежать конфликтов с именами классов или интерфейсов.
компании используют свое обратное доменное имя Интернета, чтобы начать свои имена пакетов-например, com.образец.mypackage для пакета с именем mypackage, созданного программистом на example.com.
конфликты имен, которые происходят в пределах одного компания должна обрабатываться по соглашению внутри этой компании, возможно, путем включения региона или названия проекта после названия компании (например, com.образец.регион.пакета mypackage).
пакеты на самом языке Java начинаются с java. или javax.
в некоторых случаях имя домена интернета может быть недопустимым именем пакета. Это может произойти, если имя домена содержит дефис или другой специальный символ, если имя пакета начинается с цифры или другого символа, который запрещено использовать в качестве начала имени Java, или если имя пакета содержит зарезервированное ключевое слово Java, такое как «int». В этом случае предлагаемое соглашение должно добавить подчеркивание. Например:
Легализация Имен Пакетов:
имя пакета с 0 может вызвать проблему для sharedPreference.
(OK) con = createPackageContext(«com.example.android.sf1», 0);
(проблема, но без ошибок)
посетить https://developers.google.com/mobile/add и попробуйте заполнить «имя пакета Android». В некоторых случаях он может написать ошибку: «недопустимое имя пакета Android».
и хотя идентификатор приложения выглядит как традиционный пакет Java имя, правила именования для идентификатора приложения немного больше ограничительный:
Итак, «0com.образец.app » и » com.1example.приложение» ошибки.
Как удалить установленные с завода приложения на Android смартфоне или планшете без Root
Вас не устраивает тот факт, что на вашем только что купленном смартфоне, планшете или другом Android устройстве производитель установил целый набор различных приложений, которыми вы не собираетесь пользоваться и которые нельзя удалить штатными средствами?
Сегодня я хочу рассказать вам как избавиться от «мусорного» (bloatware) программного обеспечения, которое порой занимает достаточно серьезный объем встроенной памяти или которое работая в фоновом режиме замедляет ваше устройство и впустую расходует заряд его батареи.
Способ удаления предустановленных производителем приложений, который я вам сегодня представлю относительно прост и не требует даже наличия root прав (доступа к системе с правами суперпользователя).
Как удалить установленные с завода Android приложения
1. Прежде всего вам потребуется установить на смартфон или планшет приложение Инспектор приложения, которое вы можете скачать с этой страницы Google Play Маркет.
2. Теперь вам потребуется наличие на своем компьютере программы ADB. Раньше она шла в составе Google SDK, но с недавних пор вы можете скачать её на свой компьютер отдельно.
Скачать ADB (вместе с Fastboot) от Google вы можете по следующим ссылкам:
3. Чтобы ваш смартфон или планшет мог работать с программой ADB (и Fastboot) вам нужно в меню настроек его системы, в скрытом разделе «Для разработчиков» включить режим отладки через USB. Как его найти и включить читайте в этом материале.
4. Подключите ваш смартфон к компьютеру с помощью USB кабеля, перейдите на компьютере в папку с программой ADB и запустите окно командной строки Windows. Для этого в проводнике введите в адресной строке cmd и нажмите «Enter».
5. В окне командной строки, Power Shell или терминала выполните команду:
Если ранее вы все сделали правильно, то ADB сообщит вам о том, что телефон или планшет, подключен к ПК, а на экране мобильного устройства появится предложение разрешить отладку с этого компьютера. Разрешите её нажав на кнопку ОК.
6. Теперь вам нужно узнать имя пакета приложения, которое вы хотели бы удалить со своего смартфона или планшета. В этом нам поможет установленное ранее приложение Инспектор приложений (Application Inspector)
Запустите его и в списке установленных приложений («App List») выберите то, которое вам нужно. Например, если я хочу удалить приложение Xperia Transfer Mobile, я нахожу его в списке App List и выбираю.
При этом откроется окно со сведениями о приложении где под наименованием приложения вы увидите имя его пакета. В нашем случае это com.sonymobile.xperiatransfermobile
7. На компьютере в окне командной строки введите по очереди две команды:
после ввода второй команды дождитесь появления на экране строки «Success» сообщающей об успешном её выполнении:
Всё, приложение Xperia Transfer Mobile со смартфона удалено. Если вы теперь зайдете в раздел «Приложения» меню настроек системы, вы увидите, что напротив его имени стоит пометка «Не установлено».
Получаем имя версии и версию кода в Android приложении
Получение сведений о версии Android приложения одна из самых распространённых задач. Хотя бы потому, что большинство приложений так или иначе содержат сведения «о программе».
Рассмотрим способы получения сведений о версии в коде приложения.
Для того чтобы получить сведения о версии приложения можно использовать два способа.
1.Отображение версии из ресурсов
В этом случае информация о версии сохраняется в обычный файл ресурсов и выводится из них же.
Данный способ самый простой, но и самый не эффективный, так как сведения о версии необходимо редактировать вручную. Хорошо, если файл со строковыми ресурсами один и имеет небольшой объём.
2.Использование менеджера пакетов
Гораздо лучше использовать для получения сведений о версии менеджер пакетов.
Доступ к нему возможен из Activity или Context при помощи метода getPackageManager. Этот метод не принимает никаких параметров.
Информация о версии доступна в виде объекта PackageInfo, который можно получить с помощью метода getPackageInfo менеджера пакетов. Данный метод принимает два параметра:
Имя версии приложения доступно в формате String при помощи свойства versionName, а версия кода в формате int при помощи свойства versionCode.
Ниже приведён пример отображения имени версии приложения и версии кода в TextView рассматриваемым способом (не забываем про обработку исключений).
Полный список
— разбираемся, что такое Package для приложения
Package можно перевести как пакет. Этот вариант перевода я и буду использовать в уроке.
Пакет приложения мы прописываем в визарде создания приложения.
Потом его можно найти в манифесте.
Он же по дефолту становится пакетом для Java-классов
Если же система определила, что приложения были подписаны разными ключами, то это значит, что приложения были созданы разными авторами, пакеты совпали случайно, и новое вовсе не является обновлением старого. В этом случае при установке нового, старое было бы заменено, а значит потеряно (а не обновлено), т.к. приложения абсолютно разные. И система не дает поставить новое приложение, пока не будет вручную удалено старое.
Проведем пару тестов. Я создам два приложения Package1 и Package2 с одинаковым пакетом.
Установлю первое. Оно появилось в списке.
Теперь не удаляя первое, установлю второе.
Первое исчезло. Осталось только второе.
Система решила, что второе является обновлением первого (т.к. пакеты и ключи совпадают), поэтому первое благополучно снесла и заменила вторым. Собственно, это и происходит при обычном обновлении.
Теперь подпишу Package2 другим ключом, чем оно было подписано изначально и попробую обновить через adb.
Параметр r здесь означает, что приложение надо переустановить, если оно уже существует.
Видим ошибку Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]. Система сверила ключи у установленного и устанавливаемого приложений, увидела, что они разные и решила, что это будет не обновление, а просто приложение от другого разработчика ломится с тем же пакетом. И вполне разумно решила не удалять имеющееся приложение, а предупредить пользователя, что не совпадают ключи.
Если закинуть это приложение на эмулятор и поставить через файловый менеджер, получим примерно то же сообщение.
Из вышесказанного можно сделать следующий вывод: ваш ключ, которым вы подписываете приложение ни в коем случае нельзя терять или давать кому-либо.
Если вы ключ потеряете, то ваше приложение навсегда потеряет возможность быть обновленным. Даже если вы создадите новый ключ с тем же алиасом, паролем и данными владельца, это все равно будет другой ключ. И подписанная им следующая версия приложения будет рассматриваться системой не как обновление, а как попытка приложения от другого разработчика заменить ваше приложение и не даст его установить, пока не удалите установленное.
Если же вы ключ кому-то предоставите, то этот человек сможет сделать обновление для вашего приложения без вашего участия. И если этот человек имеет доступ и к вашей учетке разработчика в маркете, то он сможет залить туда свою версию вашего приложения.
Также не забывайте пароли от хранилища и от ключа. Это будет равносильно тому, что вы потеряли ключ. В общем, относитесь к вашим ключам со всей серьезностью.
И в конце урока небольшой ликбез. Пакет имеет еще одно значение. Как вы уже наверно заметили по вкладке Devices в Eclipse, пакет используется в качестве имени процесса, в котором запускается приложение. При этом, под каждое приложение система создает пользователя. Это позволяет разграничить доступ к данным. Каждое приложение запускается и работает со своими данными в отдельном процессе под отдельным пользователем. Соответственно, другие приложения не имеют к этим данным доступа, т.к. запущены под другими пользователями.
На следующем уроке:
— разбираемся с ViewPager
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме



















