Bu makalede, sorunları tespit edip kaldırarak performansı nasıl iyileştirebileceğiniz açıklanmaktadır. Sistem Kullanıcısı için gerekli olmayan paketler.
Gereksiz paketleri devre dışı bırakın
Otomotiv'de Sistem Kullanıcısı: gözetimsiz, Bu, Sistem Kullanıcısı'nın, bir kullanıcı tarafından kullanılması veya doğrudan erişilmemesi anlamına gelir. insan. Sonuç olarak birçok uygulama ve hizmetin Sistem Kullanıcısı'nda çalıştırılması gerekmez. performansı iyileştirmek için devre dışı bırakılabilir. Bu nedenle, içeriği kaldırma sistem Kullanıcısı (Kullanıcı 0) için gereksiz uygulamalar oluşturur.
Bu sayfada, iki tür Kullanıcı ele alınmıştır:
- SİSTEM. Her Zaman Kullanıcı 0
- TAM. Bir gerçek kişi (Sistem Kullanıcısı Olmayan) tarafından kullanılması amaçlanan kullanıcı, 10 yaşından büyük kullanıcılar
Android 11
Android 11'de yapılandırmayı değiştirir,
config_userTypePackageWhitelistMode
İşaretler birleştirilebilir. Bu durumda 5
, 1
değerine eşittir
artı 4
(1
ve 4
işaretlerinin kombinasyonu).
İşaretle | Açıklama |
---|---|
0 |
İzin verilenler listesini devre dışı bırakın. Tüm sistem paketlerini yükleyin; günlük yok. |
1 |
Uygula'ya dokunun. Sistem paketlerini yalnızca izin verilenler listesine eklendiklerinde yükleyin. |
2 |
İzin verilenler listesinde olmayan paketleri günlüğe kaydedin. |
4 |
İzin verilenler listesinde belirtilmemiş tüm paketler dolaylı olarak tüm kullanıcılar için izin verilenler listesine eklenir. |
8 |
Sistem kullanıcısı için 4 ile aynıdır. |
16 |
OTA'ları yoksayın . OTA'lar sırasında sistem paketlerini yüklemeyin. |
- Bir özelliği izin verilenler listesinin tamamında etkinleştirmek için
1
(tümüyle zorunlu kılınır) - Eksik izin verilenler listeleriyle ilgili bir özelliği etkinleştirmek için
5
SYSTEM
kullanıcısının yerel gelişimi kolaylaştırmak için bir özelliği etkinleştirmek üzere9
(dolaylı izin verilenler listesi)- Bir özelliği hiç etkinleştirilmemiş gibi devre dışı bırakmak için
16
- Bir özelliği devre dışı bırakmak ve önceki tüm efektleri geri almak için
0
XML dosyasını cihazın sysconfig
dizinine yüklediğinizden emin olun.
(bu,
. XML dosyasını adlandırırken konumu da ekleyin.
paketin derlemede tanımlandığı yer. Örneğin, preinstalled-packages-product-car-CAR_PRODUCT_NAME.xml
.
<!- this package will be installed for both FULL and SYSTEM user --> <install-in-user-type package="com.android.bluetooth"-> <install-in user-type="FULL" /-> <install-in user-type="SYSTEM" /-> </install-in-user-type-> <!- this package will only be installed for both FULL user --> <install-in-user-type package="com.android.car.calendar"-> <install-in user-type="FULL" > </install-in-user-type->
Android 9 ve Android 10
Android 9 ve Android 10'da bu özelliği yapılandırmak için:
config_systemUserPackagesBlacklistSupported
üzerine yerleştirinframeworks/base/core/res/res/values/config.xml
adresinden yapılandırma ve ayarlatrue
olarak gönderin. Bu özellik etkinleştirildiğinde varsayılan olarak tüm paketler hem Sistem Kullanıcısı hem de TAM Kullanıcı için yüklenmelidir.- Hangi paketlerin olması gerektiğini listeleyen bir
config.xml
dosyası oluşturun Sistem Kullanıcısı için devre dışı bırakıldı. Örnek:<config> <!-- This package will be uninstalled for the system user --> <system-user-blacklisted-app package="com.google.car.calendar" /> </config>
- Dosyayı cihazın
device.mk
hedef klasörüsystem/etc/sysconfig/
. Örnek:PRODUCT_COPY_FILES += <full path to the config file>:system/etc/sysconfig/<new denylist config file>.xml
Sonucu doğrulama
Sonucu doğrulamak için şu komutu çalıştırın:
$ adb shell dumpsys user | grep PACKAGE_SUBSTRING $ adb shell pm list packages --user USER_ID PACKAGE_SUBSTRING $ adb shell cmd user report-system-user-package-whitelist-problems
Bina Adı
Bir paketin Sistem Kullanıcısı'na yüklenip yüklenmeyeceğini belirlemek için
paketin AndroidManifest.xml
dosyası,
ve bileşenleri de dahil olmak üzere proje kaynağını
hizmetleri, yayın alıcılarını ve içeriklerini kapsayan
sağlayıcılar. Daha fazla bilgi için Uygulama
Manifest'e Genel Bakış.
Şekil 1. Paket iş akışını devre dışı bırak
1. düzey, uygulama düzeyi
1. Uygulamanın (veya uygulama bileşenlerinin) singleton olarak tanımlanıp tanımlanmadığını kontrol edin
Uygulama singleton, sistem, uygulamayı yalnızca Sistem Kullanıcısı'nda örneklendirir. Uygulama büyük ihtimalle çoklu kullanıcıya duyarlı bir uygulama olarak tasarlanmıştır. Çok kullanıcıya duyarlı olma ile ilgili daha fazla bilgi edinmek için Çok Kullanıcıya Duyarlı Uygulamalar Oluşturma başlıklı makaleye göz atın.
android:singleUser="true"
için Android manifestini kontrol edin.- true (doğru) ise izin verilenler listesine ekleyin. Sistem Kullanıcısı için gereklidir.
- False ise devam edin. Kaldırmadan önce diğer ölçütleri kontrol edin.
2. Uygulamanın korumalı depolama alanı erişimi gerektirip gerektirmediğini kontrol etme
Çoğu sistem başlatma hizmeti, çoğu zaman cihaz şifrelemeli (DE) depolama alanını kullanır. şifrelemeli (CE) depolama alanı sunar. Ayrıca, yönlendirme yapan sistem uygulamaları Ayrıca bu işlem, cihazda şifrelenmiş depolama alanını da kullanır. Doğrudan trafik hakkında daha fazla bilgi edinmek için başlatmaya duyarlı uygulamalar için Destekleyici Sistem uygulamalarında Doğrudan Başlatma.
- Android manifest'ini şunun için kontrol edin:
android:defaultToDeviceProtectedStorage="true"
(Bu, şunlar için gereklidir: çok sayıda sistem başlatma hizmeti sunar. - true (doğru) ise izin verilenler listesine ekleyin.
- False ise devam edin.
2. Düzey, uygulama bileşenleri
Etkinlikler
Etkinlikler hakkında daha fazla bilgi edinmek için Giriş'e bakın.
a. Uygulamanın yalnızca etkinlik içerip içermediğini kontrol edin
Etkinlikler kullanıcı arayüzü odaklıdır. Sistem Kullanıcısı gözetimsiz olduğundan Otomotiv. Sistem Kullanıcısı ile hiçbir insan etkileşime girmemelidir. Sonuç olarak, Uygulama yalnızca Etkinlikler içeriyorsa, uygulama büyük olasılıkla Sistem Kullanıcısı.
Öncelik ve özel ayrıcalık olup olmadığını kontrol edin.
- Evet ise Sistem Kullanıcısı için gerekli olabilir.
- Hayır ise Sistem Kullanıcısı için izin verilenler listesine eklemeyin.
Örneğin, Uyumluluk Test Paketi (CTS)
(com.android.cts.priv.ctsshim
) yalnızca Etkinlikleri içerir ve
Etkinlikler, intent filtrelerini test etmek için tanımlanır. Ancak, etkileşim oranı yüksek
ayrıcalığının test amacıyla Sistem Kullanıcısı için yüklenmesi gerekir.
Hizmet
Hizmetler hakkında daha fazla bilgi edinmek için Hizmetlere genel bakış başlıklı makaleyi inceleyin.
b. Hizmetin gizli olarak beyan edilip edilmediğini ve diğer uygulamalardan erişip erişilemediğini kontrol edin
Hizmetin private olarak belirtilmesi durumunda diğer paketler
geliştirmenizi sağlar. android:exported="false"
arayın. Hizmetin beyan edilmiş olması
diğer uygulamaların erişimine açık değilse veya
diğer uygulamalar. Bu nedenle, aşağıdaki Adım C ve D Adımı alakasızdır. Sonuç olarak,
bu bileşen, hizmetin gerekli olup olmadığı konusunda daha fazla ipucu sağlamaz
(Sistem Kullanıcısı için).
- Evet ise sonraki bileşeni kontrol edin.
- Hayır ise bu bileşeni kontrol etmeye devam edin.
c. Sistem Kullanıcısı'nda yüklü uygulamaların bu hizmete bağlanıp bağlanmayacağını kontrol edin
1. Seviye'de izin verilenler listesine eklenmiş paketleri kontrol edin ve hangi hizmetlerin gerçekleştirildiğini belirleyin
bağlılar. Bu hizmetteki intent filtresinden ve startService
ürününden iz oluştur
diğer paketlerde kullanabilirsiniz.
Bu hizmet, Sistem Kullanıcısı'nda yüklü uygulamalara bağlıysa (örneğin,
com.android.car.companiondevicesupport
,
Sistem Kullanıcısı) ve ardından hizmeti izin verilenler listesine ekleyin.
- Evet ise izin verilenler listesine ekleyin.
- Hayır ise bu bileşeni kontrol etmeye devam edin.
d. Hizmetin diğer uygulamalardan bağlı olup olmadığını ve ön planda çalışacağı beyan edilip edilmediğini kontrol edin
startForeground
arayın. Bu, kullanıcıların alışveriş sırasında
arka planda görünmesi gerekir. Büyük olasılıkla bu hizmete,
Sistem Kullanıcısı ve izin verilenler listesine eklenmemesi gerekir.
- Evet ise izin verilenler listesine eklemeyin.
- Hayır ise sonraki bileşeni kontrol etmeye devam edin.
e. Hizmetin sistem işleminde çalışacak şekilde tanımlanıp tanımlanmadığını kontrol edin
AndroidManifest'te android:process="system"
ifadesini bulun.
Hizmet, sistem işleminde çalışmak üzere kasıtlı olarak tanımlanmışsa
bu, açıkça sistem hizmetiyle aynı işlemde çalışacağı ve
Sistem Kullanıcısı'nda çalışması için izin verilenler listesine eklenmiş olmalıdır. Android'in belleğinin bir parçası olarak
sistem hizmetleri sonlandırılacak son işlemlerden bazılarıdır.
önem derecesi anlamına gelir. Alıcı:
Android’in bellek ayırma tasarımı hakkında daha fazla bilgi edinmek için bkz. Düşük bellek
katil.
- Evet ise izin verilenler listesine eklemeyin.
- Hayır ise diğer bileşenleri kontrol etmeye devam edin.
Örneğin, com.android.networkstack.inprocess
paketi
RegularMaintenanceJobService
içerdiğinden izin verilenler listesine eklendi.
android:process="system"
etiketine sahip.
İçerik sağlayıcı
İçerik sağlayıcılar hakkında daha fazla bilgi edinmek için İçerik sağlayıcılar.
f. Sistem Kullanıcısı'nda yüklü uygulamanın bu sağlayıcıya bağlı olup olmadığını kontrol edin
Seviye 1'de izin verilenler listesine eklenmiş paketleri kontrol edin ve hangi sağlayıcıların olduğunu kontrol edin.
biraz zaman alabilir. Sistem Kullanıcısı'nda çalışan bir uygulama (örneğin,
com.android.car.companiondevicesupport
,
(Sistem Kullanıcısı) kullanıyorsanız ve bu içerik sağlayıcıya bağlı olarak değişiyorsa bu içeriğin
sağlayıcı da izin verilenler listesinde.
- Evet ise izin verilenler listesine ekleyin.
- Hayır ise izin verilenler listesine eklemeyin.
Örneğin, com.android.car.EXAMPLE
single'ı içeriyorsa
sağlayıcılar (SystemActionsContentProvider
ve
ManagedProvisioningActionsContentProvider
), şu şekilde olmalıdır:
Sistem Kullanıcısı için izin verilenler listesine eklendi. Bu durumda, com.android.car.EXAMPLE
WebViewFactoryProvider
için android.webkit
değerine bağlıdır
com.android.webview
, Sistem Kullanıcısı için izin verilenler listesine eklenmelidir
ancak android.webkit
dosyasını yüklediğinden emin olun.
Örnek paket için adım adım açıklamalı kılavuz
Aşağıdaki örnekte, bir anahtar kelimenin AndroidManifest.xml
değerinin nasıl değerlendirileceği
paket:
<?xml version="1.0" encoding="utf-8"?> <!-- 1. Search in the entire manifest for singleUser attribute. No. Move to step 2 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.providers.calendar" android:sharedUserId="android.uid.calendar"> We can ignore the entire permission section <uses-permission android:name="android.permission.READ_CALENDAR" /> ... <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" /> <!-- 2. Look for defaultToDeviceProtectedStorage in application's attribute. No. Continue evaluating app components. --> <application android:label="@string/calendar_storage" android:allowBackup="false" android:icon="@drawable/app_icon" android:usesCleartextTraffic="false"> <!-- a. Contain only activities? No. Continue to evaluate components other than activities. --> <provider android:name="CalendarProvider2" android:authorities="com.android.calendar" <!-- b. Is this component exported? Yes. Continue evaluating this component. f. App on u0 might depend on this? Search for CalendarProvider2 in dumpsys, shows ContentProviderRecord{b710923 u0 com.android.providers.calendar/.CalendarProvider2} Yes. Whitelist for system user. --> android:label="@string/provider_label" android:multiprocess="false" android:exported="true" android:readPermission="android.permission.READ_CALENDAR" android:writePermission="android.permission.WRITE_CALENDAR" />
<activity android:name="CalendarContentProviderTests" android:label="Calendar Content Provider" android:exported="false"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.UNIT_TEST" /> </intent-filter> </activity> <!-- Not service/content provider. Ignore. --> <receiver android:name="CalendarProviderBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="com.android.providers.calendar.intent.CalendarProvider2"/> <category android:name="com.android.providers.calendar"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.EVENT_REMINDER"/> <data android:scheme="content" /> </intent-filter> </receiver> <service android:name="CalendarProviderIntentService"/> </application> </manifest>