Kotlin'i mevcut bir uygulamaya ekleyin

Android Studio, Kotlin için tam destek sunarak mevcut projenize Kotlin dosyaları ekleyebilmenizi ve Java dil kodunu Kotlin'e dönüştürebilmenizi sağlar. Ardından otomatik tamamlama, hata analizi denetimi, yeniden düzenleme, hata ayıklama ve daha fazlası dahil olmak üzere Android Studio'nun mevcut tüm araçlarını Kotlin kodunuzla kullanabilirsiniz.

Yeni bir projeye başlıyorsanız ve Kotlin'i kullanmak istiyorsanız Proje oluşturma bölümünü inceleyin.

Örnekler için Kotlin kod örneklerimize göz atın.

Mevcut bir projeye Kotlin ekleme

Projenize Kotlin eklemek için aşağıdakileri yapın:

  1. Dosya > Yeni'yi tıklayın ve Şekil 1'de gösterildiği gibi çeşitli Android şablonlarından birini (yeni boş bir Parça gibi) seçin. Bu menüde şablonların listesini görmüyorsanız önce Proje penceresini açın ve uygulama modülünüzü seçin.

    yeni boş parça oluştur
    Şekil 1. Parça veya etkinlik gibi mevcut şablonlar arasından seçim yapın.
  2. Görüntülenen sihirbazda, Kaynak Dil olarak Kotlin'i seçin. Şekil 2'de, yeni bir etkinlik oluşturmak istediğiniz durumlar için Yeni Android Etkinliği iletişim kutusu gösterilmektedir.

    kaynak diliniz için Kotlin'i seçmenizi sağlayan iletişim kutusu
    Şekil 2. Kaynak Dili olarak Kotlin'i seçebileceğiniz bir Yeni Android Etkinliği iletişim kutusu.
  3. Sihirbazda devam edin.

Alternatif olarak temel bir Kotlin dosyası oluşturmak için File > New > Kotlin File/Class'ı (Dosya > Yeni > Kotlin Dosyası/Sınıfı) tıklayabilirsiniz. Bu seçeneği görmüyorsanız Proje penceresini açın ve java dizinini seçin. New Kotlin File/Class (Yeni Kotlin Dosyası/Sınıfı) penceresi, dosya adını tanımlamanızı sağlar ve dosya türü için birkaç seçenek sunar: File (Dosya), Class (Sınıf), Interface (Arayüz), Enum Class (Enum Sınıfı) veya Object. Yaptığınız seçim yeni Kotlin dosyasında sizin için oluşturulan temel yapıyı belirler. Sınıf'ı seçerseniz Android Studio, belirtilen ada ve eşleşen bir sınıf tanımına sahip yeni bir Kotlin kaynak dosyası oluşturur. Arayüz'ü seçerseniz dosyada bir arayüz tanımlanır ve bu şekilde devam eder.

Projenize ilk kez doğrudan yeni bir Kotlin sınıfı veya dosyası eklediyseniz (Android şablonlarını kullanmadan) Android Studio, Şekil 3'te gösterildiği gibi projede Kotlin'in yapılandırılmadığına dair bir uyarı görüntüler. Düzenleyicinin sağ üst köşesinde veya sağ alt köşede görüntülenen etkinlik günlüğü uyarısından Yapılandır'ı tıklayarak Kotlin'i yapılandırın.

projeniz için Kotlin'i yapılandırmanızın istendiği iletişim kutusu
Şekil 3. Projeniz için Kotlin yapılandırılmadığında Android Studio bir uyarı iletişim kutusu gösterir.

Şekil 4'te gösterildiği gibi, istendiğinde Kotlin dosyaları içeren tüm modüller için Kotlin'i yapılandırma seçeneğini belirleyin:

Kotlin kodu içeren tüm modüller için Kotlin'i yapılandırmayı seçin
Şekil 4. Kotlin kodu içeren tüm modüller için Kotlin'i yapılandırmayı seçin.

Tamam'ı tıkladığınızda, Android Studio proje sınıf yolunuza Kotlin'i ekler ve Kotlin dosyalarını içeren her modüle Kotlin Android eklentisini uygular. build.gradle dosyalarınız aşağıdaki örneklere benzer şekilde görünecektir:

Modern

// 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")
    }
}

Modern

// 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")
}

Kaynak kuruluş

