میتوانید از پرچمهای aconfig در کدهای Java، C، C++ و Rust استفاده کنید. سیستم ساخت AOSP ابزاری به نام aconfig را راهاندازی میکند که برای ایجاد یک کتابخانه خاص زبان از روشهایی که میتوانید برای دسترسی به مقدار هر پرچم استفاده کنید، استفاده میشود. قبل از اینکه بتوانید کتابخانه را ایجاد کنید، باید پرچم ها را اعلام کرده و به ساخت اضافه کنید.
یک پرچم aconfig برای جاوا اعلام کنید
برای اعلام یک پرچم aconfig برای جاوا:
در فهرستی که کد جدید وجود دارد، یک فایل با پسوند
.aconfig
ایجاد کنید، به عنوان مثالmy_new_aconfig_flag_declarations.aconfig
. یک فایل aconfig یک فایل پروتو متنی است که از یک طرح استاندارد پیروی می کند.یک اعلان پرچم مشابه موارد زیر اضافه کنید:
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>" }
کجا:
-
package
، هنگامی که با نام پرچم ترکیب می شود، یک کلید منحصر به فرد ارائه می دهد. در جاوا، تنظیمpackage
بهfoo.bar
منجر به یک کلاس تولید خودکار به نامfoo.bar.Flags
می شود. در C++، متدهای دسترسی پرچم به نامfoo::bar::" flagname "
نامگذاری می شوند. پرچمها در یک فایل اعلان متعلق به یک بسته هستند، اما چندین فایل اعلامیه میتوانند پرچمها را به همان بسته اضافه کنند. container
مجموعه ای از کدها را تعریف می کند که با هم به صورت باینری ساخته و ارسال می شوند. کانتینرهای معتبر عبارتند ازsystem
,vendor
,system_ext
,product
,name.of.apex
وname.of.apk
.name
شامل نام پرچم فقط شامل حروف کوچک، زیرخط و اعداد است.namespace
حاوی فضای نامی برای مشارکت است. برای تعیین فضای نام خود باید با بازبین Google اختصاص داده شده کار کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ ثبات آینه AOSP خود استفاده میکنید، میتوانید از فضای نام هر طور که دوست دارید استفاده کنید.description
شامل توضیح مختصری از ویژگی یا تغییری است که پرچم گذاری شده است.bug
شماره باگ مربوط به مشارکت کد جدید است. برای تعیینbug
خود باید با بازبین Google اختصاص داده شده کار کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ ثبات آینه AOSP خود استفاده میکنید، میتوانید از شماره ردیابی اشکال خود استفاده کنید یا از<none>
استفاده کنید.
-
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
بیلد را تنظیم کنید
پس از اینکه پرچم خود را اعلام کردید، بیلد را طوری تنظیم کنید که بتواند کد کتابخانه مورد استفاده برای دسترسی به مقدار پرچم را ایجاد کند.
در فایل ساخت
Android.bp
خود، یک بخشaconfig_declarations
مشابه موارد زیر اضافه کنید:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
کجا:
-
name
حاوی نام اعلان است که فقط شامل حروف کوچک، زیرخط و اعداد است. -
package
حاوی همان نام بسته مورد استفاده در اعلامیه است. -
srcs
حاوی نام فایل.aconfig
است که در آن پرچم اعلام شده است.
-
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
یک پرچم aconfig برای C و C++ اعلام کنید
برای اعلام یک پرچم aconfig برای C و C++:
در فهرستی که کد جدید وجود دارد، یک فایل با پسوند
.aconfig
ایجاد کنید، به عنوان مثالmy_new_aconfig_flag_declarations.aconfig
. یک فایل aconfig یک فایل پروتو متنی است که از یک طرح استاندارد پیروی می کند.یک اعلان پرچم مشابه موارد زیر اضافه کنید:
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>" }
کجا:
-
package
، هنگامی که با نام پرچم ترکیب می شود، یک کلید منحصر به فرد ارائه می دهد. در جاوا، تنظیمpackage
بهfoo.bar
منجر به یک کلاس تولید خودکار به نامfoo.bar.Flags
می شود. در C++، متدهای دسترسی پرچم به نامfoo::bar::" flagname "
نامگذاری می شوند. پرچمها در یک فایل اعلان متعلق به یک بسته هستند، اما چندین فایل اعلامیه میتوانند پرچمها را به همان بسته اضافه کنند. container
مجموعه ای از کدها را تعریف می کند که با هم به صورت باینری ساخته و ارسال می شوند. کانتینرهای معتبر عبارتند ازsystem
,vendor
,system_ext
,product
,name.of.apex
وname.of.apk
.name
شامل نام پرچم فقط شامل حروف کوچک، زیرخط و اعداد است.namespace
حاوی فضای نامی برای مشارکت است. برای تعیین فضای نام خود باید با بازبین Google اختصاص داده شده کار کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ ثبات آینه AOSP خود استفاده میکنید، میتوانید از فضای نام هر طور که دوست دارید استفاده کنید.description
شامل توضیح مختصری از ویژگی یا تغییری است که پرچم گذاری شده است.bug
شماره باگ مربوط به مشارکت کد جدید است. برای تعیینbug
خود باید با بازبین Google اختصاص داده شده کار کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ ثبات آینه AOSP خود استفاده میکنید، میتوانید از شماره ردیابی اشکال خود استفاده کنید یا از<none>
استفاده کنید.
-
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
ساخت را تنظیم کنید
پس از اینکه پرچم خود را اعلام کردید، بیلد را طوری تنظیم کنید که بتواند کد کتابخانه مورد استفاده برای دسترسی به مقدار پرچم را ایجاد کند.
در فایل ساخت
Android.bp
خود، یک بخشaconfig_declarations
مشابه موارد زیر اضافه کنید:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
کجا:
-
name
حاوی نام اعلان است که فقط شامل حروف کوچک، زیرخط و اعداد است. -
package
حاوی همان نام بسته مورد استفاده در اعلامیه است. -
srcs
حاوی نام فایل aconfig است که در آن پرچم اعلام شده است.
-
در همان فایل، یک هدف
cc_aconfig_library
مشابه موارد زیر ایجاد کنید:cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }
کجا:
-
name
حاوی نام کتابخانه است که فقط شامل حروف کوچک، زیرخط و اعداد است. -
aconfig_declarations
حاوی همانname
است که در اعلان استفاده شده است.
هدف ساخت
cc_aconfig_library
C یا C++ Codegen را فراخوانی میکند که یک کتابخانه با کد تولید شده در زمان ساخت ایجاد میکند.کتابخانه CC aconfig شبیه به هدف کتابخانه CC است، اما دارای گزینه هایی مانند
vendor_available
،product_available
،host_supported
وvndk
است. اگر هدف ساخت بسته به اینcc_aconfig_library
به انواع خاصی نیاز دارد، ممکن است لازم باشد تنظیمات مربوطه را در هدف کتابخانه CC aconfig اضافه کنید. به عنوان مثال، اگر هدف ساخت والدvendor_available
رویtrue
تنظیم شده باشد، ممکن است بخواهیدvendor_available
در این هدفcc_aconfig_library
رویtrue
تنظیم کنید.پس از افزودن این هدف ساخت، کد شما می تواند به این کتابخانه دسترسی داشته باشد. می توانید این کتابخانه را با استفاده از نحو
static_lib
یاshared_lib
اضافه کنید. توجه داشته باشید اگر می خواهید این کتابخانه را به عنوانstatic_lib
اضافه کنید، یک وابستگیshared_lib
بهserver_configurable_flags
اضافه کنید. مرحله 3 نحوه گنجاندن کتابخانه پرچم کد تولید شده را درlibexample_cpp_lib
نشان می دهد.-
هدفی ایجاد کنید که از پرچم های aconfig استفاده کند، مانند مثال زیر
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"], }
کجا:
-
shared_libs
شامل وابستگی های اضافی مورد نیاز برای پرچم های aconfig است. -
static_libs
نام کتابخانه ای است که توسط ساخت فیلدname
cc_aconfig_library
در مرحله 2 ایجاد می شود. با ایجاد یک ورودیcc_library
با نام کتابخانه ایستا، اکنون می توانید از پرچم های aconfig در کد خود استفاده کنید.
-
یک پرچم aconfig برای Rust اعلام کنید
برای اعلام یک پرچم aconfig برای Rust:
در فهرستی که کد جدید وجود دارد، یک فایل با پسوند
.aconfig
ایجاد کنید، به عنوان مثالmy_new_aconfig_flag_declarations.aconfig
. یک فایل aconfig یک فایل پروتو متنی است که از یک طرح استاندارد پیروی می کند.یک اعلان پرچم مشابه موارد زیر اضافه کنید:
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>" }
کجا:
-
package
، هنگامی که با نام پرچم ترکیب می شود، یک کلید منحصر به فرد ارائه می دهد. در جاوا، تنظیمpackage
بهfoo.bar
منجر به یک کلاس تولید خودکار به نامfoo.bar.Flags
می شود. در C++، متدهای دسترسی پرچم به نامfoo::bar::" flagname "
نامگذاری می شوند. پرچمها در یک فایل اعلان متعلق به یک بسته هستند، اما چندین فایل اعلامیه میتوانند پرچمها را به همان بسته اضافه کنند. container
مجموعه ای از کدها را تعریف می کند که با هم به صورت باینری ساخته و ارسال می شوند. کانتینرهای معتبر عبارتند ازsystem
,vendor
,system_ext
,product
,name.of.apex
وname.of.apk
.name
شامل نام پرچم فقط شامل حروف کوچک، زیرخط و اعداد است.namespace
حاوی فضای نامی برای مشارکت است. برای تعیین فضای نام خود باید با بازبین Google اختصاص داده شده کار کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ ثبات آینه AOSP خود استفاده میکنید، میتوانید از فضای نام هر طور که دوست دارید استفاده کنید.description
شامل توضیح مختصری از ویژگی یا تغییری است که پرچم گذاری شده است.bug
شماره باگ مربوط به مشارکت کد جدید است. برای تعیینbug
خود باید با بازبین Google اختصاص داده شده کار کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ ثبات آینه AOSP خود استفاده میکنید، میتوانید از شماره ردیابی اشکال خود استفاده کنید یا از<none>
استفاده کنید.
-
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
ساخت را تنظیم کنید
پس از اینکه پرچم خود را اعلام کردید، بیلد را طوری تنظیم کنید که بتواند کد کتابخانه مورد استفاده برای دسترسی به مقدار پرچم را ایجاد کند.
در فایل ساخت
Android.bp
خود، یک بخشaconfig_declarations
مشابه موارد زیر اضافه کنید:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
کجا:
-
name
حاوی نام اعلان است که فقط شامل حروف کوچک، زیرخط و اعداد است. -
package
حاوی همان نام بسته مورد استفاده در اعلامیه است. -
srcs
حاوی نام فایل aconfig است که در آن پرچم اعلام شده است.
-
یک هدف
rust_aconfig_library
مشابه مثال بعدی ایجاد کنید. این هدف Rust Codegen را فراخوانی می کند و یک کتابخانه Rust با کد تولید شده در طول زمان ساخت ایجاد می کند.rust_aconfig_library { name: "libaconfig_demo_flags_rust", crate_name: "aconfig_demo_flags_rust", aconfig_declarations: "aconfig_demo_flags", }
کجا:
-
name
حاوی نام اعلان است که فقط شامل حروف کوچک، زیرخط و اعداد است. -
crate_name
شامل همان نام بسته مورد استفاده در اعلان است. -
aconfig_declarations
حاوی همانname
است که در اعلان استفاده شده است.
با این تغییر، کد شما می تواند به این کتابخانه Rust وابسته باشد.
-
در همان فایل، یک ورودی
rust_library
شبیه به زیر ایجاد کنید:rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }
این نمونه به اهداف ساخت کد منبع شما اجازه می دهد
libexample_demo_flags_rust
شامل کتابخانه پرچم تولید شده کد شود.فایل را ذخیره کرده و از ویرایشگر خارج شوید.