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:
Yeni kodun bulunduğu bir dizinde
.aconfiguzantılı bir dosya oluşturun (ör.my_new_aconfig_flag_declarations.aconfig). Aconfig dosyası, standart bir şemaya uygun bir metin proto dosyasıdır.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,packagedeğerinifoo.barolarak ayarladığınızdafoo.bar.Flagsadlı otomatik oluşturulmuş bir sınıf elde edilir. C++'ta, işaretleyici erişim yöntemlerifoo::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ılarsystem,vendor,system_ext,product,name.of.apexvename.of.apkşeklindedir.nameyalnı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.bugbelirlemek 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.
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.
Android.bpderleme dosyanıza aşağıdakine benzer biraconfig_declarationsbölümü ekleyin:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }Nerede:
nameyalnı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.aconfigdosyasının adını içerir.
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:
Yeni kodun bulunduğu bir dizinde
.aconfiguzantılı bir dosya oluşturun (ör.my_new_aconfig_flag_declarations.aconfig). Aconfig dosyası, standart bir şemaya uygun bir metin proto dosyasıdır.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,packagedeğerinifoo.barolarak ayarladığınızdafoo.bar.Flagsadlı otomatik oluşturulmuş bir sınıf elde edilir. C++'ta, işaretleyici erişim yöntemlerifoo::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ılarsystem,vendor,system_ext,product,name.of.apexvename.of.apkşeklindedir.nameyalnı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.bugbelirlemek 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.
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.
Android.bpderleme dosyanıza aşağıdakine benzer biraconfig_declarationsbölümü ekleyin:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }Nerede:
nameyalnı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.
Aynı dosyada, aşağıdakine benzer bir
cc_aconfig_libraryhedefi oluşturun:cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }Nerede:
nameyalnızca küçük harf, alt çizgi ve sayı içeren kitaplığın adını içerir.aconfig_declarations, beyanda kullanılannameile 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_supportedvevndkgibi seçenekleri vardır. Bucc_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 hedefivendor_availableolarak ayarlanmışsa bucc_aconfig_libraryhedefindevendor_availabledeğerinitrueolarak da ayarlamak isteyebilirsiniz.trueBu derleme hedefi eklendikten sonra kodunuz bu kitaplığa erişebilir. Bu kitaplığı
static_libveyashared_libsöz dizimini kullanarak ekleyebilirsiniz. Bu kitaplığıstatic_libolarak eklemek istiyorsanızserver_configurable_flagsüzerindeshared_libbağımlılığı ekleyin. 3. adımda, oluşturulan kod işaret kitaplığınınlibexample_cpp_lib'ya nasıl dahil edileceği gösterilmektedir.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ımdacc_aconfig_librarynamealanına göre derleme tarafından oluşturulan kitaplığın adıdır. Statik kitaplık adıyla bircc_librarygiriş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:
Yeni kodun bulunduğu bir dizinde
.aconfiguzantılı bir dosya oluşturun (ör.my_new_aconfig_flag_declarations.aconfig). Aconfig dosyası, standart bir şemaya uygun bir metin proto dosyasıdır.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,packagedeğerinifoo.barolarak ayarladığınızdafoo.bar.Flagsadlı otomatik oluşturulmuş bir sınıf elde edilir. C++'ta, işaretleyici erişim yöntemlerifoo::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ılarsystem,vendor,system_ext,product,name.of.apexvename.of.apkşeklindedir.nameyalnı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.bugbelirlemek 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.
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.
Android.bpderleme dosyanıza aşağıdakine benzer biraconfig_declarationsbölümü ekleyin:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }Nerede:
nameyalnı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.
Aşağıdaki örneğe benzer bir
rust_aconfig_libraryhedef 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:
nameyalnı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ılannameile aynıdır.
Bu değişiklikle birlikte kodunuz bu Rust kitaplığına bağlı olabilir.
Aynı dosyada, aşağıdakine benzer bir
rust_librarygirişi oluşturun:rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }Bu örnek, kaynak kodu derleme hedeflerinizin
libexample_demo_flags_rustoluşturulan kod işaret kitaplığını içermesine olanak tanır.Dosyayı kaydedin ve düzenleyiciden çıkın.