تنسيق ملف 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"] )
  • الخرائط ( {key1: "value1", key2: ["value2"]} )

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

الكرات

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

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