شما میتوانید از پرچمهای aconfig در کدهای جاوا، سی، سی پلاس پلاس و 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، وقتی با نام flag ترکیب شود، یک کلید منحصر به فرد ارائه میدهد. در جاوا، تنظیمpackageبهfoo.barمنجر به یک کلاس خودکار تولید شده به نامfoo.bar.Flagsمیشود. در C++، متدهای دسترسی flag به صورتfoo::bar::" flagname "نامگذاری میشوند. flagهای موجود در یک فایل اعلان متعلق به یک پکیج هستند، اما چندین فایل اعلان میتوانند flagها را به یک پکیج اضافه کنند. containerمجموعهای از کدها را تعریف میکند که به صورت یک فایل باینری ساخته و ارسال میشوند. کانتینرهای معتبر عبارتند ازsystem،vendor،system_ext،product،name.of.apexوname.of.apk.nameشامل نام پرچم است که فقط شامل حروف کوچک، زیرخط و اعداد است.namespaceشامل namespace برای مشارکتها است. شما باید با بررسیکنندهی تعیینشدهی گوگل برای تعیین namespace خود همکاری کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ پایداری آینهی AOSP خود استفاده میکنید، میتوانید از namespace به هر شکلی که دوست دارید استفاده کنید.descriptionشامل شرح مختصری از ویژگی یا تغییری است که علامتگذاری شده است.bugشماره باگی است که به کد جدید اضافه شده مرتبط است. شما باید با بررسیکننده گوگل که برای تعیینbugشما تعیین شده است، همکاری کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ پایداری آینه 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، وقتی با نام flag ترکیب شود، یک کلید منحصر به فرد ارائه میدهد. در جاوا، تنظیمpackageبهfoo.barمنجر به یک کلاس خودکار تولید شده به نامfoo.bar.Flagsمیشود. در C++، متدهای دسترسی flag به صورتfoo::bar::" flagname "نامگذاری میشوند. flagهای موجود در یک فایل اعلان متعلق به یک پکیج هستند، اما چندین فایل اعلان میتوانند flagها را به یک پکیج اضافه کنند. containerمجموعهای از کدها را تعریف میکند که به صورت یک فایل باینری ساخته و ارسال میشوند. کانتینرهای معتبر عبارتند ازsystem،vendor،system_ext،product،name.of.apexوname.of.apk.nameشامل نام پرچم است که فقط شامل حروف کوچک، زیرخط و اعداد است.namespaceشامل namespace برای مشارکتها است. شما باید با بررسیکنندهی تعیینشدهی گوگل برای تعیین namespace خود همکاری کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ پایداری آینهی AOSP خود استفاده میکنید، میتوانید از namespace به هر شکلی که دوست دارید استفاده کنید.descriptionشامل شرح مختصری از ویژگی یا تغییری است که علامتگذاری شده است.bugشماره باگی است که به کد جدید اضافه شده مرتبط است. شما باید با بررسیکننده گوگل که برای تعیینbugشما تعیین شده است، همکاری کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ پایداری آینه 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 را فراخوانی میکند که یک کتابخانه با کد تولید شده در زمان ساخت ایجاد میکند.کتابخانه aconfig در CC مشابه یک کتابخانه هدف CC است، اما گزینههایی مانند
vendor_available،product_available،host_supportedوvndkدارد. اگر هدف ساخت وابسته به اینcc_aconfig_libraryبه نوع خاصی از متغیرها نیاز داشته باشد، ممکن است لازم باشد تنظیمات مربوطه را در هدف کتابخانه aconfig در CC نیز اضافه کنید. برای مثال، اگر هدف ساخت والد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نام کتابخانهای است که توسط build طبق فیلدnamecc_aconfig_libraryدر مرحله ۲ ایجاد میشود. با ایجاد یک ورودی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، وقتی با نام flag ترکیب شود، یک کلید منحصر به فرد ارائه میدهد. در جاوا، تنظیمpackageبهfoo.barمنجر به یک کلاس خودکار تولید شده به نامfoo.bar.Flagsمیشود. در C++، متدهای دسترسی flag به صورتfoo::bar::" flagname "نامگذاری میشوند. flagهای موجود در یک فایل اعلان متعلق به یک پکیج هستند، اما چندین فایل اعلان میتوانند flagها را به یک پکیج اضافه کنند. containerمجموعهای از کدها را تعریف میکند که به صورت یک فایل باینری ساخته و ارسال میشوند. کانتینرهای معتبر عبارتند ازsystem،vendor،system_ext،product،name.of.apexوname.of.apk.nameشامل نام پرچم است که فقط شامل حروف کوچک، زیرخط و اعداد است.namespaceشامل namespace برای مشارکتها است. شما باید با بررسیکنندهی تعیینشدهی گوگل برای تعیین namespace خود همکاری کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ پایداری آینهی AOSP خود استفاده میکنید، میتوانید از namespace به هر شکلی که دوست دارید استفاده کنید.descriptionشامل شرح مختصری از ویژگی یا تغییری است که علامتگذاری شده است.bugشماره باگی است که به کد جدید اضافه شده مرتبط است. شما باید با بررسیکننده گوگل که برای تعیینbugشما تعیین شده است، همکاری کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ پایداری آینه 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را شامل کتابخانه پرچم تولید شده توسط کد کند.فایل را ذخیره کنید و از ویرایشگر خارج شوید.