如何唯一标识安卓应用程序

3

我正在处理TrafficStats Api,并使用以下代码获取有关所有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个回答

6

Android使用包名来唯一标识应用程序。您正在打印userId名称而不是包名。如果您打印包名,您应该会看到一个区别。请尝试以下操作:

String packageName = info.packageName;

至于您所看到的内容,Android应用程序可以配置为共享相同的签名和userId。所有这些设置都在AndroidManifest.xml中设置。

例如,电话应用程序具有此设置

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

电话服务提供商拥有这个设置

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

注意它们共享相同的sharedUserId。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接