VNDK'yı etkinleştirme

VNDK, satıcı ve sistem arasındaki endişeleri ayırmak için kod tabanında birkaç değişiklik yapılmasını gerektirir. Satıcı/OEM kod tabanında VNDK'yi etkinleştirmek için aşağıdaki kılavuzu kullanın.

Sistem kitaplıkları oluşturun

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

Sistem kitaplıkları oluşturun
Şekil 1. Sistem kitaplıklarını oluşturun
  • core kütüphaneler sistem görüntüsündeki sistem görüntüsü tarafından kullanılır. Bu kitaplıklar vendor , vendor_available , vndk veya vndk-sp kitaplıkları tarafından kullanılamaz.
    cc_library {
        name: "libThatIsCore",
        ...
    }
    
  • vendor-only ait (veya proprietary ) kitaplıklar satıcı görüntüsü tarafından satıcı görüntüsünde kullanılır.
    cc_library {
        name: "libThatIsVendorOnly",
        proprietary: true,
        # or: vendor: true, # (for things in AOSP)
        ...
    }
    
  • vendor_available kitaplıkları satıcı görüntüsü tarafından satıcı görüntüsünde kullanılır ( core kopyalarını içerebilir).
    cc_library {
        name: "libThatIsVendorAvailable",
        vendor_available: true,
        ...
    }
    
  • vndk kitaplıkları, sistem görüntüsündeki satıcı görüntüsü tarafından kullanılır.
    cc_library {
        name: "libThatIsVndk",
        vendor_available: true,
        vndk: {
            enabled: true,
        }
        ...
    }
    
  • vndk-sp kitaplıkları satıcı görüntüsü tarafından ve ayrıca sistem görüntüsü tarafından dolaylı olarak kullanılır.
    cc_library {
        name: "libThatIsVndkSp",
        vendor_available: true,
        vndk: {
            enabled: true,
            support_system_process: true,
        }
        ...
    }
    
  • llndk kitaplıkları hem sistem hem de satıcı görüntüleri tarafından kullanılır.
    cc_library {
        name: "libThatIsLlndk",
        llndk: {
            symbol_file: "libthatisllndk.map.txt"
        }
        ...
    }
    

Bir kitaplık vendor_available:true olarak işaretlendiğinde iki kez oluşturulur:

  • Bir kez platform için (ve böylece /system/lib yüklendi)
  • Satıcı için bir kez (ve dolayısıyla /vendor/lib veya VNDK APEX'e yüklendi)

Kitaplıkların satıcı sürümleri -D__ANDROID_VNDK__ ile oluşturulmuştur. Android'in gelecek sürümlerinde önemli ölçüde değişebilecek özel sistem bileşenleri bu bayrakla devre dışı bırakılır. Ek olarak, farklı kitaplıklar farklı başlık kümelerini ( liblog gibi) dışa aktarır. Bir hedefin satıcı değişkenine özgü seçenekler, bir Android.bp dosyasında şu şekilde belirtilebilir:

target: { vendor: { … } }

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

Bir kod tabanı için VNDK'yı etkinleştirmek için:

  1. vendor.img ve system.img bölümlerinin gerekli boyutlarını hesaplayarak uygunluğu belirleyin.
  2. BOARD_VNDK_VERSION=current etkinleştirin. BoardConfig.mk ekleyebilir veya doğrudan onunla bileşenler oluşturabilirsiniz (örneğin, m -j BOARD_VNDK_VERSION=current MY-LIB ).

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

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

vndk veya vendor nesnesi olarak bulunmayan bir core bileşene bağımlı olan bir vendor nesnesi, aşağıdaki seçeneklerden biri kullanılarak çözümlenmelidir:

  • Bağımlılık kaldırılabilir.
  • core bileşen vendor aitse vendor_available veya vendor olarak işaretlenebilir.
  • Çekirdek nesneyi vndk parçası haline getiren bir değişiklik Google'a aktarılabilir.

Ayrıca, bir core bileşenin bir vendor bileşenine bağımlılıkları varsa, vendor bileşeninin bir core bileşen haline getirilmesi veya bağımlılığın başka bir şekilde kaldırılması gerekir (örneğin, bağımlılığın kaldırılması veya bağımlılığın bir vendor bileşenine taşınması). ).

Başlıkları yönetme

Derleme sisteminin üstbilgileri -D__ANDROID_VNDK__ ile mi yoksa onsuz mu oluşturacağını bilmesini sağlamak için genel başlık bağımlılıkları kaldırılmalıdır. Örneğin, utils/StrongPointer.h gibi libutils başlıklarına libutils_headers başlık kütüphanesi kullanılarak hâlâ erişilebilir.

Bazı başlıklar ( unistd.h gibi) artık geçişli olarak eklenemez ancak yerel olarak dahil edilebilir.

Son olarak, private/android_filesystem_config.h dosyasının genel kısmı cutils/android_filesystem_config.h dosyasına taşındı. Bu üstbilgileri yönetmek için aşağıdakilerden birini yapın:

  • Mümkünse tüm AID_* makrolarını getgrnam / getpwnam çağrılarıyla değiştirerek, private/android_filesystem_config.h bağımlılığını kaldırın. Örneğin:
    • (uid_t)AID_WIFI getpwnam("wifi")->pw_uid olur.
    • (gid_t)AID_SDCARD_R getgrnam("sdcard_r")->gr_gid olur.
    Ayrıntılar için private/android_filesystem_config.h dosyasına bakın.
  • Sabit kodlu AIS için cutils/android_filesystem_config.h dosyasını ekleyin.