میتوانید از پرچمهای 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_libraryC یا 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نام کتابخانه ای است که توسط ساخت فیلدnamecc_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شامل کتابخانه پرچم تولید شده کد شود.فایل را ذخیره کرده و از ویرایشگر خارج شوید.