Android paylaşılan sistem görüntüsü

Bu sayfada, Android cihaz OEM'lerinin ürün gruplarında kendi paylaşılan sistem görüntülerini (SSI) kullanmak için yararlanabileceği çeşitli mekanizmalar açıklanmaktadır. Ayrıca, bir OEM'ye ait SSI'yi AOSP'de oluşturulan genel sistem görüntüsüne (GSI) dayandırma prosedürü de önerilir.

Arka plan

Project Treble ile birlikte, monolitik Android iki bölüme ayrıldı: donanıma özgü bölüm (satıcı uygulaması) ve genel işletim sistemi bölümü (Android işletim sistemi çerçevesi). Her birinin yazılımı ayrı bir bölüme yüklenir: donanıma özel yazılım için tedarikçi bölümü, genel işletim sistemi yazılımı için ise sistem bölümü. Tedarikçi arayüzü (VINTF) adı verilen sürüm oluşturulmuş bir arayüz, iki bölüm arasında tanımlanır ve zorunlu kılınır. Bu bölümleme sistemini kullanarak sistem bölümünü tedarikçi bölümünü değiştirmeden, tedarikçi bölümünü de sistem bölümünü değiştirmeden değiştirebilirsiniz.

Motivasyon

AOSP'de yayınlanan çerçeve kodu, Treble mimarisine uygun ve eski tedarikçi uygulamalarıyla geriye dönük uyumluluğu koruyacak şekilde geliştirilmiştir. Örneğin, Android 10 AOSP kaynaklarından oluşturulan genel bir sistem görüntüsü, Android 8 veya daha yeni bir sürümü çalıştıran ve Treble ile uyumlu herhangi bir cihazda çalıştırılabilir. Tüketici cihazlarında gönderilen Android sürümü, SoC tedarikçileri ve OEM'ler tarafından değiştirilir. (Android sürümünün yaşam döngüsü başlıklı makaleyi inceleyin.) Çerçevede yapılan bu değişiklikler ve uzantılar, geriye dönük uyumluluğu korumak için yazılmadığından işletim sistemi yükseltmesinde daha fazla karmaşıklığa ve daha yüksek maliyete yol açtı. Cihaza özel değişiklikler ve modifikasyonlar, Android işletim sistemi sürümünü yükseltmenin maliyetini ve karmaşıklığını artırır.

Android 11'den önce, iş ortaklarının Android OS çerçevesine modüler uzantılar oluşturmasına olanak tanıyan net bir mimari yoktu. Bu belgede, SoC satıcılarının ve OEM'lerin SSI oluşturmak için uygulayabileceği adımlar açıklanmaktadır. Bu, birden fazla cihazda yeniden kullanılmak üzere Android işletim sistemi çerçevesi kaynaklarından oluşturulan, satıcı uygulamalarıyla geriye dönük uyumluluğu koruyan ve Android işletim sistemi yükseltmelerinin karmaşıklığını ve maliyetini önemli ölçüde azaltan tek bir resim anlamına gelir. SSI oluşturmak için gereken adımları GSI tabanlı SSI için önerilen adımlar bölümünde bulabilirsiniz. Dört adımın tamamını uygulamanız gerekmediğini unutmayın. Hangi adımları seçeceğiniz (örneğin, yalnızca 1. adım) uygulamanıza bağlıdır.

SSI'ya genel bakış

SSI ile ürüne özel yazılım bileşenleri ve OEM uzantıları yeni bir /product bölümüne yerleştirilir. /product bölümündeki bileşenler, /system bölümündeki bileşenlerle etkileşim kurmak için iyi tanımlanmış ve kararlı bir arayüz kullanır. OEM'ler tek bir SSI oluşturmayı veya birden fazla cihaz SKU'sunda kullanılmak üzere az sayıda SSI oluşturmayı seçebilir. Android işletim sisteminin yeni bir sürümü yayınlandığında OEM'ler, SSI'larını en son Android sürümüne güncellemek için yalnızca bir kez yatırım yapar. Bu kullanıcılar, /product bölümünü güncellemeden birden fazla cihazı güncellemek için SSIs'leri yeniden kullanabilir.

