aconfig işareti tanımlama

Aconfig flag'lerini 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, örneğin, my_new_aconfig_flag_declarations.aconfig. 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ğerinin foo.bar olarak ayarlanması, şu adla otomatik oluşturulan bir sınıfın oluşturulmasıyla sonuçlanır: foo.bar.Flags. C++'ta işaret erişim yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı beyanda yer alan işaretler dosyası aynı pakete ait, ancak birden fazla bildirim dosyası aynı pakete flag'ler 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 harflerden oluşan işaretin adını içerir alt çizgi ve sayılar.

    • 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 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. Şunu yapmalısınız: bug cihazınızı belirlemek için atanan Google incelemecisiyle birlikte çalışın. Eğer kendi AOSP aynanızın kararlılığını korumak için özellik lansman bayraklarını kullanma hata takip numaranızı veya <none> özelliğini 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 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. 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ğerinin foo.bar olarak ayarlanması, şu adla otomatik oluşturulan bir sınıfın oluşturulmasıyla sonuçlanır: foo.bar.Flags. C++'ta işaret erişim yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı beyanda yer alan işaretler dosyası aynı pakete ait, ancak birden fazla bildirim dosyası aynı pakete flag'ler 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 harflerden oluşan işaretin adını içerir alt çizgi ve sayılar.

    • 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 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. Şunu yapmalısınız: bug cihazınızı belirlemek için atanan Google incelemecisiyle birlikte çalışın. Eğer kendi AOSP aynanızın kararlılığını korumak için özellik lansman bayraklarını kullanma hata takip numaranızı veya <none> özelliğini kullanabilirsiniz.

  3. Dosyayı kaydedip düzenleyiciden çıkın.

Derlemeyi ayarlama

İşaretinizi bildirdikten sonra, derlemeyi oluşturabilmesi için işaretin değerine erişmek için kullanılan kitaplık kodu.

  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, 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çeriyor.

    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ık hedefine benzer ancak vendor_available, product_available, host_supported ve vndk gibi seçeneklere sahiptir. Bu cc_aconfig_library türüne bağlı olarak derleme hedefi belirli varyant türleri varsa ilgili ayarları da eklemeniz inceleyebilirsiniz. Örneğin, üst derleme hedefinde vendor_available true olarak ayarlandı. Bunu da ayarlamak isteyebilirsiniz. Bu cc_aconfig_library hedefinde vendor_available-true.

    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 örnekteki gibi, aconfig flag'lerini kullanan bir hedef oluşturun cc_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, yapılandırma 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 birconfig flag'i bildir

Rust 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. 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ğerinin foo.bar olarak ayarlanması, şu adla otomatik oluşturulan bir sınıfın oluşturulmasıyla sonuçlanır: foo.bar.Flags. C++'ta işaret erişim yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı beyanda yer alan işaretler dosyası aynı pakete ait, ancak birden fazla bildirim dosyası aynı pakete flag'ler 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 harflerden oluşan işaretin adını içerir alt çizgi ve sayılar.

    • 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 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. Şunu yapmalısınız: bug cihazınızı belirlemek için atanan Google incelemecisiyle birlikte çalışın. Eğer kendi AOSP aynanızın kararlılığını korumak için özellik lansman bayraklarını kullanma hata takip numaranızı veya <none> özelliğini 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, 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 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 aşağıdakileri içeren beyanın adını içerir küçük harf, alt çizgi ve rakamlardan oluşur.
    • crate_name, beyanda kullanılan paket adını içeriyor.
    • 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ı kaydedin ve düzenleyiciden çıkın.