VNDK'yı etkinleştir

Tedarikçi Firma Geliştirme Kiti (VNDK), endişeleri yoktur. Tedarikçi firma/OEM'de VNDK'yı etkinleştirmek için aşağıdaki kılavuzu kullanın kullanabilirsiniz.

Sistem kitaplıkları oluşturun

Derleme sistemi, kitaplıklar dahil çeşitli nesne türleri içerir. (paylaşılan, statik veya başlık) ve ikili programlardır.

Sistem kitaplıkları oluşturun

Şekil 1. Sistem kitaplıkları oluşturun.

  • core kitaplıkları, sistem görüntüsünde sistem görüntüsü tarafından kullanılır. Bu kitaplıklar vendor, vendor_available, vndk veya vndk-sp kitaplık.
    cc_library {
        name: "libThatIsCore",
        ...
    }
    
  • vendor-only (veya proprietary) kitaplıkları, tedarikçi imajı üzerine yazılmalıdır.
    cc_library {
        name: "libThatIsVendorOnly",
        proprietary: true,
        # or: vendor: true, # (for things in AOSP)
        ...
    }
    
  • vendor_available kitaplıkları, tedarikçi firma görüntüsünde tedarikçi firma görüntüsü tarafından kullanılıyor. resim (core öğesinin kopyalarını içerebilir).
    cc_library {
        name: "libThatIsVendorAvailable",
        vendor_available: true,
        ...
    }
    
  • vndk kitaplıkları, sistem görüntüsünde tedarikçi firma görüntüsü tarafından kullanılır.
    cc_library {
        name: "libThatIsVndk",
        vendor_available: true,
        vndk: {
            enabled: true,
        }
        ...
    }
    
  • vndk-sp kitaplıkları, hem tedarikçi firma görüntüsü hem de sistem görüntüsü tarafından kullanılır. yardımcı olur.
    cc_library {
        name: "libThatIsVndkSp",
        vendor_available: true,
        vndk: {
            enabled: true,
            support_system_process: true,
        }
        ...
    }
    
  • llndk kitaplıkları hem sistem hem de tedarikçi firma görüntüleri tarafından kullanılır.
    cc_library {
        name: "libThatIsLlndk",
        llndk: {
            symbol_file: "libthatisllndk.map.txt"
        }
        ...
    }
    

vendor_available:true olarak işaretlenen kitaplık oluşturulur iki kez:

  • Platform için bir kez (dolayısıyla /system/lib hizmetine yüklendi)
  • Tedarikçi firma için bir kez (dolayısıyla /vendor/lib veya VNDK APEX'e yüklendi)

lib'lerin tedarikçi sürümleri -D__ANDROID_VNDK__ ile oluşturulmuştur. Gelecekteki sürümlerinde önemli ölçüde değişebilecek özel sistem bileşenleri Android, bu işaretle devre dışı bırakılır. Ayrıca, farklı kitaplıklar başlık grubunu (liblog gibi) kullanabilirsiniz. Belirli bir bir hedefin satıcı varyantı, Android.bp dosyasında belirtilebilir içinde:

target: { vendor: { … } }

Kod tabanı için VNDK'yı etkinleştirme

Kod tabanı için VNDK'yı etkinleştirmek üzere:

  1. Gerekli boyutları hesaplayarak uygunluğu belirleyin vendor.img ve system.img bölümleri.
  2. BOARD_VNDK_VERSION=current özelliğini etkinleştir. Şunları ekleyebilirsiniz: BoardConfig.mk veya doğrudan bununla bileşenler derleyin (örneğin, m -j BOARD_VNDK_VERSION=current MY-LIB) tıklayın.

BOARD_VNDK_VERSION=current etkinleştirildikten sonra derleme sistemi aşağıdaki bağımlılık ve başlık gereksinimlerini uygular.

Bağımlılıkları yönetme

core bileşenine bağlı bir vendor nesnesi vndk içinde veya vendor nesnesi olarak bulunmayan aşağıdaki seçeneklerden biri kullanılarak çözülmelidir:

  • Bağımlılık kaldırılabilir.
  • core bileşeninin sahibi vendor ise vendor_available veya vendor olarak işaretlenir.
  • vndk öğesinin temel nesnesini oluşturan bir değişiklik Google'a iletildi.

Ayrıca, core bileşeninin vendor bileşeni, vendor bileşeni yapılmalıdır bir core bileşenine ya da bağımlılık bir başka yoldan kaldırılarak (örneğin, bağımlılığı kaldırarak veya vendor bileşenine bağımlılığınızı etkilemez).

Üstbilgileri yönet

Derleme sisteminin bunu bilmesi için genel üstbilgi bağımlılıkları kaldırılmalıdır başlıkların -D__ANDROID_VNDK__ ile mi yoksa -D__ANDROID_VNDK__ olmadan mı oluşturulacağını belirleyin. Örneğin, utils/StrongPointer.h gibi libutils başlıkları yine de başlık kitaplığı kullanılarak erişilebilir. libutils_headers

Bazı üstbilgiler (ör. unistd.h) artık geçişli olarak eklenememektedir ancak yerel olarak dahil edilebilir.

Son olarak, private/android_filesystem_config.h sitesinin herkese açık kısmı cutils/android_filesystem_config.h klasörüne taşındı. Yönetmek için aşağıdakilerden birini yapın:

  • Bağımlılığı kaldırın ve Tümünü değiştirerek private/android_filesystem_config.h AID_* getgrnam/ içeren makrolar Mümkünse getpwnam çağrısı. Örnek:
    • (uid_t)AID_WIFI şu hale gelir: getpwnam("wifi")->pw_uid.
    • (gid_t)AID_SDCARD_R şu hale gelir: getgrnam("sdcard_r")->gr_gid.
    ziyaret edin. Ayrıntılı bilgi için private/android_filesystem_config.h.
  • Sabit kodlu AIS için cutils/android_filesystem_config.h