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:
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.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'dapackage
değerinifoo.bar
olarak ayarlamakfoo.bar.Flags
adlı otomatik oluşturulmuş bir sınıf oluşturur. C++'ta işaret erişimci yöntemlerifoo::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
vename.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.
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.
Android.bp
derleme dosyanıza aşağıdakine benzer biraconfig_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.
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:
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.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'dapackage
değerinifoo.bar
olarak ayarlamakfoo.bar.Flags
adlı otomatik oluşturulmuş bir sınıf oluşturur. C++'ta işaret erişimci yöntemlerifoo::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
vename.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.
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.
Android.bp
derleme dosyanıza aşağıdakine benzer biraconfig_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.
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ılanname
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
vevndk
gibi seçeneklere sahiptir. Bucc_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 hedefindevendor_available
true
olarak ayarlanmışsa bucc_aconfig_library
hedefindevendor_available
öğesinitrue
olarak ayarlamak isteyebilirsiniz.Bu derleme hedefini ekledikten sonra kodunuz bu kitaplığa erişebilir. Bu kitaplığı
static_lib
veyashared_lib
söz dizimini kullanarak dahil edebilirsiniz. Bu kitaplığıstatic_lib
olarak eklemek istiyorsanızserver_configurable_flags
'yeshared_lib
bağımlılık ekleyin. 3. adımda, oluşturulan kod işareti kitaplığınınlibexample_cpp_lib
içine 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şaretçileri için gereken ek bağımlılıkları içerir.static_libs
, 2. adımdakicc_aconfig_library
name
alanına göre derleme tarafından oluşturulan kitaplığın adıdır. Statik kitaplık adıyla bircc_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:
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.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'dapackage
değerinifoo.bar
olarak ayarlamakfoo.bar.Flags
adlı otomatik oluşturulmuş bir sınıf oluşturur. C++'ta işaret erişimci yöntemlerifoo::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
vename.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.
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.
Android.bp
derleme dosyanıza aşağıdakine benzer biraconfig_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.
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ılanname
değerini içerir.
Bu değişiklikle birlikte kodunuz bu Rust kitaplığına bağlı olabilir.
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.Dosyayı kaydedin ve düzenleyiciden çıkın.