aconfig işareti tanımlama

aconfig işaretlerini Java, C, C++ ve Rust kodunda kullanabilirsiniz. AOSP derleme sistemi, her işaretin değerine erişmek için kullanabileceğiniz yöntemlerden oluşan, dile özgü bir kitaplık oluşturmak için kullanılan aconfig adlı bir araç başlatır. Kitaplığı oluşturmadan önce işaretleri tanımlamanız ve derlemeye eklemeniz gerekir.

Java için aconfig işareti tanımlama

Java için birconfig flag'i bildirmek için:

  1. Yeni kodun bulunduğu bir dizinde .aconfig uzantılı bir dosya (ör. my_new_aconfig_flag_declarations.aconfig) oluşturun. Yapılandırma dosyası, standart bir şemayı izleyen bir metin proto dosyasıdır.

  2. Aşağıdakine benzer bir işaret beyanı ekleyin:

    package: "com.example.android.aconfig.demo.flags"
    container: "system"
    
    flag {
        name: "my_new_flag"
        namespace: "aconfig_demo_namespace"
        description: "This flag controls untested code"
        bug: "<none>"
    }
    

    Nerede:

    • package, işaret adıyla birleştirildiğinde benzersiz bir anahtar sağlar. Java'da package değerini foo.bar olarak ayarlamak foo.bar.Flags adlı otomatik oluşturulmuş bir sınıf oluşturur. C++'ta işaret erişimci yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı bildirim dosyasındaki işaretler aynı pakete aittir ancak birden fazla bildirim dosyası, aynı pakete işaretler ekleyebilir.
    • container, ikili program olarak birlikte derlenen ve gönderilen bir kod koleksiyonunu tanımlar. Geçerli kapsayıcılar: system, vendor, system_ext, product, name.of.apex ve name.of.apk.

    • name, yalnızca küçük harf, alt çizgi ve sayı içeren işaretin adını içerir.

    • namespace, katkılar için ad alanı içerir. Alan adınızı belirlemek için atanan Google inceleme uzmanıyla çalışmanız gerekir. Kendi AOSP yansımanızın kararlılığını korumak için özellik lansmanı işaretlerini kullanıyorsanız ad alanını istediğiniz gibi kullanabilirsiniz.

    • description, işaretlenen özelliğin veya değişikliğin kısa bir açıklamasını içerir.

    • bug, yeni kod katkısıyla ilişkili hata numarasıdır. bug değerinizi belirlemek için atanan Google inceleme uzmanıyla birlikte çalışmanız gerekir. Kendi AOSP yansıtmanızın kararlılığını korumak için özellik lansman flag'lerini kullanıyorsanız hata izleme numaranızı veya <none> özelliğini kullanabilirsiniz.

  3. Dosyayı kaydedin ve düzenleyiciden çıkın.

Derlemeyi ayarlama

İşaretinizi tanımladıktan sonra derlemeyi, işaretin değerine erişmek için kullanılan kitaplık kodunu oluşturacak şekilde ayarlayın.

  1. Android.bp derleme dosyanıza aşağıdakine benzer bir aconfig_declarations bölümü ekleyin:

    aconfig_declarations {
      name: "aconfig_demo_flags",
      package: "com.example.android.aconfig.demo.flags",
      srcs: [
        "my_new_aconfig_flag_declarations.aconfig"
      ],
    }
    

    Nerede:

    • name, beyanın yalnızca küçük harf, alt çizgi ve rakamlardan oluşan adını içerir.
    • package, beyanda kullanılan paket adını içeriyor.
    • srcs, işaretin tanımlandığı .aconfig dosyasının adını içerir.
  2. Dosyayı kaydedin ve düzenleyiciden çıkın.

C ve C++ için birconfig işareti tanımlama

C ve C++ için aconfig işareti tanımlamak üzere:

  1. Yeni kodun bulunduğu bir dizinde .aconfig uzantılı bir dosya (ör. my_new_aconfig_flag_declarations.aconfig) oluşturun. aconfig dosyası, standart bir şemaya uyan bir metin proto dosyasıdır.

  2. Aşağıdakine benzer bir işaret beyanı ekleyin:

    package: "com.example.android.aconfig.demo.flags"
    container: "system"
    
    flag {
        name: "my_new_flag"
        namespace: "aconfig_demo_namespace"
        description: "This flag controls untested code"
        bug: "<none>"
    }
    

    Nerede:

    • package, işaret adıyla birleştirildiğinde benzersiz bir anahtar sağlar. Java'da package değerini foo.bar olarak ayarlamak foo.bar.Flags adlı otomatik oluşturulmuş bir sınıf oluşturur. C++'ta işaret erişimci yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı bildirim dosyasındaki işaretler aynı pakete aittir ancak birden fazla bildirim dosyası, aynı pakete işaretler ekleyebilir.
    • container, ikili program olarak birlikte derlenen ve gönderilen bir kod koleksiyonunu tanımlar. Geçerli kapsayıcılar: system, vendor, system_ext, product, name.of.apex ve name.of.apk.

    • name, yalnızca küçük harf, alt çizgi ve sayı içeren işaretin adını içerir.

    • namespace, katkılar için ad alanı içerir. Alan adınızı belirlemek için atanan Google inceleme uzmanıyla çalışmanız gerekir. Kendi AOSP yansımanızın kararlılığını korumak için özellik lansmanı işaretlerini kullanıyorsanız ad alanını istediğiniz gibi kullanabilirsiniz.

    • description, işaretlenen özelliğin veya değişikliğin kısa bir açıklamasını içerir.

    • bug, yeni kod katkısıyla ilişkili hata numarasıdır. bug değerinizi belirlemek için atanan Google inceleme uzmanıyla birlikte çalışmanız gerekir. Kendi AOSP yansıtmanızın kararlılığını korumak için özellik lansman flag'lerini kullanıyorsanız hata izleme numaranızı veya <none> özelliğini kullanabilirsiniz.

  3. Dosyayı kaydedin ve düzenleyiciden çıkın.

Derlemeyi ayarlama

İşaretçinizi beyan ettikten sonra, derlemeyi işaretçinin değerine erişmek için kullanılan kitaplık kodunu oluşturacak şekilde ayarlayın.

  1. Android.bp derleme dosyanıza aşağıdakine benzer bir aconfig_declarations bölümü ekleyin:

    aconfig_declarations {
      name: "aconfig_demo_flags",
      package: "com.example.android.aconfig.demo.flags",
      srcs: [
        "my_new_aconfig_flag_declarations.aconfig"
      ],
    }
    

    Nerede:

    • name, beyanın yalnızca küçük harf, alt çizgi ve rakamlardan oluşan adını içerir.
    • package, beyanda kullanılan paket adını içeriyor.
    • srcs, işaretin tanımlandığı aconfig dosyasının adını içerir.
  2. Aynı dosyada, aşağıdakine benzer bir cc_aconfig_library hedefi oluşturun:

    cc_aconfig_library {
        name: "aconfig_demo_flags_c_lib",
        aconfig_declarations: "aconfig_demo_flags",
    }
    

    Nerede:

    • name, yalnızca küçük harf, alt çizgi ve sayı içeren kitaplığın adını içerir.
    • aconfig_declarations, beyanda kullanılan name değerini içerir.

    cc_aconfig_library derleme hedefi, C veya C++ Codegen'i çağırır. Böylece, derleme sırasında oluşturulan kodla bir kitaplık oluşturulur.

    CC aconfig kitaplığı, CC kitaplığı hedefine benzer ancak vendor_available, product_available, host_supported ve vndk gibi seçeneklere sahiptir. Bu cc_aconfig_library öğesine bağlı olarak derleme hedefi, belirli varyant türlerini gerektiriyorsa ilgili ayarı CC aconfig kitaplığı hedefine de eklemeniz gerekebilir. Örneğin, üst derleme hedefinde vendor_available true olarak ayarlanmışsa bu cc_aconfig_library hedefinde vendor_available öğesini true olarak ayarlamak isteyebilirsiniz.

    Bu derleme hedefini ekledikten sonra kodunuz bu kitaplığa erişebilir. Bu kitaplığı static_lib veya shared_lib söz dizimini kullanarak dahil edebilirsiniz. Bu kitaplığı static_lib olarak eklemek istiyorsanız server_configurable_flags'ye shared_lib bağımlılık ekleyin. 3. adımda, oluşturulan kod işareti kitaplığının libexample_cpp_lib içine nasıl dahil edileceği gösterilmektedir.

  3. Aşağıdaki örnekte gösterildiği gibi aconfig işaretlerini kullanan bir hedef oluşturuncc_library:

    cc_library {
        name: "libexample_cpp_lib",
        srcs: ["src/example_cpp_lib.cc"],
        double_loadable: true,
        cflags: [
            "-Wall",
            "-Werror",
            "-Wno-unused-function",
            "-Wno-unused-parameter",
        ],
        header_libs: [
            "jni_headers",
        ],
        shared_libs: [
            "server_configurable_flags",
        ],
        static_libs: [
            "aconfig_demo_flags_c_lib",
        ],
        export_include_dirs: ["src/include"],
    }
    

    Nerede:

    • shared_libs, aconfig işaretçileri için gereken ek bağımlılıkları içerir.
    • static_libs, 2. adımdaki cc_aconfig_library name alanına göre derleme tarafından oluşturulan kitaplığın adıdır. Statik kitaplık adıyla bir cc_library girişi oluşturarak artık kodunuzda aconfig işaretlerini kullanabilirsiniz.

Rust için birconfig flag'i bildir

Rust için aconfig işareti tanımlamak üzere:

  1. Yeni kodun bulunduğu bir dizinde, .aconfig uzantısına sahip bir dosya oluşturun (örneğin, my_new_aconfig_flag_declarations.aconfig). aconfig dosyası, standart bir şemaya uyan bir metin proto dosyasıdır.

  2. Aşağıdakine benzer bir işaret beyanı ekleyin:

    package: "com.example.android.aconfig.demo.flags"
    container: "system"
    
    flag {
        name: "my_new_flag"
        namespace: "aconfig_demo_namespace"
        description: "This flag controls untested code"
        bug: "<none>"
    }
    

    Nerede:

    • package, işaret adıyla birleştirildiğinde benzersiz bir anahtar sağlar. Java'da package değerini foo.bar olarak ayarlamak foo.bar.Flags adlı otomatik oluşturulmuş bir sınıf oluşturur. C++'ta işaret erişimci yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı bildirim dosyasındaki işaretler aynı pakete aittir ancak birden fazla bildirim dosyası, aynı pakete işaretler ekleyebilir.
    • container, ikili program olarak birlikte derlenen ve gönderilen bir kod koleksiyonunu tanımlar. Geçerli kapsayıcılar: system, vendor, system_ext, product, name.of.apex ve name.of.apk.

    • name, yalnızca küçük harf, alt çizgi ve sayı içeren işaretin adını içerir.

    • namespace, katkılar için ad alanı içerir. Alan adınızı belirlemek için atanan Google inceleme uzmanıyla çalışmanız gerekir. Kendi AOSP yansımanızın kararlılığını korumak için özellik lansmanı işaretlerini kullanıyorsanız ad alanını istediğiniz gibi kullanabilirsiniz.

    • description, işaretlenen özelliğin veya değişikliğin kısa bir açıklamasını içerir.

    • bug, yeni kod katkısıyla ilişkili hata numarasıdır. bug değerinizi belirlemek için atanan Google inceleme uzmanıyla birlikte çalışmanız gerekir. Kendi AOSP yansıtmanızın kararlılığını korumak için özellik lansman flag'lerini kullanıyorsanız hata izleme numaranızı veya <none> özelliğini kullanabilirsiniz.

  3. Dosyayı kaydedin ve düzenleyiciden çıkın.

Derlemeyi ayarlama

İşaretçinizi beyan ettikten sonra, derlemeyi işaretçinin değerine erişmek için kullanılan kitaplık kodunu oluşturacak şekilde ayarlayın.

  1. Android.bp derleme dosyanıza aşağıdakine benzer bir aconfig_declarations bölümü ekleyin:

    aconfig_declarations {
      name: "aconfig_demo_flags",
      package: "com.example.android.aconfig.demo.flags",
      srcs: [
        "my_new_aconfig_flag_declarations.aconfig"
      ],
    }
    

    Nerede:

    • name, beyanın yalnızca küçük harf, alt çizgi ve rakamlardan oluşan adını içerir.
    • package, beyanda kullanılan paket adını içeriyor.
    • srcs, işaretin tanımlandığı aconfig dosyasının adını içerir.
  2. Bir sonraki örneğinkine benzer bir rust_aconfig_library hedefi oluşturun. Bu hedef, Rust Codegen'i çağırır ve derleme sırasında oluşturulan kodla bir Rust kitaplığı oluşturur.

    rust_aconfig_library {
      name: "libaconfig_demo_flags_rust",
      crate_name: "aconfig_demo_flags_rust",
      aconfig_declarations: "aconfig_demo_flags",
    }
    

    Nerede:

    • name, yalnızca küçük harf, alt çizgi ve sayı içeren beyanın adını içerir.
    • crate_name, beyanda kullanılan paket adını içeriyor.
    • aconfig_declarations, beyanda kullanılan name değerini içerir.

    Bu değişiklikle birlikte kodunuz bu Rust kitaplığına bağlı olabilir.

  3. Aynı dosyada aşağıdakine benzer bir rust_library girişi oluşturun:

    rust_library {
      name: "libexample_lib",
      rustlibs: [
          "libaconfig_demo_flags_rust",
      ]
    }
    

    Bu örnek, kaynak kodunuzun derleme hedeflerine libexample_demo_flags_rust kod tarafından oluşturulan işaret kitaplığını eklemenize olanak tanır.

  4. Dosyayı kaydedin ve düzenleyiciden çıkın.