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:
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.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ğerininfoo.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öntemlerifoo::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ılarsystem
,vendor
,system_ext
,product
,name.of.apex
vename.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.
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.
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 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.
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:
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'da,package
değerininfoo.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öntemlerifoo::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ılarsystem
,vendor
,system_ext
,product
,name.of.apex
vename.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.
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.
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 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.
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ç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
vevndk
gibi seçeneklere sahiptir. Bucc_aconfig_library
türüne bağlı olarak derleme hedefi belirli varyant türleri varsa ilgili ayarları da eklemeniz inceleyebilirsiniz. Örneğin, üst derleme hedefindevendor_available
true
olarak ayarlandı. Bunu da ayarlamak isteyebilirsiniz. Bucc_aconfig_library
hedefindevendor_available
-true
.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 ö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ı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 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. 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'da,package
değerininfoo.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öntemlerifoo::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ılarsystem
,vendor
,system_ext
,product
,name.of.apex
vename.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.
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.
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 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.
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ılanname
değerini içerir.
Bu değişiklikle, kodunuz bu Rust kitaplığına bağımlı 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.