یک پرچم aconfig را اعلام کنید

می‌توانید از پرچم‌های aconfig در کدهای Java، C، C++ و Rust استفاده کنید. سیستم ساخت AOSP ابزاری به نام aconfig را راه‌اندازی می‌کند که برای ایجاد یک کتابخانه خاص زبان از روش‌هایی که می‌توانید برای دسترسی به مقدار هر پرچم استفاده کنید، استفاده می‌شود. قبل از اینکه بتوانید کتابخانه را ایجاد کنید، باید پرچم ها را اعلام کرده و به ساخت اضافه کنید.

یک پرچم aconfig برای جاوا اعلام کنید

برای اعلام یک پرچم aconfig برای جاوا:

  1. در فهرستی که کد جدید وجود دارد، یک فایل با پسوند .aconfig ایجاد کنید، به عنوان مثال my_new_aconfig_flag_declarations.aconfig . یک فایل aconfig یک فایل پروتو متنی است که از یک طرح استاندارد پیروی می کند.

  2. یک اعلان پرچم مشابه موارد زیر اضافه کنید:

    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> استفاده کنید.

  3. فایل را ذخیره کرده و از ویرایشگر خارج شوید.

بیلد را تنظیم کنید

پس از اینکه پرچم خود را اعلام کردید، بیلد را طوری تنظیم کنید که بتواند کد کتابخانه مورد استفاده برای دسترسی به مقدار پرچم را ایجاد کند.

  1. در فایل ساخت 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 است که در آن پرچم اعلام شده است.
  2. فایل را ذخیره کرده و از ویرایشگر خارج شوید.

یک پرچم aconfig برای C و C++ اعلام کنید

برای اعلام یک پرچم aconfig برای C و C++:

  1. در فهرستی که کد جدید وجود دارد، یک فایل با پسوند .aconfig ایجاد کنید، به عنوان مثال my_new_aconfig_flag_declarations.aconfig . یک فایل aconfig یک فایل پروتو متنی است که از یک طرح استاندارد پیروی می کند.

  2. یک اعلان پرچم مشابه موارد زیر اضافه کنید:

    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> استفاده کنید.

  3. فایل را ذخیره کرده و از ویرایشگر خارج شوید.

ساخت را تنظیم کنید

پس از اینکه پرچم خود را اعلام کردید، بیلد را طوری تنظیم کنید که بتواند کد کتابخانه مورد استفاده برای دسترسی به مقدار پرچم را ایجاد کند.

  1. در فایل ساخت 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 است که در آن پرچم اعلام شده است.
  2. در همان فایل، یک هدف 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 نشان می دهد.

  3. هدفی ایجاد کنید که از پرچم های 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:

  1. در فهرستی که کد جدید وجود دارد، یک فایل با پسوند .aconfig ایجاد کنید، به عنوان مثال my_new_aconfig_flag_declarations.aconfig . یک فایل aconfig یک فایل پروتو متنی است که از یک طرح استاندارد پیروی می کند.

  2. یک اعلان پرچم مشابه موارد زیر اضافه کنید:

    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> استفاده کنید.

  3. فایل را ذخیره کرده و از ویرایشگر خارج شوید.

ساخت را تنظیم کنید

پس از اینکه پرچم خود را اعلام کردید، بیلد را طوری تنظیم کنید که بتواند کد کتابخانه مورد استفاده برای دسترسی به مقدار پرچم را ایجاد کند.

  1. در فایل ساخت 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 است که در آن پرچم اعلام شده است.
  2. یک هدف 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 وابسته باشد.

  3. در همان فایل، یک ورودی rust_library شبیه به زیر ایجاد کنید:

    rust_library {
      name: "libexample_lib",
      rustlibs: [
          "libaconfig_demo_flags_rust",
      ]
    }
    

    این نمونه به اهداف ساخت کد منبع شما اجازه می دهد libexample_demo_flags_rust شامل کتابخانه پرچم تولید شده کد شود.

  4. فایل را ذخیره کرده و از ویرایشگر خارج شوید.