Ответ 1
Насколько я понимаю из 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
.
Я не думаю, что эта функция будет использоваться многими разработчиками и полезна для них.