compileSdkVersion: الأساسيات، واجهات برمجة التطبيقات الجديدة والإعداد في Gradle

المؤلف: IT Sectr نُشر: 2026-02-08 وقت القراءة: 11 دق

compileSdkVersion — إصدار Android SDK المستخدم عند تجميع التطبيق. يتم تحديد هذا المعامل في build.gradle ويحدد واجهات برمجة التطبيقات المتاحة للمطور في مرحلة البناء: الفئات والطرق والثوابت والواجهات من مستوى API معين. على عكس targetSdkVersion، لا يؤثر compileSdkVersion على سلوك وقت التشغيل — تغييرات السلوك في Android لا تعتمد على هذا المعامل. وفقًا Android Developers، يجب أن يكون compileSdk على الأقل مساويًا لـ targetSdk، ومن الأفضل أن يكون مساويًا لأحدث مستوى API مستقر.

النقاط الرئيسية

  • compileSdkVersion — إصدار SDK للتجميع، يوفر الوصول إلى واجهات برمجة التطبيقات للمستوى المحدد
  • لا يؤثر على سلوك وقت التشغيل — تغييرات السلوك تتحكم بها targetSdkVersion وليس compileSdk
  • compileSdk يجب أن يكون >= targetSdk، يُوصى بالاحتفاظ به عند أحدث مستوى API مستقر
  • رفع compileSdk يتطلب التحقق من واجهات برمجة التطبيقات القديمة وتوافق التبعيات
  • Android SDK يتضمن منصات لكل مستوى API — يتم تنزيلها عبر SDK Manager

ما هو compileSdkVersion في Android؟

compileSdkVersion هو معامل صحيح في build.gradle يحدد إصدار Android SDK الذي سيتم التجميع ضده. عندما تكتب كودًا يستخدم فئات من android.* أو androidx.*، يتحقق المترجم منها مقابل واجهات برمجة التطبيقات المتاحة في إصدار compileSdk المحدد. إذا تم تقديم طريقة في API 36 وكان compileSdk = 35، فلن يتم تجميع الكود. إذا كان compileSdk = 36، فسيتم تجميع الكود، لكن استدعاء تلك الطريقة على جهاز مع API 35 بدون فحص سيؤدي إلى تعطل.

يتم تحميل compileSdkVersion من منصة Android SDK المثبتة عبر SDK Manager في Android Studio. كل مستوى API له منصته الخاصة: android-21، android-29، android-34، android-35، android-36. تحتوي المنصة على android.jar — مجموعة من الفئات والطرق والثوابت التي يستخدمها مترجم Kotlin/Java. إذا لم يتم تثبيت المنصة، سيقوم Gradle بتنزيلها تلقائيًا عبر sdkmanager في أول بناء.

AGP (Android Gradle Plugin) الإصدار 8.7+ يُوصي بتحديد compileSdk كعدد صحيح عبر compileSdk = 36 في Kotlin DSL، بدون البادئة android-. يمكن أيضًا تعيين compileSdk عبر compileSdkVersion 36 في Groovy DSL أو compileSdkPreview للإصدارات الأولية من SDK (المعاينات المطورة). يُستخدم compileSdkPreview لاختبار مستويات API القادمة قبل الإصدار الرسمي.

kotlin
// build.gradle.kts — إعداد compileSdkVersion
android {
    namespace = "com.example.myapp"

    // compileSdk = 36 — أحدث مستوى API مستقر (Android 16)
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 26
        targetSdk = 36
        versionCode = 1
        versionName = "1.0.0"
    }
}

// بديل: compileSdkPreview للإصدارات الأولية
// compileSdkPreview = "Baklava"

في المثال، compileSdk = 36 يوفر الوصول إلى جميع واجهات برمجة التطبيقات لنظام Android 16 (Baklava). يجب تثبيت منصة Android SDK 36 في SDK Manager. يمكن استخدام compileSdkPreview بالاسم "Baklava" لاختبار واجهات برمجة التطبيقات غير المستقرة قبل الإصدار الرسمي للمنصة. بعد الإصدار، يتم استبدال المعاينة بـ compileSdk = 36 المستقر.

compileSdkVersion مقابل targetSdkVersion مقابل minSdkVersion

ثلاثة معاملات لمستوى API في build.gradle — compileSdkVersion و targetSdkVersion و minSdkVersion — غالبًا ما يتم الخلط بينها. كل منها مسؤول عن جانب مختلف من التوافق، ويجب أن تتبع قيمها القاعدة compileSdk >= targetSdk >= minSdk. minSdk هو الحد الأدنى: الأجهزة الأقل منه لن ترى التطبيق. targetSdk هي نقطة الاختبار: يتم تمكين تغييرات السلوك حتى هذا المستوى. compileSdk هو السقف: واجهات برمجة التطبيقات فوق هذا المستوى غير متاحة للمترجم.

