إضافة Kotlin إلى تطبيق حالي

ويوفّر "استوديو Android" دعمًا كاملاً للغة Kotlin، ما يتيح لك إضافة. ملفات Kotlin إلى مشروعك الحالي وتحويل رمز لغة Java إلى Kotlin. يمكنك بعد ذلك استخدام جميع أدوات "استوديو Android" الحالية باستخدام رمز Kotlin، بما في ذلك الإكمال التلقائي والتحقق من أداة Lint وإعادة ضبط الإعدادات وتصحيح الأخطاء والمزيد.

فإذا كنت تبدأ مشروعًا جديدًا وتريد استخدام Kotlin، فاطلع على أنشئ مشروعًا.

للحصول على عينات، يمكنك مراجعة عيّنات التعليمات البرمجية من Kotlin:

إضافة لغة Kotlin إلى مشروع حالي

لإضافة لغة Kotlin إلى المشروع، يمكنك اتّباع الخطوات التالية:

  1. انقر على ملف > جديد، واختَر أحد نماذج Android المختلفة، مثل على أنّه جزء فارغ جديد، كما هو موضّح في الشكل 1. إذا لم تظهر لك القائمة من النماذج في هذه القائمة، افتح أولاً نافذة المشروع، واختر التطبيق.

    إنشاء جزء فارغ جديد
    الشكل 1. الاختيار من النماذج المتاحة، مثل تقسيم أو النشاط
  2. في المعالج الذي يظهر، اختَر Kotlin لـ اللغة المصدر. يعرض الشكل 2 مربع حوار نشاط Android الجديد عندما تريد إنشاء نشاط جديد.

    مربع حوار يتيح لك اختيار لغة Kotlin للغة المصدر
    الشكل 2. مربع حوار نشاط Android الجديد حيث يمكنك اختَر Kotlin باعتبارها لغة المصدر.
  3. تابع تنفيذ خطوات المعالج.

ويمكنك بدلاً من ذلك النقر على ملف > جديد > ملف/فئة Kotlin لإنشاء ملف Kotlin الأساسي. إذا لم يظهر لك هذا الخيار، افتح نافذة المشروع اختَر دليل java. تتيح لك النافذة ملف/فئة Kotlin الجديدة وتحدّد اسم الملف ويوفّر خيارات متعدّدة لنوع الملف: ملف الفئة أو الواجهة أو فئة التعداد أو الكائن. اختيارك عملية التشغيل الأساسية التي تم إنشاؤها لك في ملف Kotlin الجديد. إذا كنت اختيار الفئة، سيُنشئ "استوديو Android" ملف مصدر جديدًا بلغة Kotlin باستخدام وتعريف فئة مطابق. إذا اخترت الواجهة، فهي واجهة في الملف، وهكذا.

إذا كانت هذه هي المرة الأولى التي تضيف فيها فئة أو ملفًا جديدًا بلغة Kotlin إلى مباشرةً (وليس باستخدام نماذج Android)، ويعرض "استوديو Android" تحذير من عدم تهيئة لغة Kotlin في المشروع، كما هو موضح في الشكل 3. يمكنك إعداد Kotlin من خلال النقر على إعداد إما في الزاوية العلوية اليسرى من المحرِّر أو في تنبيه سجلّ الأحداث الذي ينبثق في أسفل يسار الصفحة.

الذي يطالبك بتهيئة لغة Kotlin
      المشروع
الشكل 3. يعرض "استوديو Android" مربّع حوار تحذير عند استخدام لغة Kotlin لم يتم إعداده لمشروعك.

حدِّد خيار تهيئة لغة Kotlin لجميع الوحدات التي تحتوي على لغة Kotlin. الملفات عندما يُطلب منك ذلك، كما هو موضّح في الشكل 4:

اختيار تهيئة Kotlin لجميع الوحدات التي تحتوي على رمز Kotlin.
الشكل 4. يمكنك اختيار تهيئة لغة Kotlin لجميع الوحدات التي تحتوي على رمز Kotlin.

بعد النقر على حسنًا، يضيف استوديو Android لغة Kotlin إلى مسار فئة المشروع. تطبق مكون Kotlin Android الإضافي على كل وحدة تحتوي على ملفات Kotlin. يجب أن تبدو ملفات build.gradle مشابهة للأمثلة أدناه:

Groovy

// Project build.gradle file.
buildscript {
    ext.kotlin_version = '1.4.10'
    ...
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

Kotlin

// Project build.gradle.kts file.
buildscript {
    extra["kotlin_version"] = "1.4.10"
    ...
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
    }
}

Groovy

// Inside each module using kotlin
plugins {
    ...
    id 'kotlin-android'
}

...

