فرمت فایل Android.bp

از نظر طراحی، فایل های Android.bp ساده هستند. آنها شامل شرطی یا دستورات جریان کنترلی نیستند. تمام پیچیدگی ها توسط منطق ساخت نوشته شده در Go مدیریت می شود. در صورت امکان، نحو و معنای فایل‌های Android.bp مشابه فایل‌های Bazel BUILD است.

ماژول ها

یک ماژول در یک فایل Android.bp با یک نوع ماژول و به دنبال آن مجموعه ای از ویژگی ها به name: "value", قالب:

cc_binary {
    name: "gzip",
    srcs: ["src/test/minigzip.c"],
    shared_libs: ["libz"],
    stl: "none",
}

هر ماژول باید یک ویژگی name داشته باشد، و مقدار باید در همه فایل‌های Android.bp منحصربه‌فرد باشد، به جز مقادیر ویژگی name در فضاهای نام و ماژول‌های از پیش ساخته شده، که ممکن است تکرار شوند.

ویژگی srcs فایل های منبع مورد استفاده برای ساخت ماژول را به عنوان لیستی از رشته ها مشخص می کند. می توانید با استفاده از نحو مرجع ماژول ":<module-name>" به خروجی ماژول های دیگری که فایل های منبع تولید می کنند، مانند genrule یا filegroup ارجاع دهید.

برای لیستی از انواع ماژول های معتبر و ویژگی های آنها، به مرجع ماژول های Soong مراجعه کنید.

انواع

متغیرها و ویژگی ها به شدت تایپ می شوند، با متغیرها به صورت پویا بر اساس اولین انتساب، و ویژگی ها به صورت ایستا توسط نوع ماژول تنظیم می شوند. انواع پشتیبانی شده عبارتند از:

  • بولی ها ( true یا false )
  • اعداد صحیح ( int )
  • رشته ها ( "string" )
  • لیست رشته ها ( ["string1", "string2"]
  • Maps ( {key1: "value1", key2: ["value2"]} )

نقشه ها ممکن است حاوی مقادیری از هر نوع باشند، از جمله نقشه های تو در تو. لیست ها و نقشه ها ممکن است دارای کاماهای انتهایی بعد از آخرین مقدار باشند.

گلوب

ویژگی هایی که لیستی از فایل ها را می گیرند، مانند srcs ، می توانند الگوهای glob را نیز بگیرند. الگوهای Glob می توانند حاوی علامت عام یونیکس معمولی * باشند، برای مثال *.java . الگوهای Glob همچنین می توانند شامل یک علامت عام ** به عنوان عنصر مسیر باشند که با صفر یا چند عنصر مسیر مطابقت دارد. برای مثال، java/**/*.java با هر دو الگوی java/Main.java و java/com/android/Main.java مطابقت دارد.

متغیرها

یک فایل Android.bp ممکن است دارای تخصیص متغیرهای سطح بالا باشد:

gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
    name: "gzip",
    srcs: gzip_srcs,
    shared_libs: ["libz"],
    stl: "none",
}

متغیرها به باقیمانده فایلی که در آن اعلان شده اند و همچنین هر فایل Blueprint فرزندی محدود می شوند. متغیرها با یک استثنا تغییر ناپذیر هستند: آنها را می توان با یک تخصیص += به آنها اضافه کرد، اما فقط قبل از اینکه به آنها ارجاع داده شود.

نظرات

فایل‌های Android.bp می‌توانند شامل نظرات چندخطی /* */ به سبک C و تک خطی // به سبک C++ باشند.

اپراتورها

رشته ها، لیست رشته ها و نقشه ها را می توان با استفاده از عملگر + اضافه کرد. اعداد صحیح را می توان با استفاده از عملگر + خلاصه کرد. ضمیمه یک نقشه، اتحاد کلیدها را در هر دو نقشه ایجاد می کند، و مقادیر هر کلیدی را که در هر دو نقشه وجود دارد، اضافه می کند.

شرایط

Soong از شرطی ها در فایل های Android.bp پشتیبانی نمی کند. در عوض، پیچیدگی در قوانین ساخت که به شرطی‌ها نیاز دارند، در Go، جایی که می‌توان از ویژگی‌های زبان سطح بالا استفاده کرد، و وابستگی‌های ضمنی معرفی‌شده توسط شرطی‌ها را می‌توان ردیابی کرد. اکثر شرطی ها به یک ویژگی نقشه تبدیل می شوند، جایی که یکی از مقادیر موجود در نقشه انتخاب شده و به ویژگی های سطح بالا اضافه می شود.

به عنوان مثال، برای پشتیبانی از فایل های خاص معماری:

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

قالب ساز

Soong شامل یک قالب‌کننده متعارف برای فایل‌های Blueprint، مشابه gofmt است. برای قالب‌بندی مجدد همه فایل‌های Android.bp در فهرست فعلی، اجرا کنید:

bpfmt -w .

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