تنسيق ملف 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 الملفات المصدر المستخدَمة لإنشاء الوحدة، على هيئة قائمة بسلاسل. يمكنك الإشارة إلى نتائج وحدات أخرى تُنشئ ملفات مصدر، مثل genrule أو filegroup، باستخدام بنية ":<module-name>" المرجعية للوحدة.

للحصول على قائمة بأنواع الوحدات الصالحة وخصائصها، اطّلِع على مرجع وحدات Soong.

الأنواع

تكون المتغيّرات والسمات ذات أنواع محدّدة بدقة، مع اعتماد المتغيّرات ديناميكيًا على القيمة المحدّدة الأولى، ويتم ضبط السمات بشكل ثابت حسب نوع الوحدة. الأنواع المتوافقة هي:

  • القيم المنطقية (true أو false)
  • الأعداد الصحيحة (int)
  • السلاسل ("string")
  • قوائم السلاسل (["string1", "string2"])
  • خرائط Google ({key1: "value1", key2: ["value2"]})

يمكن أن تحتوي الخرائط على قيم من أي نوع، بما في ذلك الخرائط المتداخلة. قد تحتوي القوائم والخرائط على علامات فاصلة ختامية بعد القيمة الأخيرة.

النقاط

يمكن أن تأخذ السمات التي تأخذ قائمة بالملفات، مثل srcs، أيضًا نماذج عامة. يمكن أن تحتوي أنماط النطاقات الشاملة على حرف البدل العادي في نظام التشغيل UNIX‏ *، على سبيل المثال *.java. يمكن أن تحتوي أنماط النطاقات الشاملة أيضًا على حرف بدل ** واحد كعنصر مسار، والذي يتطابق مع عنصر مسار واحد أو أكثر. على سبيل المثال، يتطابق الرمز 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",
}

يتمّ تحديد نطاق المتغيّرات على أنّه الجزء المتبقّي من الملف الذي تمّ الإعلان عنه فيه، بالإضافة إلى أيّ ملفات "مخطّط عمل" فرعية. المتغيّرات غير قابلة للتغيير باستثناء واحد: يمكن إضافتها إلى عملية تخصيص +=، ولكن قبل أن تتم الإشارة إليها فقط.

التعليقات

يمكن أن تحتوي ملفات 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 .

يتضمّن التنسيق الأساسي مسافات بادئة بمسافة أربع، وسطورًا جديدة بعد كل عنصر في قائمة متعددة العناصر، وفاصلًا ختاميًا في القوائم والخرائط.