Varsayılan olarak yeni Kotlin dosyaları src/main/java/ bölümüne kaydedilir. Bu sayede hem Kotlin hem de Java dosyalarını tek bir konumda kolayca görebilirsiniz. Kotlin dosyalarınızı Java dosyalarınızdan ayırmayı tercih ederseniz Kotlin dosyalarını src/main/kotlin/ altına yerleştirebilirsiniz. Bunu yaparsanız aşağıda gösterildiği gibi bu dizini sourceSets yapılandırmanıza da eklemeniz gerekir:

Modern

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

Kotlin

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

Mevcut Java kodunu Kotlin koduna dönüştürün

Java kodunu Kotlin'e dönüştürmek için Android Studio'da Java dosyasını açın ve Kod > Java Dosyasını Kotlin Dosyasına Dönüştür'ü seçin. Alternatif olarak yeni bir Kotlin dosyası (Dosya > Yeni > Kotlin Dosyası/Sınıfı) oluşturup Java kodunuzu bu dosyaya yapıştırabilirsiniz. Android Studio, Şekil 5'te gösterildiği gibi bir istem görüntüler ve kodunuzu Kotlin'e dönüştürmeyi önerir. Dönüştürmek için Evet'i tıklayın. İsterseniz, Bir dahaki sefere bu iletişim kutusunu gösterme'yi işaretleyebilirsiniz. Bu seçenek, gelecekteki dönüşümleri otomatik hale getirir.

Kotlin kodu içeren tüm modüller için Kotlin'i yapılandırmayı seçin
Şekil 5. Android Studio, Java kodunu Kotlin'e dönüştürebilir.

Kod dönüştürme ve boş değer atanabilirliği

Android Studio'nun dönüştürme işlemi, derlenen ve çalışan, işlevsel olarak eş değer Kotlin kodu üretir. Ancak, dönüştürülen kod için ek optimizasyonlar yapmanız gerekebilir. Örneğin, dönüştürülen kodun, boş değerli türleri işleme şeklini hassaslaştırmak isteyebilirsiniz.

Android'de, bağlı oldukları parça veya etkinlik uygun yaşam döngüsü durumuna ulaşana kadar View nesnelerinin ve diğer bileşenlerin başlatılmasını geciktirmek yaygın bir durumdur. Örneğin, aşağıdaki snippet'te gösterildiği gibi parçalarınızdan birinde bir düğmeye referans vermiş olabilirsiniz:

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) {
                ...
            }
        });
    }
}

Düğme değişkeni null (null) değerine sahip olsa da, bu örnekte kullanıldığında pratik amaçlar açısından hiçbir zaman null olmamalıdır. Bununla birlikte, aşağıda gösterildiği gibi, değerin değeri oluşturma aşamasında atanmadığından, oluşturulan Kotlin kodu Button öğesini null özellikli bir tür olarak değerlendirir ve aşağıda gösterildiği gibi bir tıklama işleyici eklerken düğmenin sarmalamasını açmak için null olmayan onay operatörünü kullanır:

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 { }
    }
}

Bu dönüştürme işlemi, bu durumda lateinit kullanmaktan daha az ideal olacaktır. Çünkü düğme referansının sarmalamasını boş olmayan bir onay veya güvenli çağrı operatörüyle açmak zorunda kalırsınız.

null özelliğinin uygulamanızın kullanım alanına göre geçerli bir değişken ataması olduğu diğer durumlarda, sonlandıran elvis operatörü (?:) operatörüne sahip bir güvenli arama (?.) operatörü kullanmak, null özellikli nesnenin sarmalamasını güvenli bir şekilde açmak veya makul null olmayan bir varsayılan değere zorlamak için daha uygun bir yol olabilir. Android Studio, dönüşüm sürecinde böyle bir tespitte bulunabilmek için yeterli bilgiye sahip değildir. Varsayılan olarak null olmayan onaylama geçerli olsa da, dönüştürülmüş kodu takip etmeniz ve gerektiğinde düzenlemeniz gerekir.

Daha fazla bilgi

Projenizde hem Kotlin hem de Java kodu kullanma hakkında daha fazla bilgi için Kotlin'den Java kodu çağırma bölümüne bakın.

Kurumsal senaryolarda Kotlin'i kullanma hakkında daha fazla bilgi edinmek için Büyük ekipler için Kotlin'i benimseme bölümüne bakın.

Mevcut Android API'lerinde deyimsel Kotlin sarmalayıcıları hakkında bilgi edinmek için Android KTX bölümüne bakın.