قاعدة عملية رئيسية: compileSdk يمكن زيادته دون أي اختبار على الأجهزة. هذه عملية آمنة توفر للمترجم ببساطة إصدارًا جديدًا من android.jar. الخطر الوحيد هو واجهات برمجة التطبيقات القديمة التي قد تتم إزالتها في إصدار المنصة الجديد، ولكن يتم اكتشاف ذلك في وقت التجميع وإصلاحه بسهولة. زيادة targetSdk، من ناحية أخرى، تتطلب دورة كاملة لضمان الجودة.

المعاملنطاق العمليؤثر على وقت التشغيليتطلب اختبارًا
compileSdkVersionالتجميعلالا (فحص القديم فقط)
targetSdkVersionوقت التشغيلنعم — تغييرات السلوكنعم — دورة كاملة لضمان الجودة
minSdkVersionالتثبيتلالا (لكنه يؤثر على التغطية)

لماذا يمكن أن يكون compileSdk أعلى من targetSdk؟ تخيل أنه تم إصدار Android 16 (API 36) مع واجهات برمجة تطبيقات جديدة تريد استخدامها في الكود، لكنك لم تختبر تغييرات السلوك لـ API 36 بعد. تقوم بتعيين compileSdk = 36 (واجهات برمجة التطبيقات الجديدة متاحة)، targetSdk = 35 (تغييرات السلوك لـ API 36 معطلة). سيتم تجميع الكود، وسيستخدم طرقًا جديدة تحت فحوصات SDK_INT، ولن تؤدي تغييرات السلوك لـ API 36 إلى كسر التطبيق لأن targetSdk = 35.

أمثلة على التركيبات الصحيحة

compileSdk = 36، targetSdk = 36، minSdk = 26 — توافق كامل مع أحدث واجهات برمجة التطبيقات وتغييرات السلوك، تغطي 85% من الأجهزة. compileSdk = 36، targetSdk = 34، minSdk = 26 — واجهات برمجة التطبيقات الجديدة متاحة، تغييرات السلوك فقط حتى API 34. compileSdk = 35، targetSdk = 36 — غير صحيح: compileSdk أقل من targetSdk، API 36 غير متاحة بينما تغييرات السلوك لـ 36 نشطة.

كيفية تحديث compileSdkVersion: دليل خطوة بخطوة

تحديث compileSdkVersion هي واحدة من أبسط وأكثر العمليات أمانًا في مشروع Android. على عكس targetSdk، لا تتطلب اختبارًا مكثفًا لتغييرات السلوك. ومع ذلك، هناك بعض الخطوات التي يجب اتباعها لتجنب أخطاء التجميع وتحذيرات الإهمال.

الخطوة 1 — قم بتثبيت المنصة الجديدة عبر SDK Manager في Android Studio: Tools → SDK Manager → SDK Platforms → اختر مستوى API الجديد. إذا لم تقم بتثبيت المنصة، سيحاول Gradle تنزيلها تلقائيًا، لكن هذا قد يبطئ البناء الأول. الخطوة 2 — قم بتغيير compileSdk في build.gradle إلى القيمة الجديدة. الخطوة 3 — قم بالبناء (Build → Make Project) وأصلح أي أخطاء تجميع.

الخطوة 4 — تحقق من واجهات برمجة التطبيقات القديمة. بعد رفع compileSdk، قد يتم وضع علامة @Deprecated على بعض الطرق مع ملاحظة "removed in API X". يقوم Android Studio بتمييزها بخط يتوسطها ويعرض تحذيرًا. استبدل الاستدعاءات القديمة ببدائل جديدة. إذا كان البديل يتطلب مستوى API أعلى من minSdk، أضف فحصًا في وقت التشغيل. الخطوة 5 — تحقق من التبعيات: قد تتطلب بعض المكتبات إصدارًا معينًا من compileSdk. AGP 8.7+ يُوصي بـ compileSdk = 36.

kotlin
// بعد رفع compileSdk: استبدال واجهات برمجة التطبيقات القديمة
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.os.Process
import android.app.ActivityManager

class CompileSdkMigration {

    // قبل: طريقة قديمة (قد تتم إزالتها في API الجديد)
    @Suppress("DEPRECATION")
    fun getMemoryClassOld(context: android.content.Context): Int {
        val am = context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
        return am.memoryClass  // قد تصبح قديمة في API 36
    }

