Tedarikçi firma anlık görüntüleri oluşturma

Android 11, VNDK anlık görüntü derleme yapılarını ve satıcı anlık görüntülerini destekler. Bunları, kaynak ağacındaki Android sürümünden bağımsız olarak vendor.img oluşturmak için kullanabilirsiniz. Bu, eski bir satıcı ve daha yeni bir sistem görüntüsü gibi karışık görüntü sürümlerini etkinleştirir.

Aşağıdaki durumlarda karışık resim sürümleri desteklenmez.

  • Android.mk. Soong, tedarikçi anlık görüntüsünü oluşturduğundan Android.mk içinde tanımlanan modüller tedarikçi anlık görüntüsü olarak yakalanmaz (Android.mk içindeki SoC'ye özel modüllerin de çalışacağı garanti edilmez).

  • Dezenfektan. Satıcı ve VNDK anlık görüntüleri, temizleyici varyantlarının ayrı olarak oluşturulması gerektiğinden temizleyiciyi desteklemez.

Tedarikçi anlık görüntüleri hakkında

Tedarikçi anlık görüntüsü, OEM'ye ait bir anlık görüntüdür. /vendor'ya yüklenen ancak AOSP'de tutulan önceden oluşturulmuş C++ modüllerinden oluşur. Önceki Android sürümünün tedarikçi anlık görüntüsü alınmadan yeni bir Android sürümüne yükseltme yapılması, tedarikçi anlık görüntü modülleri API veya ABI uyumluluğu olmadan kaldırılıp değiştirilebileceğinden tedarikçi bölümünün bozulmasına neden olabilir.

Tedarikçi anlık görüntüsü, AOSP'de aşağıdaki modülleri içerir.

  • vendor: true veya vendor_available: true ile paylaşılan, statik ve başlık kitaplıkları
  • vendor_available: true içeren VNDK statik kitaplıkları
  • vendor: true veya vendor_available: true içeren yürütülebilir dosyalar ve nesne dosyaları

Aşağıdaki dizinlerdeki modüller, SoC'ye ait donanım kodu olarak kabul edilir ve yok sayılır.

  • device/
  • vendor/
  • hardware/,
      hariç
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

SoC'ye ait donanım kodları diğer dizinlerde de bulunabilir. Şu anda, sağlayıcı anlık görüntüleri bu tür yapılandırmaları desteklememektedir.

Tedarikçi anlık görüntüleri oluşturma

Aşağıdaki komutları kullanarak bir tedarikçi anlık görüntüsü oluşturun.

. build/envsetup.sh
lunch target
m dist vendor-snapshot

Bu komutlar, $DIST_DIR içinde vendor-$(TARGET_DEVICE).zip dosyası oluşturur. Aşağıdaki örnekte bir satıcı anlık görüntüsü ZIP dosyası gösterilmektedir:

vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│   ├── binary         -> binary files, *.json files
│   ├── header         -> *.json files
│   ├── object         -> *.o files, *.json files
│   ├── shared         -> *.so files, *.json files
│   └── static         -> *.a files, *.json files
├── arch-arm-armv8-a   -> (arch-arm64-armv8-a)
├── configs            -> *.rc files, *.xml files
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files
  • JSON dosyaları; modül adı, dışa aktarılan dizinler, init_rc dosyaları ve vintf_fragments dosyaları gibi işaretleri içerir.
  • configs dizini, init_rc ve vintf_fragments işaretlerinden .rc ve .xml dosyalarını içerir.

Sağlayıcı anlık görüntülerini yükleme

Bir satıcı anlık görüntüsünü yüklemek için hedef dizine gidin ve aşağıdaki komutları kullanın.

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

Bu komut /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp oluşturur. Aşağıdaki örnekte, bir satıcı anlık görüntüsünün dizin yapısı gösterilmektedir:

vendor/vendor name/vendor_snapshot/
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a
│   │   │   ├── binary         -> (prebuilt libs)
│   │   │   ├── object         -> (prebuilt libs)
│   │   │   ├── shared         -> (prebuilt libs)
│   │   │   └── static         -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (same as above)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (snapshot modules)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   └── x86                    -> (same as above)
└── (other vendor versions)    -> (same as above)

Tedarikçi görüntüleri oluşturma

VNDK anlık görüntü derleme yapılarını ve bir tedarikçi anlık görüntüsünü kullanarak kaynak ağaçtaki Android sürümünden bağımsız olarak vendor.img oluşturabilir, böylece görüntülerin karışık sürümlerini oluşturabilirsiniz. Hem VNDK anlık görüntüsünü hem de tedarikçi anlık görüntüsünü yükledikten sonra BOARD_VNDK_VERSION değerini tedarikçinin sürümüne ayarlayın. Örneğin:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

BOARD_VNDK_VERSION, current dışında bir değere ayarlandığında derleme sistemi:

  • BOARD_VNDK_VERSION için VNDK anlık görüntü modüllerini ve satıcı anlık görüntü modüllerini etkinleştirir. Her anlık görüntü modülü, aynı ada sahip bir C++ kaynak modülünü geçersiz kılar.
  • ro.vndk.version değerini BOARD_VNDK_VERSION olarak ayarlar.
  • BOARD_VNDK_VERSION ile system_ext arasındaki VNDK anlık görüntü modüllerini yükler.