dependencies {
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

Kotlin

// Inside each module using kotlin
plugins {
    ...
    kotlin("android")
}

...

val kotlin_version: String by rootProject.extra

dependencies {
    implementation("androidx.core:core-ktx:1.3.2")
    implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
}

المؤسسة المصدر

يتم تلقائيًا حفظ ملفات Kotlin الجديدة في src/main/java/، ما يسهّل عملية لرؤية ملفات Kotlin وJava في مكان واحد. إذا كنت تفضل فصل ملفات Kotlin من ملفات Java، يمكنك وضع ملفات Kotlin ضمن src/main/kotlin/ بدلاً من ذلك. إذا قمت بذلك، فأنت بحاجة أيضًا إلى تضمين هذا الدليل في sourceSets على النحو الموضَّح أدناه:

Groovy

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            java.srcDir("src/main/kotlin")
        }
    }
}

تحويل رمز Java الحالي إلى رمز Kotlin

لتحويل رمز Java إلى لغة Kotlin، افتح ملف Java في "استوديو Android" واختَر الرمز > يمكنك تحويل ملف Java إلى ملف Kotlin. ويمكنك بدلاً من ذلك إنشاء لغة Kotlin جديدة. (ملف > جديد > ملف/فئة Kotlin)، ثم الصق رمز Java في لهذا الملف. يعرض "استوديو Android" بعد ذلك طلبًا ويعرض عليك تحويل الرمز إلى Kotlin، كما هو موضح في الشكل 5. انقر على نعم لإجراء الإحالة الناجحة. ويمكنك اختياريًا وضع علامة في المربّع بجانب عدم عرض مربّع الحوار هذا في المرة القادمة، ما يؤدي إلى إحالات ناجحة مستقبلية تلقائيًا.

اختيار تهيئة Kotlin لجميع الوحدات التي تحتوي على رمز Kotlin.
الشكل 5. بإمكان "استوديو Android" تحويل رمز Java إلى لغة Kotlin.

تحويل الرمز وقابلية تنفيذه

إنشاء رمز Kotlin متساوي من الناحية الوظيفية من خلال عملية التحويل في "استوديو Android" التي تجمع وتدير. ومع ذلك، من المحتمل أنك بحاجة إلى إجراء تحسينات على الرمز المحوَّل. على سبيل المثال، قد ترغب في تحسين طريقة تعالج التعليمة البرمجية المحوَّلة الأنواع القابلة للقيم الفارغة.

في نظام Android، من الشائع حدوث تأخير في إعداد عناصر View وغيرها من العناصر إلى أن يصل الجزء أو النشاط المرتبط به إلى حالة دورة الحياة المناسبة. على سبيل المثال، قد يكون لديك مرجع إلى في أحد الأجزاء، كما هو موضح في المقتطف التالي:

public class JavaFragment extends Fragment {

    // Null until onCreateView.
    private Button button;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_content, container,false);

        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button);

        return root;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // Not null at this point of time when onViewCreated runs
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ...
            }
        });
    }
}

وعلى الرغم من أن متغير الزر قابل للقيم الفارغة، إلا أنه لجميع الأغراض العملية لا ينبغي أن تكون فارغة أبدًا عند استخدامها في هذا المثال. ومع ذلك، نظرًا لأن قيمتها ليست ما تم تحديده في مرحلة الإنشاء، يتعامل رمز Kotlin الذي تم إنشاؤه مع Button كنوع قابل للقيم الفارغة ويستخدم عامل تأكيد غير فارغ لإلغاء ربط الزر عند إضافة أداة معالجة نقرة، كما هو موضح أدناه:

class JavaFragment : Fragment() {

    // Null until onCreateView.
    private var button: Button? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?): View? {
        ...
        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button)
        ...
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // Not null at the point of time when onViewCreated fires 
        // but force unwrapped nonetheless
        button!!.setOnClickListener { }
    }
}

هذه الإحالة الناجحة أقل مثالية من استخدام lateinit في هذه الحالة، لأنك يتم فرض إلغاء ربط مرجع الزر بتأكيد غير فارغ أو مكالمة آمنة في كل مكان يتم الوصول إليه فيه.

وفي حالات أخرى، يكون null تعيين متغير صالح استنادًا إلى حالة استخدام التطبيق، باستخدام مشغل اتصال آمن (؟.) مع إنهاء elvis (?:) طريقة أكثر ملاءمة لإلغاء ربط كائن قابل للقيم الفارغة أو الإجبار على قيمة افتراضية معقولة غير فارغة. استوديو Android معلومات كافية لاتخاذ هذا القرار خلال عملية التحويل. وفي حين أن الإعداد الافتراضي هو التأكيد على غير خالٍ، يجب عليك فتابع وقم بتعديل الرمز المُحوَّل حسب الحاجة.

مزيد من المعلومات

لمزيد من المعلومات حول استخدام كود كل من Kotlin وJava في المشروع، راجع استدعاء رمز Java من Kotlin

لمزيد من المعلومات حول استخدام Kotlin في سيناريوهات المؤسسات، يُرجى مراجعة استخدام لغة Kotlin في الفِرق الكبيرة:

للحصول على معلومات حول برامج تضمين Kotlin الغامضة لواجهات برمجة تطبيقات Android الحالية، يُرجى الاطّلاع على Android KTX: