مقدمة: مشروعك لا يُبنى؟ لست وحدك
\n\nتخيل: أنت تكتب بلغة Kotlin، كل شيء يسير على ما يرام، ولكن فجأة - بام! - يفشل البناء برسالة غامضة: The minCompileSdk (31) specified in a dependency's AAR metadata. هل هذا الألم مألوف؟ هذا الخطأ هو أحد أكثر "المشاكل" شيوعًا على Stack Overflow (آلاف المشاهدات ومئات التعليقات). يحدث عندما تستخدم مكتبة تتطلب إصدارًا أحدث من compileSdk مما هو مضبوط في مشروعك.
في هذه المقالة، سنشرح كيفية إصلاح خطأ minCompileSdk (31) في بيانات AAR الوصفية لمشاريع Kotlin وJava. ستتعرف على الأسباب، وستحصل على حلول جاهزة، وستفهم كيفية تجنب هذه المشكلة في المستقبل. هيا بنا!
\n\nما هو minCompileSdk ولماذا يكسر البناء؟
\n\nلنبدأ بالنظرية. كل مشروع Android له compileSdk خاص به - إصدار Android SDK الذي يتم التجميع به. يمكن للمكتبات (AAR) أيضًا تحديد الحد الأدنى compileSdk الذي تحتاجه. إذا كان إصدارك أقل - يظهر Gradle خطأ. هذه حماية من عدم التوافق: قد تستخدم المكتبة واجهات برمجة تطبيقات (API) غير موجودة في SDKs القديمة.
الخطأ The minCompileSdk (31) specified in a dependency's AAR metadata يقول حرفيًا: "مرحبًا، هذه المكتبة تتطلب التجميع مع SDK 31 (Android 12) أو أعلى، بينما لديك إصدار أقل!".
السيناريوهات النموذجية للظهور
\n- \n
- أضفت مكتبة جديدة (مثل
androidx.composeأوFirebase) تم تحديثها لتتطلب SDK 31+. \n - تستخدم قالب مشروع قديم مع
compileSdk = 30. \n - نسيت تحديث Gradle وأدوات SDK. \n
كيفية إصلاح خطأ minCompileSdk (31) في AAR: 3 طرق مجربة
\n\nإليك الحلول خطوة بخطوة لـ Kotlin وJava. لاحظ: الكود مكتوب بلغة Kotlin (DSL)، لكن المنطق نفسه لـ Groovy.
\n\nالطريقة 1: رفع compileSdk (موصى به)
\nالطريقة الأصح هي تحديث compileSdk إلى الإصدار المطلوب من قبل المكتبة. عادةً ما يكون 31 (Android 12) أو 33 (Android 13).
الخطوات:
\n- \n
- افتح ملف
build.gradle.kts(مستوى الوحدةapp). \n - ابحث عن قسم
android. \n - غيّر
compileSdkإلى القيمة المطلوبة. \n
android {\n compileSdk = 33 // أو 31، 32 - حسب المتطلبات\n\n defaultConfig {\n minSdk = 21\n targetSdk = 33\n // ...\n }\n}\n\n\nلماذا يعمل هذا؟ أنت ببساطة تلبي متطلبات التبعية. إذا طلبت المكتبة SDK 31، أعطها SDK 31. لا تنسَ أيضًا تثبيت SDK المقابل في Android Studio (SDK Manager → Android 12.0 (API 31)).
\n\nالطريقة 2: خفض إصدار المكتبة
\nإذا كنت لا تريد رفع compileSdk (مثلًا بسبب التوافق مع الأجهزة القديمة)، يمكنك الرجوع بالمكتبة إلى إصدار لا يتطلب SDK 31.
مثال: بدلاً من implementation("androidx.compose:compose-bom:2023.10.01") استخدم إصدارًا أقدم، مثل 2022.10.00.
dependencies {\n // كان (يسبب الخطأ)\n // implementation("androidx.compose:compose-bom:2023.10.01")\n\n // أصبح (إصدار مستقر بدون شرط SDK 31+)\n implementation("androidx.compose:compose-bom:2022.10.00")\n}\n\n\nهذا حل مؤقت، لكنه يساعد إذا كنت عالقًا على SDK قديم. العيب الرئيسي هو أنك تفقد الميزات الجديدة وتصحيحات الأمان.
\n\nالطريقة 3: تجاوز minCompileSdk عبر Gradle (حل غريب)
\nتوجد طريقة ماكرة ولكنها غير موثقة - لتجاوز بيانات AAR الوصفية عبر إعدادات Gradle. هذه الطريقة غير موصى بها للإنتاج، لكنها قد تنقذ الموقف إذا كانت المكتبة لا يتم تحديثها.
\n\nandr