aconfig işareti tanımlama

Java, C, C++ ve Rust kodunda aconfig işaretlerini kullanabilirsiniz. AOSP derleme sistemi, her işaretin değerine erişmek için kullanabileceğiniz dile özgü bir yöntem kitaplığı oluşturmak üzere kullanılan aconfig adlı bir aracı başlatır. Kitaplığı oluşturabilmeniz için önce işaretleri bildirmeniz ve bunları derlemeye eklemeniz gerekir.

Java için aconfig işareti tanımlama

Java için bir aconfig işareti bildirmek üzere:

  1. Yeni kodun bulunduğu bir dizinde .aconfig uzantılı bir dosya oluşturun (ör. my_new_aconfig_flag_declarations.aconfig). Aconfig dosyası, standart bir şemaya uygun 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, flag adıyla birlikte kullanıldığında benzersiz bir anahtar sağlar. Java'da, package değerini foo.bar olarak ayarladığınızda foo.bar.Flags adlı otomatik oluşturulmuş bir sınıf elde edilir. C++'ta, işaretleyici erişim yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı bildirim dosyasındaki işaretler aynı pakete aittir ancak birden çok bildirim dosyası aynı pakete işaret ekleyebilir.
    • container, birlikte derlenip ikili program olarak gönderilen bir kod koleksiyonunu tanımlar. Geçerli kapsayıcılar system, vendor, system_ext, product, name.of.apex ve name.of.apk şeklindedir.

    • 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ını içerir. Ad alanınızı 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ı işaretleri kullanıyorsanız ad alanını istediğiniz gibi kullanabilirsiniz.

    • description, işaretlenen özellik 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 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ı işaretlerini kullanıyorsanız hata izleme numaranızı veya <none> kullanabilirsiniz.

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

Derlemeyi ayarlama

İşaretinizi bildirdikten sonra, işaretin değerine erişmek için kullanılan kitaplık kodunu oluşturabilecek şekilde derlemeyi 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 bildirimin adını içerir.
    • package, beyanda kullanılan paket adını içeriyor.
    • srcs, işaretin bildirildiği .aconfig dosyasının adını içerir.
  2. Dosyayı kaydedin ve düzenleyiciden çıkın.

C ve C++ için aconfig işareti bildirme

C ve C++ için bir aconfig işareti bildirmek üzere:

  1. Yeni kodun bulunduğu bir dizinde .aconfig uzantılı bir dosya oluşturun (ör. my_new_aconfig_flag_declarations.aconfig). Aconfig dosyası, standart bir şemaya uygun 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, flag adıyla birlikte kullanıldığında benzersiz bir anahtar sağlar. Java'da, package değerini foo.bar olarak ayarladığınızda foo.bar.Flags adlı otomatik oluşturulmuş bir sınıf elde edilir. C++'ta, işaretleyici erişim yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı bildirim dosyasındaki işaretler aynı pakete aittir ancak birden çok bildirim dosyası aynı pakete işaret ekleyebilir.
    • container, birlikte derlenip ikili program olarak gönderilen bir kod koleksiyonunu tanımlar. Geçerli kapsayıcılar system, vendor, system_ext, product, name.of.apex ve name.of.apk şeklindedir.

    • 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ını içerir. Ad alanınızı 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ı işaretleri kullanıyorsanız ad alanını istediğiniz gibi kullanabilirsiniz.

    • description, işaretlenen özellik 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 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ı işaretlerini kullanıyorsanız hata izleme numaranızı veya <none> kullanabilirsiniz.

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

Derlemeyi ayarlama

İşaretinizi bildirdikten sonra, işaretin değerine erişmek için kullanılan kitaplık kodunu oluşturabilecek şekilde derlemeyi 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 bildirimin adını içerir.
    • package, beyanda kullanılan paket adını içeriyor.
    • srcs, işaretin bildirildiği 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 ile aynıdır.

    cc_aconfig_libraryDerleme hedefi, derleme zamanında oluşturulan kodla bir kitaplık oluşturan C veya C++ Codegen'i çağırır.

    CC aconfig kitaplığı, CC kitaplığı hedefiyle benzerdir ancak vendor_available, product_available, host_supported ve vndk gibi seçenekleri vardır. Bu cc_aconfig_library öğesine bağlı olarak derleme hedefi belirli bir varyant türü gerektiriyorsa CC aconfig kitaplığı hedefine de ilgili ayarı eklemeniz gerekebilir. Örneğin, üst derleme hedefi vendor_available olarak ayarlanmışsa bu cc_aconfig_library hedefinde vendor_available değerini true olarak da ayarlamak isteyebilirsiniz.true

    Bu derleme hedefi eklendikten sonra kodunuz bu kitaplığa erişebilir. Bu kitaplığı static_lib veya shared_lib söz dizimini kullanarak ekleyebilirsiniz. Bu kitaplığı static_lib olarak eklemek istiyorsanız server_configurable_flags üzerinde shared_lib bağımlılığı ekleyin. 3. adımda, oluşturulan kod işaret kitaplığının libexample_cpp_lib'ya nasıl dahil edileceği gösterilmektedir.

  3. Aşağıdaki örnekte gösterildiği gibi aconfig işaretlerini 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, aconfig işaretleri için gereken ek bağımlılıkları içeriyor.
    • static_libs, 2. adımda 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 bildirme

Rust için bir aconfig işareti bildirmek üzere:

  1. Yeni kodun bulunduğu bir dizinde .aconfig uzantılı bir dosya oluşturun (ör. my_new_aconfig_flag_declarations.aconfig). Aconfig dosyası, standart bir şemaya uygun 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, flag adıyla birlikte kullanıldığında benzersiz bir anahtar sağlar. Java'da, package değerini foo.bar olarak ayarladığınızda foo.bar.Flags adlı otomatik oluşturulmuş bir sınıf elde edilir. C++'ta, işaretleyici erişim yöntemleri foo::bar::"flagname" olarak adlandırılır. Aynı bildirim dosyasındaki işaretler aynı pakete aittir ancak birden çok bildirim dosyası aynı pakete işaret ekleyebilir.
    • container, birlikte derlenip ikili program olarak gönderilen bir kod koleksiyonunu tanımlar. Geçerli kapsayıcılar system, vendor, system_ext, product, name.of.apex ve name.of.apk şeklindedir.

    • 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ını içerir. Ad alanınızı 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ı işaretleri kullanıyorsanız ad alanını istediğiniz gibi kullanabilirsiniz.

    • description, işaretlenen özellik 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 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ı işaretlerini kullanıyorsanız hata izleme numaranızı veya <none> kullanabilirsiniz.

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

Derlemeyi ayarlama

İşaretinizi bildirdikten sonra, işaretin değerine erişmek için kullanılan kitaplık kodunu oluşturabilecek şekilde derlemeyi 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 bildirimin adını içerir.
    • package, beyanda kullanılan paket adını içeriyor.
    • srcs, işaretin bildirildiği aconfig dosyasının adını içerir.
  2. Aşağıdaki örneğe benzer bir rust_aconfig_library hedef oluşturun. Bu hedef, derleme sırasında Rust Codegen'i çağırır ve 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 bildirimin adını içerir.
    • crate_name, beyanda kullanılan paket adını içeriyor.
    • aconfig_declarations, beyanda kullanılan name ile aynıdır.

    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 kodu derleme hedeflerinizin libexample_demo_flags_rust oluşturulan kod işaret kitaplığını içermesine olanak tanır.

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