背景
在Service组件开发中,对外暴露了aidl接口。为了知道是什么app在请求服务,即Client是谁,就想将Client的package name收集起来。
UID含义
android中uid用于标识一个应用程序,uid在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个uid,多个应用可以使用sharedUserId 方式共享同一个uid,前提是这些应用的签名要相同。
1 通过命名可以查看:
adb shell ps | grep name
2 如果手机有root权限的话,可以导出 data/system/packages.list 文件, 里面可以看到所有应用的包名及对应的 UID
3 通过代码拿到应用的 ApplicationInfo的实例,applicationInfo.uid
4 通过代码int uid = Binder.getCallingUid();拿到
通过uid获取package name
String packageName = getPackageManager().getNameForUid(uid);