Sistem Kullanıcısı için paketleri kaldırma

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.
Sık karşılaşılan aşağıdaki senaryoları göz önünde bulundurun.
  • 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 üzere 9 (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:

  1. config_systemUserPackagesBlacklistSupported üzerine yerleştirin frameworks/base/core/res/res/values/config.xml adresinden yapılandırma ve ayarla true 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.
  2. 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>
    
  3. Dosyayı cihazındevice.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ış.

Paket iş akışını devre dışı bırak

Ş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.

  1. android:singleUser="true" için Android manifestini kontrol edin.
  2. true (doğru) ise izin verilenler listesine ekleyin. Sistem Kullanıcısı için gereklidir.
  3. 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.

  1. Android manifest'ini şunun için kontrol edin: android:defaultToDeviceProtectedStorage="true" (Bu, şunlar için gereklidir: çok sayıda sistem başlatma hizmeti sunar.
  2. true (doğru) ise izin verilenler listesine ekleyin.
  3. 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.

  1. Evet ise Sistem Kullanıcısı için gerekli olabilir.
  2. 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).

  1. Evet ise sonraki bileşeni kontrol edin.
  2. 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.

  1. Evet ise izin verilenler listesine ekleyin.
  2. 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.

  1. Evet ise izin verilenler listesine eklemeyin.
  2. 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.

  1. Evet ise izin verilenler listesine eklemeyin.
  2. 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.

  1. Evet ise izin verilenler listesine ekleyin.
  2. 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>