Как однозначно идентифицировать приложения для Android

#android

#Android

Вопрос:

Я работал над Api Traffic Stats и использовал следующий код для получения информации обо всех приложениях Android

 for (ApplicationInfo info : packageManager.getInstalledApplications(0)) {
int uid = info.uid;
CharSequence AppName = packageManager.getApplicationLabel(info);
String packageManager = packageManager.packageManager.getNameForUid(uid).split(":")[0];              }
  

Но когда я зарегистрировал три переменные. Это дает запутанный результат. Ни одно из них не является уникальным. Для одного и того же Uid существует множество приложений, а в одном и том же имени пакета — множество приложений.Смотрите Вывод журнала ниже

  AppName is:Phone   UID:1001 package: android.uid.phone
 AppName is:DM Command Service UID:1001 package: android.uid.phone
 AppName is:Dialer Storage  UID:1001 package: android.uid.phone
 AppName is:SIM Toolkit UID:1001 package: android.uid.phone
  

Затем, как идентифицировать приложения.

Ответ №1:

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

String packageName = info.packageName;

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

Например, приложение для телефона имеет этот параметр

 package="com.android.phone"
android:sharedUserId="android.uid.phone"
  

И у поставщика услуг телефонии есть такая настройка

 package="com.android.providers.telephony"
android:sharedUserId="android.uid.phone"
  

Обратите внимание, что они используют один и тот же sharedUserId.