Насколько я понимаю из AOSP, на самом деле вы можете использовать этот ярлык просто для отображения симпатичного имени для пользователя (если у вас несколько процессов в одном и том же uid). Например, вот часть кода в файле RunningState.java:
// If we couldn't get information about the overall
// process, try to find something about the uid.
String[] pkgs = pm.getPackagesForUid(mUid);
// If there is one package with this uid, that is what we want.
if (pkgs.length == 1) {
try {
ApplicationInfo ai = pm.getApplicationInfo(pkgs[0], 0);
mDisplayLabel = ai.loadLabel(pm);
mLabel = mDisplayLabel.toString();
mPackageInfo = ai;
return;
} catch (PackageManager.NameNotFoundException e) {
}
}
// If there are multiple, see if one gives us the official name
// for this uid.
for (String name : pkgs) {
try {
PackageInfo pi = pm.getPackageInfo(name, 0);
if (pi.sharedUserLabel != 0) {
CharSequence nm = pm.getText(name,
pi.sharedUserLabel, pi.applicationInfo);
if (nm != null) {
mDisplayLabel = nm;
mLabel = nm.toString();
mPackageInfo = pi.applicationInfo;
return;
}
}
} catch (PackageManager.NameNotFoundException e) {
}
}
По сути, он делает следующие вещи. Сначала он пытается получить информацию об общем процессе. Если он не находит, он пытается получить информацию, используя UID приложения в качестве параметра (это часть кода, который я дал здесь). Если есть только один пакет с этим UID, информация о процессе получается из этого пакета. Но если есть несколько пакетов (использующих shareUserId), он выполняет итерацию и пытается найти официальное (красивое) имя.
В подтверждение своих слов я нашел следующую строку в MediaProvider:
<!-- Label to show to user for all apps using this UID. -->
<string name="uid_label">Media</string>
Таким образом, все процессы, использующие android:sharedUserId="android.media"
, будут иметь имя Media
.
Я не думаю, что эта функция будет часто использоваться обычными разработчиками и полезна для них.