OEM'lerin ve SoC tedarikçilerinin, bir OEM'in ihtiyaç duyduğu tüm özel özellikleri ve değişiklikleri içeren SSI'lar oluşturduğunu unutmayın. Bu sayfada sunulan mekanizmalar ve en iyi uygulamalar, OEM'lerin aşağıdaki temel hedeflere ulaşmak için kullanması amaçlanmıştır:

  • SSI'yı birden fazla cihaz SKU'sunda yeniden kullanın.
  • İşletim sistemi yükseltmelerini kolaylaştırmak için Android sistemini modüler uzantılarla güncelleyin.

Ürüne özel bileşenleri ürün bölümüne ayırma fikri, SoC'ye özel bileşenleri satıcı bölümüne ayırma fikri olan Treble'a benzer. Bir ürün arayüzü (VINTF'ye benzer) SSI ile ürün bölümü arasında iletişime olanak tanır. SSI ile ilgili olarak "bileşenler" teriminin, görüntülere yüklenen tüm kaynakları, ikili dosyaları, metinleri, kitaplıkları vb. tanımladığını ve bunların esasen bölümler haline geldiğini unutmayın.

SSI ile ilgili bölümler

Şekil 1'de SSI etrafındaki bölümler ve bölümler genelindeki sürüm oluşturulmuş arayüzler ile arayüzlerdeki politikalar gösterilmektedir. Bu bölümde, her bir bölüm ve arayüz ayrıntılı olarak açıklanmaktadır.

SSI blok diyagramı etrafındaki bölümler ve arayüzler

1. şekil. SSI ile ilgili bölümler ve arayüzler

Resimler ve bölümler

Bu bölümdeki bilgiler, resim ve bölüm terimleri arasındaki farkı açıklar.

  • İmaj, bağımsız olarak güncellenebilen kavramsal bir yazılım parçasıdır.
  • Bölüm, bağımsız olarak güncellenebilen fiziksel bir depolama konumudur.

Şekil 1'deki bölümler aşağıdaki şekilde tanımlanır:

  • SSI: SSI, bir OEM'ye özgü olan ve birden fazla cihazda bulunabilen resimdir. Donanıma veya ürüne özel bileşenleri yoktur. Belirli bir SSI'daki her şey, tanım gereği bu SSI'yı kullanan tüm cihazlar arasında paylaşılır. SSI, Şekil 1'de gösterildiği gibi tek bir /system resimden veya /system ve /system_ext bölümlerinden oluşur.

    • /system bölümü AOSP tabanlı bileşenleri içerirken /system_ext bölümü, uygulandığında OEM ve SoC tedarikçisi uzantılarını ve AOSP bileşenleriyle sıkı bir şekilde bağlı olan bileşenleri içerir. Örneğin, OEM'in kendi uygulamaları için özel API'ler sağlayan bir OEM Java çerçeve kitaplığı, /system bölümünden ziyade /system_ext bölümüne daha iyi uyar. Hem /system hem de /system_ext bölümleri için içerik, OEM tarafından değiştirilmiş Android kaynaklarından oluşturulur.

    • /system_ext bölümü isteğe bağlıdır ancak AOSP tabanlı bileşenlerle sıkı bir şekilde bağlantılı olan özel özellikler ve uzantılar için kullanılması faydalıdır. Bu ayrım, söz konusu bileşenleri zaman içinde /system_ext bölümünden /product bölümüne taşımak için yapmanız gereken değişiklikleri belirlemenize yardımcı olur.

  • Ürün: Android işletim sisteminde OEM özelleştirmelerini ve uzantılarını temsil eden, ürüne veya cihaza özel bileşenler koleksiyonu. SoC'ye özgü bileşenleri /vendor bölümüne yerleştirin. SoC tedarikçileri, SoC'den bağımsız olanlar gibi uygun bileşenler için /product bölümünü de kullanabilir. Örneğin, bir SoC tedarikçisi OEM müşterilerine SoC'den bağımsız bir bileşen sağlıyorsa (ürünle birlikte gönderilmesi isteğe bağlıdır) SoC tedarikçisi bu bileşeni ürün resmine yerleştirebilir. Bir bileşenin konumu, sahipliğine göre değil, amacına göre belirlenir.

  • Sağlayıcı: SoC'ye özgü bileşenlerin bir koleksiyonu.

  • ODM: SoC tarafından sağlanmayan, kart özelinde bileşenler koleksiyonu. Genellikle SoC satıcısı, satıcı görüntüsünün sahibidir. Cihaz üreticisi ise ODM görüntüsünün sahibidir. Ayrı bir /odm bölümü olmadığında hem SoC satıcısı hem de ODM görüntüleri /vendor bölümünde birleştirilir.

Resimler arasındaki arayüzler

SSI ile ilgili olarak satıcı ve ürün resimleri için iki ana arayüz vardır:

  • Tedarikçi Arayüzü (VINTF): VINTF, tedarikçi ve ODM görüntülerinde bulunan bileşenlerin arayüzüdür. Ürün ve sistem görüntülerindeki bileşenler, yalnızca bu arayüz üzerinden satıcı ve ODM görüntüleriyle etkileşimde bulunabilir. Örneğin, bir satıcı resmi, sistem görüntüsünün özel bir bölümüne bağlı olamaz ve bunun tersi de geçerlidir. Bu, başlangıçta Project Treble'da tanımlanmıştır. Project Treble, görüntüleri sistem ve tedarikçi bölümlerine ayırır. Arayüz, aşağıdaki mekanizmalar kullanılarak açıklanır:

    • HIDL (Passthrough HAL yalnızca system ve system_ext modüllerinde kullanılabilir)
    • Kararlı AIDL
    • Yapılandırmalar
      • Sistem özellikleri API'si
      • Yapılandırma dosyası şeması API'si
    • VNDK
    • Android SDK API'leri
    • Java SDK kitaplığı
  • Ürün arayüzleri: Ürün arayüzü, SSI ile ürün resmi arasındaki arayüzdür. Kararlı bir arayüz tanımlamak, ürün bileşenlerini bir SSI'deki sistem bileşenlerinden ayırır. Ürün arayüzü, VINTF ile aynı kararlı arayüzleri gerektirir. Ancak Android 11 (ve sonraki sürümler) ile kullanıma sunulan cihazlarda yalnızca VNDK ve Android SDK API'leri zorunlu kılınır.

Android 11'de SSI'yı etkinleştirme

Bu bölümde, Android 11'de SSI'yı desteklemek için kullanıma sunulan yeni özelliklerin nasıl kullanılacağı açıklanmaktadır.

/system_ext bölümü

/system_ext bölümü, Android 11'de isteğe bağlı bir bölüm olarak kullanıma sunuldu. (Bu, /system bölümündeki AOSP tanımlı bileşenlerle sıkı bağlantısı olan AOSP dışı bileşenlerin yeridir.) /system_ext bölümünün, iki bölüm arasında tanımlanmış bir arayüz olmadan /system bölümünün OEM'e özgü uzantısı olduğu varsayılır. /system_ext bölümündeki bileşenler /system bölümüne özel API çağrıları yapabilir ve /system bölümündeki bileşenler /system_ext bölümüne özel API çağrıları yapabilir.

İki bölüm sıkı bir şekilde bağlı olduğundan yeni bir Android sürümü yayınlandığında her iki bölüm de birlikte yükseltilir. Android'in önceki sürümü için oluşturulan /system_ext bölümünün, bir sonraki Android sürümündeki /system bölümüyle uyumlu olması gerekmez.

Bir modülü /system_ext bölümüne yüklemek için Android.bp dosyasına system_ext_specific: true ekleyin. /system_ext bölümü olmayan cihazlarda bu tür modülleri /system bölümündeki ./system_ext alt dizinine yükleyin.

Geçmiş

/system_ext bölümüyle ilgili bazı bilgiler: Tasarım hedefi, ortak olup olmadıklarına bakılmaksızın tüm OEM'e özgü bileşenleri /product bölümüne yerleştirmekti. Ancak, özellikle bazı bileşenler /system bölümüyle sıkı bir şekilde bağlı olduğundan hepsini aynı anda taşımak mümkün değildi. Sıkı bağlı bir bileşeni /product bölümüne taşımak için ürün arayüzünün genişletilmesi gerekir. Bu durum genellikle bileşenin kendisinin kapsamlı bir şekilde yeniden düzenlenmesini gerektiriyordu. Bu da çok fazla zaman ve çaba harcanmasına neden oluyordu. /system_ext bölümü, /product bölümüne taşınmaya hazır olmayan bileşenleri geçici olarak barındırmak için oluşturuldu. SSI'nin amacı, sonunda /system_ext bölümünü ortadan kaldırmaktı.

Ancak /system_ext bölümü, /system bölümünü AOSP'ye mümkün olduğunca yakın tutmak için kullanışlıdır. SSI ile yükseltme çabasının çoğu /system ve /system_ext bölümlerindeki bileşenlere harcanır. Sistem görüntüsü, AOSP'deki kaynaklara mümkün olduğunca benzer kaynaklardan oluşturulduğunda yükseltme çalışmalarını system_ext görüntüsüne odaklayabilirsiniz.

/system ve /system_ext bölümlerindeki bileşenleri /product bölümüne taşıma

Android 9, /system bölümüyle eşleştirilmiş bir /product bölümü tanıttı. /product bölümündeki modüller, sistem kaynaklarını herhangi bir kısıtlama olmadan kullanır ve bunun tersi de geçerlidir. Android 10'da SSI'nin mümkün olması için ürün bileşenleri /system_ext ve /product bölümlerine ayrılmıştır. /system_ext bölümü, Android 9'da /product bölümünün uyması gereken sistem bileşenlerini kullanma kısıtlamalarına uymak zorunda değildir. Android 10'dan itibaren /product bölümü, /system bölümünden ayrılmalı ve /system ile /system_ext bölümlerindeki kararlı arayüzleri kullanmalıdır.

/system_ext bölümünün asıl amacı, /system_ext partition bölümünde açıklandığı gibi paketlenmiş ürün modüllerini yüklemek değil, sistem özelliklerini genişletmektir. Bunu yapmak için ürüne özel modüllerin paketini açın ve bunları /product bölümüne taşıyın. Ürüne özel modüllerin paketinden çıkarılması, cihazlarda /system_ext ortak hale getirir. (Daha ayrıntılı bilgi için /system_ext bölümünü ortak yapma başlıklı makaleyi inceleyin.)

/product bölümünü sistem bileşenlerinden ayırmak için /product bölümü, Project Treble ile daha önce ayrılmış olan /vendor bölümüyle aynı zorunlu kılma politikasına sahip olmalıdır.

Android 11'den itibaren, /product bölümü için yerel ve Java arayüzleri aşağıda açıklandığı şekilde zorunlu kılınır. Daha fazla bilgi için Ürün bölümü arayüzlerini zorunlu kılma başlıklı makaleyi inceleyin.

  • Yerel arayüzler: /product bölümündeki yerel modüllerin diğer bölümlerden ayrılması gerekir. Ürün modüllerinden yalnızca /system bölümündeki bazı VNDK kitaplıklarına (LLNDK dahil) izin verilir. Ürün uygulamalarının bağlı olduğu JNI kitaplıkları NDK kitaplıkları olmalıdır.
  • Java arayüzleri: /product bölümündeki Java (uygulama) modülleri, kararsız oldukları için gizli API'leri kullanamaz. Bu modüller yalnızca /system bölümündeki herkese açık API'leri ve sistem API'lerini, /system veya /system_ext bölümündeki Java SDK kitaplıklarını kullanmalıdır. Özel API'ler için Java SDK kitaplıkları tanımlayabilirsiniz.

GSI tabanlı SSI için önerilen adımlar

GSI tabanlı SSI için önerilen bölümler

Şekil 2. GSI tabanlı SSI için önerilen bölümler

Genel sistem görüntüsü (GSI), doğrudan AOSP'den oluşturulan sistem görüntüsüdür. Treble uygunluk testleri (ör. CTS-on-GSI) için ve uygulama geliştiricilerin, gerekli Android sürümünün yüklü olduğu gerçek bir cihazları olmadığında uygulamalarının uyumluluğunu test etmek için kullanabileceği bir referans platform olarak kullanılır.

OEM'ler, SSI'larını oluşturmak için GSI'yi de kullanabilir. Resimler ve bölümler bölümünde açıklandığı gibi, SSI, AOSP tarafından tanımlanan bileşenler için sistem görüntüsünden ve OEM tarafından tanımlanan bileşenler için system_ext görüntüsünden oluşur. GSI, system resmi olarak kullanıldığında OEM, yükseltme için system_ext resmine odaklanabilir.

Bu bölümde, AOSP veya AOSP'ye yakın bir sistem görüntüsü kullanırken özelleştirmelerini /system_ext ve /product bölümlerine ayırmak isteyen OEM'ler için bir kılavuz sunulmaktadır. OEM'ler sistem görüntüsünü AOSP kaynaklarından oluşturursa oluşturdukları sistem görüntüsünü AOSP tarafından sağlanan GSI ile değiştirebilir. Ancak OEM'lerin son adıma (GSI'yi olduğu gibi kullanma) tek seferde ulaşması gerekmez.

1. Adım: OEM'in sistem görüntüsü (OEM GSI) için generic_system.mk'yı devralın.

Sistem görüntüsü (OEM GSI), generic_system.mk (Android 11'de mainline_system.mk olarak adlandırılmış, AOSP'de ise generic_system.mk olarak yeniden adlandırılmıştır) devraldığı için AOSP GSI'nin sahip olduğu tüm dosyaları içerir. Bu dosyalar OEM'ler tarafından değiştirilebilir. Böylece OEM GSI, AOSP GSI dosyalarına ek olarak OEM'e özel dosyaları da içerebilir. Ancak OEM'lerin generic_system.mk dosyasını değiştirmesine izin verilmez.

OEM sistem görüntüsü için `generic_system.mk` dosyasını devralma

3.Şekil OEM'in sistem görüntüsü için generic_system.mk'yı devralma

2. adım: OEM GSI'nin, AOSP GSI ile aynı dosya listesine sahip olmasını sağlama

OEM GSI'sinde bu aşamada ek dosyalar bulunamaz. OEM'in tescilli dosyaları system_ext veya product bölümlerine taşınmalıdır.

Eklenen dosyaları OEM GSI'sinden taşıma

Şekil 4. Eklenen dosyaları OEM GSI'sinden taşıma

3. Adım: OEM GSI'deki değiştirilmiş dosyaları sınırlamak için izin verilenler listesi tanımlama

Değiştirilen dosyaları kontrol etmek için OEM'ler compare_images aracını kullanabilir ve AOSP GSI ile OEM GSI'yi karşılaştırabilir. AOSP lunch hedefinden generic_system_* AOSP GSI'yi edinin.

compare_images aracını allowlist parametresiyle düzenli olarak çalıştırarak izin verilen liste dışındaki farklılıkları izleyebilirsiniz. Bu, OEM GSI'de ek değişiklikler yapılmasını önler.

OEM GSI'deki değiştirilmiş dosyaların listesini azaltmak için izin verilenler listesi tanımlama

5.şekil OEM GSI'deki değiştirilmiş dosyalar listesini azaltmak için izin verilenler listesi tanımlama

4. Adım. OEM GSI'nin AOSP GSI ile aynı ikili dosyalara sahip olmasını sağlama

İzin verilenler listesinin temizlenmesi, OEM'lerin kendi ürünlerinde sistem resmi olarak AOSP GSI'yi kullanmasına olanak tanır. OEM'ler, izin verilenler listesini temizlemek için OEM GSI'deki değişikliklerini bırakabilir veya değişikliklerini AOSP'ye aktarabilir. Böylece AOSP GSI, değişikliklerini içerir.

OEM GSI'nin AOSP GSI ile aynı ikili dosyalara sahip olmasını sağlama

6.şekil OEM GSI'nin AOSP GSI ile aynı ikili dosyalara sahip olmasını sağlama

OEM'ler için SSI'yı tanımlama

Derleme sırasında /system bölümünü koruma

/system bölümünde ürüne özel değişiklikler yapılmasını önlemek ve OEM GSI'yi tanımlamak için OEM'ler, makro çağrıldıktan sonra sistem modüllerinin bildirilmesini önlemek üzere require-artifacts-in-path adlı bir makefile makrosu kullanabilir. Makefile oluşturma ve yapay ürün yolu kontrolünü etkinleştirme örneğini inceleyin.

OEM'ler, ürüne özel modüllerin /system bölümüne geçici olarak yüklenmesine izin vermek için bir liste tanımlayabilir. Ancak, OEM GSI'nin OEM'nin tüm ürünlerinde ortak olması için listenin boş olması gerekir. Bu işlem, OEM GSI'yi tanımlamak içindir ve AOSP GSI'ye yönelik adımlardan bağımsız olabilir.

Ürün arayüzlerini zorunlu kılma

OEM'ler, /product bölümünün paketlenmediğini garanti etmek için cihazlarının yerel modüller için PRODUCT_PRODUCT_VNDK_VERSION:= current, Java modülleri için PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE:= true ayarlayarak ürün arayüzlerini zorunlu kıldığından emin olabilir. Bu değişkenler, cihazın PRODUCT_SHIPPING_API_LEVEL değeri 30 veya daha yüksekse otomatik olarak ayarlanır. Ayrıntılı bilgi için Ürün Bölümü Arayüzlerini Zorunlu Kılma başlıklı makaleyi inceleyin.

/system_ext bölümünü ortak yapma

/system_ext bölümü, cihaza özel ve sistemle birlikte gelen modüller içerebileceği için cihazlar arasında farklılık gösterebilir. SSI, /system ve /system_ext bölümlerinden oluştuğu için /system_ext bölümündeki farklılıklar, OEM'lerin SSI tanımlamasını engeller. OEM'ler kendi SSI'lerine sahip olabilir ve farklılıkları kaldırıp /system_ext bölümünü ortak hale getirerek bu SSI'yi birden fazla cihaz arasında paylaşabilir.

Bu bölümde, /system_ext bölümünü ortak hale getirme önerileri verilmektedir.

Sistem bölümündeki gizli API'leri kullanıma sunma

Ürüne özgü birçok uygulama, ürün bölümünde yasaklanan gizli API'ler kullandığı için ürün bölümüne yüklenemez. Cihaza özel uygulamaları ürün bölümüne taşımak için gizli API'lerin kullanımını kaldırın.

Gizli API'leri uygulamalardan kaldırmanın tercih edilen yolu, bunları değiştirecek alternatif herkese açık veya sistem API'leri bulmaktır. Gizli API'lerin yerini alacak API'ler yoksa OEM'ler, cihazları için yeni sistem API'lerini tanımlamak üzere AOSP'ye katkıda bulunabilir.

Alternatif olarak OEM'ler, /system_ext bölümünde kendi Java SDK kitaplıklarını oluşturarak özel API'ler tanımlayabilir. Sistem bölümündeki gizli API'leri kullanabilir ve API'leri ürün veya satıcı bölümündeki uygulamalara sağlayabilir. OEM'ler, geriye dönük uyumluluk için ürüne yönelik API'leri dondurmalıdır.

Tüm APK'ların üst kümesini dahil edin ve her cihaz için bazı paket yüklemelerini atlayın.

Sistemle birlikte gelen belirli paketler, cihazlar arasında yaygın değildir. Bu APK modüllerini ürün veya satıcı bölümüne taşımak için paketinden çıkarmak zor olabilir. OEM'ler, geçici bir çözüm olarak SSI'ya tüm modülleri dahil edebilir ve ardından SKU özelliği (ro.boot.hardware.sku) kullanarak istenmeyen modülleri filtreleyebilir. Filtreyi kullanmak için OEM'ler çerçeve kaynaklarını config_disableApkUnlessMatchedSku_skus_list ve config_disableApksUnlessMatchedSku_apk_list olarak yerleştirir.

Daha hassas ayarlar için gereksiz paketleri devre dışı bırakan bir yayın alıcı bildirin. Yayın alıcısı, setApplicationEnabledSetting çağrısı yaparak ACTION_BOOT_COMPLETED mesajını aldığında paketi devre dışı bırakır.

Statik kaynak yer paylaşımı kullanmak yerine RRO'yu tanımlayın

Statik kaynak yerleşimi, yerleştirilmiş paketleri değiştirir. Ancak bu durum, SSI'nin tanımlanmasını engelleyebilir. Bu nedenle, RRO'nun özelliklerinin etkinleştirildiğinden ve doğru şekilde ayarlandığından emin olun. OEM'ler, özellikleri aşağıdaki gibi ayarlayarak otomatik olarak oluşturulan tüm yer paylaşımlarını RRO olarak kullanabilir.

PRODUCT_ENFORCE_RRO_TARGETS := *
PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS := # leave it empty

Ayrıntılı bir yapılandırma gerekiyorsa otomatik olarak oluşturulan bir RRO'ya güvenmek yerine manuel olarak tanımlayın. Ayrıntılı bilgi için Çalışma Zamanı Kaynak Katmanları (RRO'lar) başlıklı makaleyi inceleyin. OEM'ler, android:requiredSystemPropertyName ve android:requiredSystemPropertyValue özelliklerini kullanarak sistem özelliklerine bağlı koşullu RRO'lar da tanımlayabilir.

Sık sorulan sorular (SSS)

Birden fazla SSI tanımlayabilir miyim?

Bu, cihazların (veya cihaz grubunun) ortaklığına ve özelliklerine bağlıdır. OEM'ler, Making the system_ext partition common (system_ext bölümünü ortak yapma) başlıklı makalede açıklandığı gibi system_ext bölümünü ortak yapmayı deneyebilir. Bir cihaz grubunda çok fazla fark varsa birden fazla SSI tanımlamak daha iyidir.

Bir OEM GSI için generic_system.mk (mainline_system.mk) dosyasını değiştirebilir miyim?

Hayır. Ancak OEM'ler, generic_system.mk dosyasını devralan bir OEM GSI için yeni bir makefile tanımlayabilir ve bunun yerine yeni makefile'ı kullanabilir. Örnek için Ürün Bölümü Arayüzlerini Zorunlu Kılma başlıklı makaleyi inceleyin.

generic_system.mk dosyasından, uygulamamla çakışan modülleri kaldırabilir miyim?

Hayır. GSI'da minimum sayıda başlatılabilir ve test edilebilir modül bulunur. Bir modülün gerekli olmadığını düşünüyorsanız lütfen AOSP'deki generic_system.mk dosyasını güncellemek için hata bildirin.