ويوفّر "استوديو Android" دعمًا كاملاً للغة Kotlin، ما يتيح لك إضافة. ملفات Kotlin إلى مشروعك الحالي وتحويل رمز لغة Java إلى Kotlin. يمكنك بعد ذلك استخدام جميع أدوات "استوديو Android" الحالية باستخدام رمز Kotlin، بما في ذلك الإكمال التلقائي والتحقق من أداة Lint وإعادة ضبط الإعدادات وتصحيح الأخطاء والمزيد.
فإذا كنت تبدأ مشروعًا جديدًا وتريد استخدام Kotlin، فاطلع على أنشئ مشروعًا.
للحصول على عينات، يمكنك مراجعة عيّنات التعليمات البرمجية من Kotlin:
إضافة لغة Kotlin إلى مشروع حالي
لإضافة لغة Kotlin إلى المشروع، يمكنك اتّباع الخطوات التالية:
انقر على ملف > جديد، واختَر أحد نماذج Android المختلفة، مثل على أنّه جزء فارغ جديد، كما هو موضّح في الشكل 1. إذا لم تظهر لك القائمة من النماذج في هذه القائمة، افتح أولاً نافذة المشروع، واختر التطبيق.
في المعالج الذي يظهر، اختَر Kotlin لـ اللغة المصدر. يعرض الشكل 2 مربع حوار نشاط Android الجديد عندما تريد إنشاء نشاط جديد.
تابع تنفيذ خطوات المعالج.
ويمكنك بدلاً من ذلك النقر على ملف > جديد > ملف/فئة Kotlin لإنشاء ملف Kotlin الأساسي. إذا لم يظهر لك هذا الخيار، افتح نافذة المشروع اختَر دليل java. تتيح لك النافذة ملف/فئة Kotlin الجديدة وتحدّد اسم الملف ويوفّر خيارات متعدّدة لنوع الملف: ملف الفئة أو الواجهة أو فئة التعداد أو الكائن. اختيارك عملية التشغيل الأساسية التي تم إنشاؤها لك في ملف Kotlin الجديد. إذا كنت اختيار الفئة، سيُنشئ "استوديو Android" ملف مصدر جديدًا بلغة Kotlin باستخدام وتعريف فئة مطابق. إذا اخترت الواجهة، فهي واجهة في الملف، وهكذا.
إذا كانت هذه هي المرة الأولى التي تضيف فيها فئة أو ملفًا جديدًا بلغة Kotlin إلى مباشرةً (وليس باستخدام نماذج Android)، ويعرض "استوديو Android" تحذير من عدم تهيئة لغة Kotlin في المشروع، كما هو موضح في الشكل 3. يمكنك إعداد Kotlin من خلال النقر على إعداد إما في الزاوية العلوية اليسرى من المحرِّر أو في تنبيه سجلّ الأحداث الذي ينبثق في أسفل يسار الصفحة.
حدِّد خيار تهيئة لغة Kotlin لجميع الوحدات التي تحتوي على لغة Kotlin. الملفات عندما يُطلب منك ذلك، كما هو موضّح في الشكل 4:
بعد النقر على حسنًا، يضيف استوديو 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 متساوي من الناحية الوظيفية من خلال عملية التحويل في "استوديو 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: