Як я можу знайти ім’я програми за допомогою UID?


39

У "історії історії акумуляторів" я виявив, що програма з UID 10058 використовує багато акумулятора.

Як я можу знайти назву програми з UID рівним 10058?

Відповіді:


32

Android призначає кожній програмі UID (ID користувача) під час встановлення; На відміну від PID (Process ID), який є тимчасовим і постійно змінюється, UID залишається постійним до тих пір, поки додаток не буде перевстановлено. UID повинен бути унікальним для кожної програми, за винятком випадків, коли програма прямо вимагає поділитися користувачем з іншою програмою (навколо цього існують обмеження безпеки, обидва додатки повинні бути підписані одним і тим же приватним ключем, тобто від одного і того ж розробника).

Ці програми стверджують, що показують UID додатків:

Редагувати:

Спробуйте подивитись /data/system/packages.xml(для перегляду цього файлу вам потрібен корінь), для кожного встановленого додатка має бути запис. Скажімо, у мене в телефоні встановлений Adobe Reader:

<package name="com.adobe.reader" codePath="/mnt/asec/com.adobe.reader-1/pkg.apk" flags="262144" ts="1300539048000" version="37149" userId="10034" installer="com.google.android.feedback">
<sigs count="1">
<cert index="21" key="... very long random string ..." />
</sigs>
<perms />
</package>

Мій телефон призначено userId="10034"Adobe Reader.

Про програми, які попросили поділитися ідентифікатором користувача з іншою програмою, скажіть Handcent:

<package name="com.handcent.nextsms" codePath="/system/app/HandcentSMS.apk" flags="1" ts="1217592000000" version="373" sharedUserId="10064">
<sigs count="1">
<cert index="17" key="... very long random string ..." />
</sigs>
</package>

то атрибут, який ви шукаєте, - це sharedUserId="10064"


26

Налаштуйте на ПК, підключіть пристрій до ПК, запустіть оболонку на ПК та введіть:

adb shell "dumpsys package | grep -A1 'userId=UID'"

Замініть UIDідентифікатор, який ви шукаєте, наприклад 10102.

Приклад:

bash-4.2 # adb shell "dumpsys package | grep -A1 'userId = 10102'"
   userId = 10102
   pkg = пакет {46171ce com.android.chrome }
bash-4.2 #

Рядок, що містить, Package{повинен містити назву пакета програми між пробілами та }. Ви можете adb shell dumpsys package PKG_NAME( PKG_NAME→ назва пакета програми), щоб дізнатися більше про цей пакет / додаток.


Якщо Android має коріння з оболонки adb або емулятора терміналу, ви можете:

су
cat /data/system/packages.list | grep UID

У висновку що-небудь перед UID є назвою пакета.

Приклад:

shell @ shamu: / $ su
root @ shamu: / # cat /data/system/packages.list | греп 10102
com.android.chrome 10102 0 /data/data/com.android.chrome за замовчуванням 3002 3003,3001
root @ shamu: / #

Крім того, якщо ви встановили Busybox або Toybox і доступні під змінною PATH, з емулятора термінала або оболонки adb виконайте такі дії:

су
знайти / дані / дані / -типу d -group UID -maxdepth 1 | Основна назва xargs

Приклад:

shell @ shamu: / $ su
root @ shamu: / # find / data / data / -group 10102 -тип d -maxdepth 1 | Основна назва xargs
com.android.chrome
root @ shamu: / #

Оскільки нас цікавить етикетка програми, а не назва пакету, перейдіть до відповіді від GAThrawn або від Izzy .


Використовуйте, find /data/data/ -user UID -type d -maxdepth 1 | xargs basenameякщо ви отримуєте кілька результатів у першій findкоманді.
Firelord

Це працює для мене без кореня.
Anubian Noob

5

Встановіть емулятор терміналу , запустіть його та запустіть:

ps | grep 10058

psперераховує процеси та grepфільтри для потрібного ідентифікатора.

Але це працює лише в тому випадку, якщо програма працює під час запуску команди.


Я спробую це, але це не працює, тому що такий додаток уже не працює
azat

6
Це для PID, запитуючий мав на увазі UID
Lie Ryan

2
UID відображається на виході ps, а також PID. Вихід ps зазвичай має рядки типу "12345 app_118 ...", де 12345 є PID, а app_118 - UID (що відповідає userId = 10118 в /data/system/packages.xml)
Art Swri

5

У оболонці ADB (або емуляторі терміналу) використовуйте таку команду:

cat /proc/<your_process_id_here>/status

і подивіться у поле "Ім'я". Це має бути назва процесу. Тож у вашому випадку це було б " cat / proc / 10058 / status "


3
10058 повинен бути PID тут, поки ОП дав нам UID.
Firelord

0

У мене була аналогічна проблема з Android 6.0, Moto G 2nd Gen від 2014 року. У мене трапилось оновити додаток ES File Explorer, і я помітив, що він роздутий як пекло і висмоктує багато акумулятора. Я видалив додаток із системи, але програма дозволила зомбі перейняти процесор. UID був подібний до вашого 10118, і він перерахований у статистиці батареї як найголодніший ресурсний процес.

Потім я встановив додаток під назвою "Монітор ОС" і помітив, що файл .esfm насправді єдиний процес, що займає 60% процесора. Я одразу знав, що це стосується ES File Explorer, але зачекайте ... Я ВІН видалив ES File Explorer. Так. Єдине, що я не робив - це РЕСТАРТАЦІЮ смартфона. Повірте, я думав про божевільні речі, як, наприклад, укорінюватися і бити лайно з цього процесу, кидати телефон у стіну і навіть почав вірити, що мій акумулятор добіг кінця життя. На моє здивування, я просто перезапустив телефон і процес пішов.

Тому перш ніж вживати різких заходів, спробуйте розібратися, який додаток несе вам поганий час, видаліть його та перезавантажте телефон. Перевірте на OS Монітор списку використання процесора, і вам слід буде добре.


0

Щоб знайти "все" UID (або GroupID) на вкоріненому телефоні, включаючи запущені процеси, системні програми та апаратні датчики:

# ID=3011; find / -group $ID -o -user $ID   2>/dev/null

Приклад 1:

# ID=3011; find / -group $ID -o -user $ID   2>/dev/null
/proc/208
/proc/208/task
/proc/208/task/208
/proc/208/task/208/attr
[...]

# ls -la /proc/208/exe
lrwxrwxrwx 1 root root 0 2017-04-04 22:14 /proc/208/exe -> /system/bin/sensors.qcom

Приклад 2

# ID=10009; find / -group $ID -o -user $ID   2>/dev/null
/data/misc/profiles/cur/0/com.android.cellbroadcastreceiver
/data/misc/profiles/cur/0/com.android.cellbroadcastreceiver/primary.prof
/data/data/com.android.cellbroadcastreceiver
/data/data/com.android.cellbroadcastreceiver/cache
/data/data/com.android.cellbroadcastreceiver/code_cache
/data/user_de/0/com.android.cellbroadcastreceiver
/data/user_de/0/com.android.cellbroadcastreceiver/cache
/data/user_de/0/com.android.cellbroadcastreceiver/code_cache
/data/user_de/0/com.android.cellbroadcastreceiver/code_cache/com.android.opengl.shaders_cache
/data/user_de/0/com.android.cellbroadcastreceiver/shared_prefs
/data/user_de/0/com.android.cellbroadcastreceiver/shared_prefs/com.android.cellbroadcastreceiver_preferences.xml
/data/user_de/0/com.android.cellbroadcastreceiver/shared_prefs/_has_set_default_values.xml
/data/user_de/0/com.android.cellbroadcastreceiver/databases
/data/user_de/0/com.android.cellbroadcastreceiver/databases/cell_broadcasts.db
/data/user_de/0/com.android.cellbroadcastreceiver/databases/cell_broadcasts.db-journal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.