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
.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.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ğerinifoo.bar
olarak ayarladığınızdafoo.bar.Flags
adlı 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.apex
vename.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.
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.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
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.
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
.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.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ğerinifoo.bar
olarak ayarladığınızdafoo.bar.Flags
adlı 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.apex
vename.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.
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.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
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.
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
ile aynıdır.
cc_aconfig_library
Derleme 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
vevndk
gibi 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_available
olarak ayarlanmışsa bucc_aconfig_library
hedefindevendor_available
değerinitrue
olarak da ayarlamak isteyebilirsiniz.true
Bu derleme hedefi eklendikten sonra kodunuz bu kitaplığa erişebilir. Bu kitaplığı
static_lib
veyashared_lib
söz dizimini kullanarak ekleyebilirsiniz. Bu kitaplığıstatic_lib
olarak eklemek istiyorsanızserver_configurable_flags
üzerindeshared_lib
bağı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_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 aconfig işareti bildirme
Rust için bir aconfig işareti bildirmek üzere:
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.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ğerinifoo.bar
olarak ayarladığınızdafoo.bar.Flags
adlı 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.apex
vename.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.
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.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
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.
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ılanname
ile aynıdır.
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 kodu derleme hedeflerinizin
libexample_demo_flags_rust
oluşturulan kod işaret kitaplığını içermesine olanak tanır.Dosyayı kaydedin ve düzenleyiciden çıkın.