আপনি জাভা, সি, সি++ এবং রাস্ট কোডে aconfig ফ্ল্যাগ ব্যবহার করতে পারেন। 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, ফ্ল্যাগের নামের সাথে মিলিত হয়ে একটি অনন্য কী প্রদান করে। জাভাতে,packagefoo.barহিসেবে সেট করলেfoo.bar.Flagsনামের একটি স্বয়ংক্রিয়ভাবে তৈরি ক্লাস তৈরি হয়। C++-এ, ফ্ল্যাগ অ্যাক্সেসর মেথডগুলোর নাম হবেfoo::bar::" flagname "। একই ডিক্লারেশন ফাইলের ফ্ল্যাগগুলো একই প্যাকেজের অন্তর্ভুক্ত, কিন্তু একাধিক ডিক্লারেশন ফাইল একই প্যাকেজে ফ্ল্যাগ যোগ করতে পারে। containerহলো কোডের এমন একটি সংগ্রহ যা একটি বাইনারি হিসেবে একসাথে বিল্ড ও শিপ করা হয়। বৈধ কন্টেইনারগুলো হলোsystem,vendor,system_ext,product,name.of.apex, এবংname.of.apk।nameএ পতাকার নামটি থাকে, যেখানে শুধুমাত্র ছোট হাতের অক্ষর, আন্ডারস্কোর এবং সংখ্যা ব্যবহৃত হয়।namespaceমধ্যে অবদানের জন্য নেমস্পেস থাকে। আপনার নেমস্পেস নির্ধারণ করতে আপনাকে অবশ্যই নির্ধারিত গুগল রিভিউয়ারের সাথে কাজ করতে হবে। আপনি যদি আপনার নিজস্ব AOSP মিররের স্থিতিশীলতা বজায় রাখতে ফিচার লঞ্চ ফ্ল্যাগ ব্যবহার করেন, তবে আপনি আপনার পছন্দমতো নেমস্পেস ব্যবহার করতে পারেন।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ফাইলের নাম থাকে যেখানে ফ্ল্যাগটি ডিক্লেয়ার করা হয়েছে।
-
ফাইলটি সংরক্ষণ করুন এবং এডিটর থেকে বেরিয়ে যান।
C এবং C++ এর জন্য একটি aconfig ফ্ল্যাগ ঘোষণা করুন
C এবং C++ এর জন্য একটি 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, ফ্ল্যাগের নামের সাথে মিলিত হয়ে একটি অনন্য কী প্রদান করে। জাভাতে,packagefoo.barহিসেবে সেট করলেfoo.bar.Flagsনামের একটি স্বয়ংক্রিয়ভাবে তৈরি ক্লাস তৈরি হয়। C++-এ, ফ্ল্যাগ অ্যাক্সেসর মেথডগুলোর নাম হবেfoo::bar::" flagname "। একই ডিক্লারেশন ফাইলের ফ্ল্যাগগুলো একই প্যাকেজের অন্তর্ভুক্ত, কিন্তু একাধিক ডিক্লারেশন ফাইল একই প্যাকেজে ফ্ল্যাগ যোগ করতে পারে। containerহলো কোডের এমন একটি সংগ্রহ যা একটি বাইনারি হিসেবে একসাথে বিল্ড ও শিপ করা হয়। বৈধ কন্টেইনারগুলো হলোsystem,vendor,system_ext,product,name.of.apex, এবংname.of.apk।nameএ পতাকার নামটি থাকে, যেখানে শুধুমাত্র ছোট হাতের অক্ষর, আন্ডারস্কোর এবং সংখ্যা ব্যবহৃত হয়।namespaceমধ্যে অবদানের জন্য নেমস্পেস থাকে। আপনার নেমস্পেস নির্ধারণ করতে আপনাকে অবশ্যই নির্ধারিত গুগল রিভিউয়ারের সাথে কাজ করতে হবে। আপনি যদি আপনার নিজস্ব AOSP মিররের স্থিতিশীলতা বজায় রাখতে ফিচার লঞ্চ ফ্ল্যাগ ব্যবহার করেন, তবে আপনি আপনার পছন্দমতো নেমস্পেস ব্যবহার করতে পারেন।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_libraryবিল্ড টার্গেটটি C বা C++ Codegen-কে আহ্বান করে, যা বিল্ডের সময় জেনারেট করা কোড দিয়ে একটি লাইব্রেরি তৈরি করে।সিসি এক্যানফিগ লাইব্রেরিটি একটি সিসি লাইব্রেরি টার্গেটের মতোই, তবে এতে
vendor_available,product_available,host_supported, এবংvndkমতো অপশন রয়েছে। যদি এইcc_aconfig_libraryউপর নির্ভরশীল বিল্ড টার্গেটের নির্দিষ্ট ধরনের ভ্যারিয়েন্টের প্রয়োজন হয়, তাহলে আপনাকে সিসি এক্যানফিগ লাইব্রেরি টার্গেটেও সংশ্লিষ্ট সেটিংটি যোগ করতে হতে পারে। উদাহরণস্বরূপ, যদি প্যারেন্ট বিল্ড টার্গেটেvendor_availabletrueসেট করা থাকে, তাহলে আপনি এইcc_aconfig_libraryটার্গেটেওvendor_availabletrueসেট করতে চাইতে পারেন।এই বিল্ড টার্গেটটি যোগ করার পর, আপনার কোড এই লাইব্রেরিটি অ্যাক্সেস করতে পারবে। আপনি
static_libঅথবাshared_libসিনট্যাক্স ব্যবহার করে এই লাইব্রেরিটি অন্তর্ভুক্ত করতে পারেন। মনে রাখবেন, যদি আপনি এই লাইব্রেরিটিকে একটিstatic_libহিসেবে যোগ করতে চান, তাহলেserver_configurable_flagsএর উপর একটিshared_libডিপেন্ডেন্সি যোগ করুন। ধাপ ৩-এ দেখানো হয়েছে কীভাবে কোড দ্বারা জেনারেট করা ফ্ল্যাগ লাইব্রেরিটি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_libsaconfig ফ্ল্যাগগুলির জন্য প্রয়োজনীয় অতিরিক্ত নির্ভরতা অন্তর্ভুক্ত রয়েছে। -
static_libsহলো সেই লাইব্রেরির নাম যা ধাপ ২-এরcc_aconfig_librarynameফিল্ড অনুযায়ী বিল্ড দ্বারা তৈরি হয়। স্ট্যাটিক লাইব্রেরির নামটি দিয়ে একটিcc_libraryএন্ট্রি তৈরি করার মাধ্যমে, আপনি এখন আপনার কোডে 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, ফ্ল্যাগের নামের সাথে মিলিত হয়ে একটি অনন্য কী প্রদান করে। জাভাতে,packagefoo.barহিসেবে সেট করলেfoo.bar.Flagsনামের একটি স্বয়ংক্রিয়ভাবে তৈরি ক্লাস তৈরি হয়। C++-এ, ফ্ল্যাগ অ্যাক্সেসর মেথডগুলোর নাম হবেfoo::bar::" flagname "। একই ডিক্লারেশন ফাইলের ফ্ল্যাগগুলো একই প্যাকেজের অন্তর্ভুক্ত, কিন্তু একাধিক ডিক্লারেশন ফাইল একই প্যাকেজে ফ্ল্যাগ যোগ করতে পারে। containerহলো কোডের এমন একটি সংগ্রহ যা একটি বাইনারি হিসেবে একসাথে বিল্ড ও শিপ করা হয়। বৈধ কন্টেইনারগুলো হলোsystem,vendor,system_ext,product,name.of.apex, এবংname.of.apk।nameএ পতাকার নামটি থাকে, যেখানে শুধুমাত্র ছোট হাতের অক্ষর, আন্ডারস্কোর এবং সংখ্যা ব্যবহৃত হয়।namespaceমধ্যে অবদানের জন্য নেমস্পেস থাকে। আপনার নেমস্পেস নির্ধারণ করতে আপনাকে অবশ্যই নির্ধারিত গুগল রিভিউয়ারের সাথে কাজ করতে হবে। আপনি যদি আপনার নিজস্ব AOSP মিররের স্থিতিশীলতা বজায় রাখতে ফিচার লঞ্চ ফ্ল্যাগ ব্যবহার করেন, তবে আপনি আপনার পছন্দমতো নেমস্পেস ব্যবহার করতে পারেন।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_libraryএন্ট্রি তৈরি করুন:rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }এই স্যাম্পলটি আপনার সোর্স কোড বিল্ড টার্গেট
libexample_demo_flags_rustকোড জেনারেটেড ফ্ল্যাগ লাইব্রেরি অন্তর্ভুক্ত করার অনুমতি দেয়।ফাইলটি সংরক্ষণ করুন এবং এডিটর থেকে বেরিয়ে যান।