    // بعد: بديل جديد (إذا كان متاحًا)
    fun getMemoryClassNew(context: android.content.Context): Int {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // واجهة برمجة تطبيقات جديدة من compileSdk 36
            val am = context.getSystemService(
                android.content.Context.ACTIVITY_SERVICE
            ) as ActivityManager
            return am.getMemoryClassSafe()  // مثال لواجهة برمجة تطبيقات جديدة
        }
        @Suppress("DEPRECATION")
        return context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
            .memoryClass
    }
}

الفئة CompileSdkMigration تظهر نمط الترحيل الصحيح. قد تتم إزالة الطريقة القديمة memoryClass في API الجديد — سيعرض المترجم خطأ. البديل الجديد getMemoryClassSafe متاح فقط على API 36+، لذلك يتم استدعاؤه تحت فحص SDK_INT >= BAKLAVA. للأجهزة القديمة، يتم استخدام الرجوع مع @Suppress("DEPRECATION").

العمل مع واجهات برمجة التطبيقات الجديدة: الفحوصات الشرطية والرجوع

واجهات برمجة التطبيقات الجديدة المتاحة بفضل رفع compileSdkVersion لا يمكن استدعاؤها مباشرة إذا كان minSdkVersion أقل من ذلك المستوى. بدون فحص في وقت التشغيل، سيتعطل التطبيق مع AbstractMethodError أو NoSuchMethodError أو VerifyError على الأجهزة القديمة. آلية الحماية الرئيسية هي التحقق من Build.VERSION.SDK_INT، واستدعاء API الجديد فقط عندما يكون مستوى API كافيًا، وتوفير رجوع للإصدارات القديمة.

AndroidX يوفر إصدارات خلفية للعديد من واجهات برمجة التطبيقات الجديدة، مما يسمح باستخدام طرق حديثة حتى مع compileSdk منخفض. على سبيل المثال، Activity Result API من androidx.activity:activity-ktx:1.9.3 تعمل على جميع إصدارات Android بدءًا من API 14. NotificationCompat من AndroidX يتيح إشعارات حديثة على واجهات برمجة التطبيقات القديمة. PhotoPicker متاح عبر ActivityResultContracts.PickVisualMedia بدءًا من API 34+.

kotlin
// استدعاء آمن لواجهة برمجة تطبيقات جديدة مع compileSdk 36 و minSdk 26
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.graphics.Color

class NewApiHelper {

    // API 36+: طريقة جديدة للعمل مع اللون
    fun formatColor(colorInt: Int): String {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // واجهة برمجة تطبيقات جديدة من compileSdk 36 — تتطلب API 36+
            return Color.toArgbHexString(colorInt)
        }
        // رجوع: تنسيق يدوي لواجهات برمجة التطبيقات القديمة
        return String.format(
            "#%08X", (0xFFFFFFFF toLong() and colorInt.toLong())
        )
    }

    // AndroidX: لا حاجة لإصدار خلفي — فحص SDK_INT
    fun isEdgeToEdgeAvailable(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.VANILLA_ICE_CREAM
    }
}

// الاستخدام في Activity
class ColorActivity : android.app.Activity() {
    override fun onCreate(savedInstanceState: android.os.Bundle?) {
        super.onCreate(savedInstanceState)
        val helper = NewApiHelper()
        val colorStr = helper.formatColor(0xFF6200EE)
        println("Color: $colorStr")
    }
}

الفئة NewApiHelper توضح الاستدعاء الآمن لواجهة برمجة التطبيقات الجديدة Color.toArgbHexString (API 36 افتراضية) مع تنسيق رجوع للإصدارات القديمة. المبدأ الرئيسي: compileSdk يعطي الوصول لاستدعاء طرق جديدة في الكود، لكن فحص SDK_INT في وقت التشغيل يحمي من الأعطال على الأجهزة القديمة. بدون فحص SDK_INT، تطبيق مع minSdk 26 و compileSdk 36 سيتعطل على Android 8-15.

AGP (Android Gradle Plugin) و compileSdkVersion

Android Gradle Plugin (AGP) هو أداة البناء الرئيسية لتطبيقات Android. كل إصدار من AGP يدعم نطاقًا معينًا من compileSdkVersion. AGP 8.7.x (الذي تم إصداره في 2026) يتطلب compileSdk >= 34 ويُوصي بـ compileSdk = 36. AGP 8.5.x يدعم compileSdk 33-35. إذا كان compileSdk أقل من الحد الأدنى لـ AGP، سيفشل البناء مع الخطأ: "The SDK platform (X) is not supported by this version of the Android Gradle Plugin".

NDK (Native Development Kit) مرتبط أيضًا بـ compileSdkVersion. إذا كان مشروعك يستخدم كودًا أصليًا بلغة C/C++ عبر NDK، فإن compileSdk يحدد إصدار ملفات الرأس والمكتبات. NDK r27+ يُوصي بـ compileSdk 36. للمكتبات ذات ملفات .so، يؤثر compileSdk على الحد الأدنى لمستوى API للكود الأصلي عبر APP_MIN_SDK_VERSION في Application.mk.

إصدار AGPالحد الأدنى compileSdkcompileSdk الموصى بهملاحظات
8.3.x3334دعم Android 14
8.5.x3335Android 15، وضع R8 الكامل
8.7.x3436Android 16، Kotlin 2.1
8.9.x3536فئات R غير متعدية

Gradle (7.6+) و Kotlin (2.0+) يؤثران أيضًا على توافق compileSdk. AGP 8.7+ يتطلب Gradle 8.9+ و Kotlin 2.0+. عند رفع compileSdk، يُوصى بتحديث AGP و Gradle و Kotlin إلى أحدث الإصدارات المستقرة. تحقق من التوافق في جدول توافق Android Gradle Plugin الرسمي.

المشكلات الشائعة عند رفع compileSdk

المشكلات عند رفع compileSdkVersion تنقسم إلى ثلاث فئات: أخطاء التجميع، تحذيرات الإهمال، وعدم التوافق في وقت التشغيل. أخطاء التجميع — تتم إزالة الطرق من واجهة برمجة التطبيقات ولا يتم تجميع الكود. تحذيرات الإهمال — الطرق موسومة بـ @Deprecated، يتم تجميع الكود مع تحذيرات. عدم التوافق في وقت التشغيل — واجهات برمجة التطبيقات الجديدة مطلوبة لوظائف معينة وتسبب أخطاء إذا كان مستوى API على الجهاز غير كافٍ.

المشكلة الأولى الشائعة — "Cannot resolve symbol X". هذا يعني أنه تمت إزالة فئة أو طريقة من واجهة برمجة التطبيقات العامة في إصدار SDK الجديد. الحل: ابحث عن بديل في المنصة الجديدة أو استخدم مكافئًا من AndroidX. على سبيل المثال، فئة AsyncTaskLoader تم إهمالها في API 28 وإزالتها من واجهة برمجة التطبيقات العامة في الإصدارات الأحدث. البدائل تشمل Kotlin Coroutines أو WorkManager.

المشكلة الثانية — تغيير توقيع الطريقة. في إصدار API الجديد، قد تغير الطريقة عدد أو أنواع معاملاتها. يعرض مترجم Kotlin/Java خطأ: "None of the following functions can be called with the arguments supplied". الحل: قم بتحديث استدعاء الطريقة ليتوافق مع التوقيع الجديد أو أضف فحص SDK_INT مع استدعاء التوقيع القديم للأجهزة القديمة.

kotlin
// حل المشكلات عند رفع compileSdk
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.content.pm.PackageManager

class CompileSdkProblemFixer {

    // مشكلة: الطريقة hasSystemFeature غيرت التوقيع في API 36
    fun hasCamera(pm: PackageManager): Boolean {
        return if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // التوقيع الجديد: hasSystemFeature(String, FeatureType)
            pm.hasSystemFeature(
                PackageManager.FEATURE_CAMERA,
                PackageManager.FEATURE_TYPE_BACK
            )
        } else {
            // التوقيع القديم: hasSystemFeature(String)
            @Suppress("DEPRECATION")
            pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
        }
    }

    // مشكلة: فئة محذوفة، استخدم مكافئ AndroidX
    fun loadFragment(manager: androidx.fragment.app.FragmentManager) {
        // بدلاً من android.app.FragmentManager (محذوف) استخدم
        // androidx.fragment.app.FragmentManager
        val fragment = CustomFragment()
        manager.beginTransaction()
            .replace(android.R.id.content, fragment)
            .commit()
    }
}

الفئة CompileSdkProblemFixer تحل المشكلات الشائعة: التوقيع المتغير لـ hasSystemFeature (تغيير افتراضي في API 36) يتم التعامل معه عبر فحص SDK_INT لاستدعاء الإصدار الصحيح من الطريقة. الفئة المحذوفة android.app.FragmentManager يتم استبدالها بمكافئها من AndroidX. للاستدعاءات القديمة حيث لا يوجد بديل، يتم استخدام @Suppress("DEPRECATION") مع تعليق يوضح سبب الاحتفاظ بها.

الأسئلة الشائعة

ما هو compileSdkVersion في Android؟

compileSdkVersion هو إصدار Android SDK المستخدم لتجميع الكود. يحدد واجهات برمجة التطبيقات المتاحة للمطور في وقت البناء. لا يؤثر compileSdk على سلوك وقت التشغيل — تتم إدارة تغييرات السلوك بواسطة targetSdkVersion. يجب أن يكون compileSdk >= targetSdk و >= minSdk. رفع compileSdk يوفر الوصول إلى واجهات برمجة التطبيقات الجديدة ولكنه يتطلب التحقق من الطرق القديمة وتوافق AGP.

كيف يختلف compileSdkVersion عن targetSdkVersion؟

compileSdkVersion يتحكم في التجميع: واجهات برمجة التطبيقات المتاحة للاستدعاء في الكود. targetSdkVersion يتحكم في سلوك وقت التشغيل: تغييرات السلوك التي يتم تطبيقها. compileSdk يمكن أن يكون أعلى من targetSdk — وهذا يسمح باستخدام واجهات برمجة التطبيقات الجديدة في الكود دون تفعيل تغييرات السلوك للإصدار الجديد. compileSdk دائمًا >= targetSdk. minSdk هو أقل معامل، targetSdk هو المتوسط، compileSdk هو الأعلى.

ما compileSdkVersion الذي يجب استخدامه في 2026؟

في 2026، يُوصى باستخدام compileSdk = 36 (Android 16، الاسم الرمزي Baklava). هذا يوفر الوصول إلى جميع واجهات برمجة التطبيقات لأحدث إصدار من Android. للمكتبات و SDK، يمكنك استخدام compileSdk = 35 أو 34 لتجنب إجبار المستهلكين على التحديث. يجب تثبيت compileSdk عبر SDK Manager وأن يكون مدعومًا من إصدار AGP. AGP 8.7+ يتطلب compileSdk >= 34.

ماذا تفعل إذا لم يتم تجميع الكود بعد رفع compileSdk؟

الأخطاء بعد رفع compileSdk عادة ما تكون بسبب واجهات برمجة التطبيقات المحذوفة: فئات أو طرق موسومة بـ @Deprecated وتمت إزالتها. الحل: ابحث عن بديل في SDK الجديد، استخدم مكافئًا من AndroidX، أو أضف @SuppressLint. سبب ثانٍ هو الأذونات الجديدة الإلزامية في البيان. سبب ثالث هو تغييرات توقيع الطرق: تحقق من التوثيق وحدث الاستدعاءات إلى التوقيع الجديد مع فحص SDK_INT.

هل يجب رفع compileSdkVersion مع targetSdk في نفس الوقت؟

compileSdkVersion يمكن رفعه بشكل مستقل عن targetSdk. تكوين compileSdk = 36 مع targetSdk = 34 صحيح: يتم تجميع الكود مع واجهات برمجة التطبيقات الجديدة، لكن تغييرات السلوك لـ API 35-36 لا يتم تفعيلها. رفع compileSdk آمن ولا يتطلب ضمان الجودة. رفع targetSdk يتطلب دورة كاملة من اختبار تغييرات السلوك. يُوصى بالاحتفاظ بـ compileSdk عند أحدث مستوى API مستقر.

الملخص

  • compileSdkVersion — إصدار Android SDK للتجميع، يحدد واجهات برمجة التطبيقات المتاحة، لا يؤثر على وقت التشغيل
  • قاعدة التسلسل الهرمي: compileSdk >= targetSdk >= minSdk; compileSdk يمكن أن يكون أعلى من targetSdk
  • رفع compileSdk عملية آمنة تتطلب فقط التحقق من واجهات برمجة التطبيقات القديمة وتوافق التبعيات
  • واجهات برمجة التطبيقات الجديدة من compileSdk المرفوع تتطلب فحوصات وقت تشغيل لـ Build.VERSION.SDK_INT، وإلا أعطال على الأجهزة القديمة
  • AGP الإصدار 8.7+ يتطلب compileSdk >= 34، يُوصى بـ compileSdk = 36
  • AndroidX يوفر إصدارات خلفية لواجهات برمجة التطبيقات، مما يتيح استخدام طرق حديثة مع أي compileSdk
  • واجهات برمجة التطبيقات القديمة بعد رفع compileSdk: استبدلها ببدائل أو استخدم @Suppress مع الرجوع

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا