Как узнать uid приложения android
Об использовании android: sharedUserId = "android.uid.system"
После долгого поиска в Интернете я обнаружил, что есть два способа решить эту проблему:
Один из них - скомпилировать с помощью make в среде исходного кода системы Android:
1. Добавьте атрибут android: sharedUserId = "android.uid.system" в узел манифеста в AndroidManifest.xml приложения. .
2. Измените файл Android.mk и добавьте строку LOCAL_CERTIFICATE: = platform.
3. Используйте команду mm для компиляции, и сгенерированный apk будет иметь право изменять системное время.
Этот метод не может быть скомпилирован с .mk, поэтому я должен обратиться ко второму методу:
1. Добавьте атрибут android: sharedUserId = "android.uid.system". ,
2. Используйте eclipse для компиляции неподписанного файла apk, но этот файл apk использовать нельзя.
3. Используйте ключ платформы целевой системы, чтобы повторно подписать файл apk.
Этот шаг более сложен, сначала найдите файл ключа, расположение в моем каталоге исходного кода Android - «build / target / product / security»,
Следующие два файла - это platform.pk8 и platform.x509.pem. Затем используйте инструмент Signapk, предоставляемый Android, чтобы подписать,
Исходный код signapk находится в папке «build / tools / signapk», используется «signapk platform.x509.pem platform.pk8 input.apk output.apk»,
В имени файла лучше всего использовать абсолютный путь, чтобы предотвратить его обнаружение, или вы можете изменить исходный код и использовать его напрямую. Таким образом, финальный apk такой же, как и первый метод.
Наконец, чтобы объяснить принцип, сначала добавьте атрибут android: sharedUserId = "android.uid.system".
С помощью общего идентификатора пользователя можно настроить несколько APK-файлов с одним и тем же идентификатором пользователя для работы в одном процессе.
Затем сопоставьте UID программы с android.uid.system, то есть позвольте программе работать в системном процессе, чтобы у вас было право изменять системное время.
Недостаточно просто добавить UID. Если APK-файл установлен в это время, он не будет установлен, а подпись не будет совпадать.
Причина в том, что программа хочет запускаться в системном процессе, но также имеет ключ платформы целевой системы, которым являются два файла platform.pk8 и platform.x509.pem, упомянутые во втором методе выше.
После подписания этими двумя ключами apk фактически может быть помещен в системный процесс. Добавление LOCAL_CERTIFICATE: = platform к первому методу фактически использует эти два ключа для подписи.
Также существует проблема, то есть программа, сгенерированная таким образом, может использоваться только в исходной системе Android или системе, скомпилированной вами, потому что такая система может получить два файла platform.pk8 и platform.x509.pem.
Если Android, сделанный другой компанией, даже не может быть установлен. Попробуйте подписать ключ в исходном Android, программа работает на эмуляторе ОК, но при установке на G3 сразу же выдается запрос «Пакет . не имеет подписей, соответствующих подписям общего пользователя android.uid.system». Защитите безопасность системы.
Наконец, атрибут android: sharedUserId может не только помещать apk в системный процесс, но также настраивать несколько APK для работы в одном процессе.
Обмен данными должен быть полезным.
Как мы все знаем, Pid - это идентификатор процесса, Uid - это идентификатор пользователя, но Android - это не то же самое, что компьютер. У каждого пользователя компьютера есть Uid, который запускает программу, Uid этой программы - это этот пользователь, и каждая программа в Android Существует Uid. По умолчанию Android назначает Uid с разным общим уровнем для каждой программы. Если вы звоните друг другу, только Uid может быть одинаковым. Это обеспечивает определенную степень безопасности общих данных. Данные не могут быть получены произвольно между программами.
Существует три типа UID системного процесса:
- android:sharedUserId="android.uid.system"
- android:sharedUserId="android.uid.shared"
- android:sharedUserId="android.media"
Давайте поэкспериментируем с первым. Две другие реализации будут такими же.
Объявить UID
Во-первых, нам нужно объявить UID приложения в манифесте:
Фирменная упаковка
Предварительным условием для упаковки подписи является наличие файла подписи системы, который обычно находится в каталоге build / target / product / security исходного кода, а пользовательские системы некоторых производителей размещаются в других каталогах. Например, Nanopc3, который я использую, находится в следующем каталоге, который может быть глобальным Найдите его. Сначала я также использовал каталог сборки, но его не удалось установить после упаковки. Позже я обнаружил, что в каталоге vendor также был / (ㄒ o ㄒ) /
загрузка… повторно загрузитьОтмена загрузка… повторно загрузитьОтмена
Среди них android: sharedUserId = "android.uid.system" соответствует двум файлам platform.pk8 и platform.x509.pem.
Вот три распространенных способа импорта системных подписей:
- Повторно подписать сгенерированный apk
- Повторно подписать собственный файл подписи приложения
- Скомпилировать из mk файла
Уже есть apk
Созданный файл apk можно повторно подписать с помощью следующей команды через файл signapk.jar в каталоге исходного кода / out / host / linux-x86 / framework.
java -jar signapk.jar platform.x509.pem platform.pk8 my.apk new.apk
Обратите внимание, что четыре файла signapk.jar, platform.x509.pem, platform.pk8 и my.apk должны находиться по одному и тому же пути при использовании этой инструкции, в противном случае вам нужно изменить путь самостоятельно.
Восстановить подпись
После создания собственного файла ключа используйте инструмент keytool-importkeypair для повторного создания подписи с помощью следующей команды:
keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo
- demo.jks: файл подписи
- 123456: пароль файла подписи
- platform.pk8, platform.x509.pem: файл подписи системы
- демо: псевдоним файла подписи
Используйте файл mk для компиляции в исходной среде
Я не тестировал этот метод, потому что плохо разбираюсь в файлах mk. В обычных условиях он не будет использоваться. В конце концов, он в основном разработан с использованием инструментов ide. Достаточно двух вышеуказанных методов. При необходимости добавим позже.
Видел на форуме и сайте кучу вопросов, таких как:
-"А че такое уид??"
-"Зачем нужен uid?"
-"Где взять этот uid?"
-"Что такое, и с чем едят uid?"
-"Расскажите про уид!"
И вот, решил написать статейку для непосвященных =)
Итак, начнем.
UID - это составной идентификатор, с помощью которого идентифицируются объекты в Symbian OS. UID состоит из трех 32-битных отдельных чисел. Эти числа, называются компонетами
UID и обычно когда о них заходит речь, на них ссылаются как на UID1-, UID2- и UID3-компоненты. В Symbian OS UID'ы используются в самых различных случаях:
- UID-ы используются для идентификации типов различных объектов как во время исполнения так и во
время загрузки. Например исполняемые файлы, DLL, файловые хранилица и многое другое имеет свои собственные
UID.
- UID-ы используютя для проверки, что объект, который предполается загрузить обеспечит совместимый
и ожидаемый от него интерфейс.Таким образом можно проверить, что DLL относится к ожидаемому типу
или что используемое файловое хранилище имеет строго определнный тип.
- UID-ы - это значения которые однозначно связывают документы и приложения для их обработки. Например,
графические приложения с определенной программой их просмотра.
В Symbian OS UID-ы используются повсеместно для разнообразных идентификаций типов
файлов и увязки файлов с теми или иными приложениями. Конечно, пользователю более понятны обычные
имена файлов и Symbian OS гибко поддерживает имена файлов различной длинны. Но с точки зрения системы,
32-битные номера обеспечивают большую однозначность, систематичность и более легкую идентификацию.
Поэтому UID-ы являются фундаметальной характеристикой ОС.
По определению, UID-тип объекта состоит из трех отдельных UID-ов используемых
в комбинациях. Составные компоненты UID-ов называются UID1, UID2 и UID3 имеют следующие основные
характеристики:
- UID1- может быть рассмотрен как идентификатор на уровне системы; например, исполняемые файлы,
DLL, файловые хранилища все различаются по UID1.
- UID2-различия между объектами имеющими один и тот же UID1 и могут быть рассмотрены как идентификатор
интерфейса; например, статический интерфейс (разделяемая библиотека) и полиморфический интерфейс
(приложение или встраеваемая программная оболочка) DLL-ки отличаются по UID2.
- UID3-идентифицирует объекты, имеющие конкретный UID2 и может рассматриваться как идентификатор
проекта; например, UID3 может быть разделен между всеми объектами, принадлежащими данной программе,
включая библиотеки, если имеются, DLL-ки каркасов,и все документы.
UID-тип это объект типа TUidType, которой можно создать из комбинаций всех
или некоторых из трех возможных UID-ов. Если переменная имеет прелставляет собой UID, то можно выяснить
и значения составляющих её компонентов UID1, UID2 и UID3.
Объект в Symbian OS и, особенно, многие файлы в Symbian OS могут иметь все, несколько,
или вообще не иметь не одного из трех возможных UID-ов.
Вариант с отсутсвием UID-ов необходим для того, чтобы можно было взаимодействовать
с другими системами, позволяя легко и свободно использовать по назначению в Symbian OS не родные
файлы данных. Symbian OS позволяет создавать настраиваемые файловые ассоциации и идентификации даже
когда UID-ы отсутсвуют. Это делается по расширениям имен файлов.
Каждый "родной" документ должен иметь соотвествующий UID1. его значение задается
приложением, создавщим этот документ.
Необходимым является только UID1, но в большинстве случаев разработчики захотят
определить второй и третий UID-ы для документов, которые создает и использует их приложение. Значения
этих UID используются каркасом архитектуры приложения, чтобы управлять связями между приложениями
и их документами. Например, это позволяет при открытии файла определить и запустить связанное с ним
приложение, а также правильно отображать иконку этого приложения, возле файла документа. И наоборот
это позволяет приложению, отсортировывать свои файлы среди прочих.
UID задается из диапазона 0х01000000 до 0x0fffffff.
UID можно в любое время посмотреть, зайдя например в программу SmartFileMan, и нажав клавишу "5" на нужном файле.На экране появятся все три UID-a.
В «истории батареи» я обнаружил, что приложение с UID 10058 использует много батареи.
Как я могу найти название приложения с UID, равным 10058?
Android назначает каждому приложению UID (идентификатор пользователя) во время установки; в отличие от PID (ID процесса), который является временным и постоянно меняется, UID остается постоянным до тех пор, пока приложение не будет переустановлено. UID должен быть уникальным для каждого приложения, за исключением случаев, когда приложение явно запрашивает совместное использование идентификатора пользователя с другим приложением (в связи с этим существуют ограничения безопасности, оба приложения должны быть подписаны одним и тем же закрытым ключом, т.е. получены от одного и того же разработчика).
Эти приложения утверждают, что показывают UID приложений:
Попробуйте посмотреть /data/system/packages.xml (вам нужен root для просмотра этого файла), у каждого установленного приложения должна быть запись там. Скажем, у меня на телефоне установлен Adobe Reader:
Мой телефон назначил userId="10034" на Adobe Reader.
Для приложений, которые запросили поделиться идентификатором пользователя с другим приложением, скажите Handcent:
тогда атрибут, который вы ищете sharedUserId="10064"
Настройте adb на ПК, подключите устройство к ПК, запустите на ПК оболочку и введите:
замещать UID на ID, который вы ищете, например, 10102.
Строка, содержащая, Package < будет показывать имя пакета приложения между пробелами и >. Вы можете сделать adb shell dumpsys package PKG_NAME ( PKG_NAME → имя пакета приложения), чтобы узнать более подробную информацию об этом пакете / приложении.
Если Android рутирован, из оболочки adb или приложения эмулятора терминала вы можете сделать:
В выходных данных все, что находится перед UID, является именем пакета.
В качестве альтернативы, если Busybox или Toybox установлены и доступны в переменной PATH, из эмулятора терминала или оболочки adb выполните:
Поскольку нас интересует ярлык приложения, а не имя пакета, перейдите к ответу от GAThrawn или Izzy .
Используйте, find /data/data/ -user UID -type d -maxdepth 1 | xargs basename если вы получаете несколько результатов в первой find команде.Установите эмулятор терминала , запустите его и запустите:
ps перечисляет процессы и grep фильтры для идентификатора, который вы хотите.
Но это работает только в том случае, если приложение запущено при запуске команды.
Я пробую это, но это не работает, потому что такое приложение еще не запущено UID отображается в выводе ps, а также в PID. Вывод ps обычно имеет строки типа «12345 app_118 . », где 12345 - это PID, а app_118 - это UID (соответствует userId = 10118 в /data/system/packages.xml)В оболочке ADB (или эмуляторе терминала) используйте следующую команду:
и посмотрите в поле «Имя». Это должно быть название процесса. Так что в вашем случае это будет " cat / proc / 10058 / status "
10058 должен быть PID здесь, в то время как OP дал нам UID.У меня была похожая проблема с Android 6.0, Moto G 2nd Gen с 2014 года. Мне довелось обновить приложение ES File Explorer, и я заметил, что оно раздувалось до чертиков и высасывает много батареи. Я удалил приложение из системы, но приложение позволило зомби-процессу занять процессор. UID был похож на ваш 10118, и в статистике батареи он указан как самый голодный ресурс.
Затем я установил приложение с именем «OS Monitor» и заметил, что файл .esfm был единственным процессом, который занимал 60% процессорного времени. Я сразу понял, что это связано с ES File Explorer, но подождите . Я удалил ES File Explorer. Да. Единственное, что я не сделал, это перезапустил смартфон. Поверьте мне, я думал о сумасшедших вещах, таких как укоренение и выход из этого процесса, бросание телефона в стену, и даже начал верить, что моя батарея достигла конца жизни. К моему удивлению, я просто перезапустил телефон, и процесс исчез.
Поэтому, прежде чем принимать какие-либо радикальные меры, попробуйте выяснить, какое приложение дает вам плохое время, удалите его и перезагрузите телефон. Проверьте на ОС Мониторинг списка загрузки процессора, и все будет в порядке.
Для добавления новых приложений вам потребуется указать уникальный идентификатор приложения в магазине приложений (App Store или Google Play) в поле Bundle ID .
Узнать уникальный идентификатор iOS-приложения (Bundle ID или ID пакета) можно одним из двух способов:
Для собственных приложений:
Откройте iTunes Connect, перейдите к My Apps и выберите приложение, идентификатор которого хотите получить.
На странице приложения в выпадающем меню More выберите About this App .
Идентификатор приложения указан в поле Bundle ID .
Для любых приложений:
Скопируйте числовой идентификатор, который указан в URL между id и ? (в примере — 483693909 ).
В файле 1.txt, который браузер скачает по этому URL, найдите текст \"bundleId\" .
Идентификатор приложения Яндекс.Браузер для iPhone — ru.yandex.mobile.search .
Узнать уникальный идентификатор Android-приложения (имя пакета приложения или package name) можно одним из двух способов:
Для собственных приложений — откройте Консоль разработчика Google Play и выберите приложение, идентификатор которого хотите получить.
Идентификатор указан рядом с логотипом и названием приложения.
Идентификатор приложения Яндекс.Браузер для Android — com.yandex.browser .
","lang":>,"extra_meta":[>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>],"title":"Получение идентификатора приложения (Bundle ID) - Рекламная сеть. Справка","productName":"Рекламная сеть","extra_js":[[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>,,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>]],"extra_css":[[],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>,,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>]],"csp":<"script-src":[]>,"lang":"ru">>>'>"current":"ru","available":["ru","en"]>Для добавления новых приложений вам потребуется указать уникальный идентификатор приложения в магазине приложений (App Store или Google Play) в поле Bundle ID .
Узнать уникальный идентификатор iOS-приложения (Bundle ID или ID пакета) можно одним из двух способов:
Для собственных приложений:
Откройте iTunes Connect, перейдите к My Apps и выберите приложение, идентификатор которого хотите получить.
На странице приложения в выпадающем меню More выберите About this App .
Идентификатор приложения указан в поле Bundle ID .
Для любых приложений:
Скопируйте числовой идентификатор, который указан в URL между id и ? (в примере — 483693909 ).
В файле 1.txt, который браузер скачает по этому URL, найдите текст "bundleId" .
Идентификатор приложения Яндекс.Браузер для iPhone — ru.yandex.mobile.search .
Узнать уникальный идентификатор Android-приложения (имя пакета приложения или package name) можно одним из двух способов:
Для собственных приложений — откройте Консоль разработчика Google Play и выберите приложение, идентификатор которого хотите получить.
Читайте также: