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 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 birlikte kullanıldığında 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şimi yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı beyan dosyasında bulunan işaretler aynı pakete aittir ancak birden fazla beyan dosyası aynı pakete işaret 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'dir.

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

    • namespace, katkıların ad alanını 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 şekilde 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ımanızın kararlılığını korumak için özellik lansmanı işaretlerini kullanıyorsanız hata izleme numaranızı veya <none> değerini kullanabilirsiniz.

  3. Dosyayı kaydedip 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, yalnızca küçük harf, alt çizgi ve sayı içeren beyanın adını içerir.
    • package, beyannamede kullanılan paket adını içerir.
    • srcs, işaretin tanımlandığı .aconfig dosyasının adını içerir.
  2. Dosyayı kaydedip düzenleyiciden çıkın.

C ve C++ için aconfig 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 birlikte kullanıldığında 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şimi yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı beyan dosyasında bulunan işaretler aynı pakete aittir ancak birden fazla beyan dosyası aynı pakete işaret 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'dir.

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

    • namespace, katkıların ad alanını 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 şekilde 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ımanızın kararlılığını korumak için özellik lansmanı işaretlerini kullanıyorsanız hata izleme numaranızı veya <none> değerini kullanabilirsiniz.

  3. Dosyayı kaydedip 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, yalnızca küçük harf, alt çizgi ve sayı içeren beyanın adını içerir.
    • package, beyannamede kullanılan paket adını içerir.
    • 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, derleme sırasında oluşturulan kodu içeren bir kitaplık oluşturan C veya C++ Codegen'i çağırır.

    CC aconfig kitaplığı, CC kitaplığı hedefine benzer ancak vendor_available, product_available, host_supported ve vndk gibi seçeneklere sahiptir. Bu cc_aconfig_library'e bağlı derleme hedefi belirli türde varyantlar gerektiriyorsa CC aconfig kitaplığı hedefine de ilgili ayarı eklemeniz gerekebilir. Örneğin, üst derleme hedefinde vendor_available true olarak ayarlanmışsa bu cc_aconfig_library hedefinde de vendor_available 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şaretleri 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 aconfig işareti tanımlama

Rust 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 birlikte kullanıldığında 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şimi yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı beyan dosyasında bulunan işaretler aynı pakete aittir ancak birden fazla beyan dosyası aynı pakete işaret 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'dir.

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

    • namespace, katkıların ad alanını 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 şekilde 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ımanızın kararlılığını korumak için özellik lansmanı işaretlerini kullanıyorsanız hata izleme numaranızı veya <none> değerini kullanabilirsiniz.

  3. Dosyayı kaydedip 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, yalnızca küçük harf, alt çizgi ve sayı içeren beyanın adını içerir.
    • package, beyannamede kullanılan paket adını içerir.
    • 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 kodu içeren 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, beyannamede kullanılan paket adını içerir.
    • aconfig_declarations, beyanda kullanılan name değerini içerir.

    Bu değişiklikle, kodunuz bu Rust kitaplığına bağımlı 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ı kaydedip düzenleyiciden çıkın.