تنسيق ملف 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",
}

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

التعليقات

يمكن أن تحتوي ملفات Android.bp على تعليقات /* */ متعددة الأسطر بأسلوب C و// سطر واحد بأسلوب C++.

عوامل التشغيل

يمكن إلحاق السلاسل وقوائم السلاسل والخرائط باستخدام عامل التشغيل +. يمكن جمع الأعداد الصحيحة باستخدام عامل التشغيل +. يؤدي إلحاق خريطة إلى توليد اتحاد المفاتيح في كلتا الخريطتَين، مع إلحاق قيم أي مفاتيح متوفّرة في كلتا الخريطتَين.

الشروط

لا يدعم تطبيق Sayg الشروط الشرطية في ملفات Android.bp. بدلاً من ذلك، يتم التعامل مع الصعوبات في قواعد الإنشاء التي تتطلّب استخدام الشروط في Go، حيث يمكن استخدام ميزات اللغة العالية المستوى، وتتبُّع التبعيات الضمنية التي تُدخلها الشروط. يتم تحويل معظم الشروط إلى سمة خريطة، حيث يتم اختيار إحدى القيم في الخريطة وإضافتها إلى السمات ذات المستوى الأعلى.

على سبيل المثال، لتفعيل الملفات الخاصة بالتصميمات المعمارية:

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

منسق تنسيق

يتضمّن Soong أداة تنسيق أساسي لملفات Blueprint، مثل gofmt. لإعادة تنسيق جميع ملفات Android.bp في الدليل الحالي بشكل متكرر، شغِّل:

bpfmt -w .

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