Dodawanie Kotlin do istniejącej aplikacji

Android Studio obsługuje Kotlin i umożliwia dodawanie Kotlin do istniejącego projektu i przekonwertuj kod języka Java na Kotlin. Teraz możesz używać wszystkich narzędzi dostępnych w Android Studio przy użyciu swojego kodu Kotlin, w tym autouzupełnianie, sprawdzanie lint, refaktoryzację, debugowanie i inne.

Jeśli rozpoczynasz nowy projekt i chcesz użyć Kotlina, zapoznaj się z artykułem Utwórz projekt.

Przykłady znajdziesz w naszych Przykładowy kod Kotlin.

Dodaj Kotlin do istniejącego projektu

Aby dodać Kotlin do projektu, wykonaj te czynności:

  1. Kliknij Plik > Nowy i wybierz jeden z różnych szablonów na Androida, taki jak jako nowy pusty fragment Fragment, jak widać na ilustracji 1. Jeśli nie widzisz listy szablonów w tym menu, najpierw otwórz okno Projekt i wybierz z modułu aplikacji.

    utwórz nowy pusty fragment
    Rysunek 1. Wybierz jeden z dostępnych szablonów, np. fragment lub aktywność.
    .
  2. W wyświetlonym kreatorze wybierz Kotlin jako Język źródłowy. Rysunek 2 pokazuje okno Nowa aktywność w Androidzie, w którym utworzyć nową aktywność.

    okno dialogowe umożliwiające wybranie Kotlina jako języka źródłowego
    Rysunek 2. Okno Nowa aktywność na Androidzie, w którym jako Język źródłowy wybierz Kotlin.
  3. Kontynuuj korzystanie z kreatora.

Możesz też kliknąć Plik > Nowe > Kotlin File/Class, aby utworzyć podstawowy plik Kotlin. Jeśli nie widzisz tej opcji, otwórz okno Projekt i wybierz katalog java. Okno Nowy plik/klasa Kotlin umożliwia podać nazwę pliku i wybrać jego typ: Plik, Class, Interface, Enum Class lub Object. Wybór, którego dokonasz określa podstawowe rusztowanie utworzone w nowym pliku Kotlin. Jeśli wybierz Class, Android Studio utworzy nowy plik źródłowy Kotlin z podanymi nazwa i definicja klasy pasującej. Jeśli wybierzesz Interfejs, jest zadeklarowana w pliku i tak dalej.

Jeśli po raz pierwszy dodajesz nową klasę lub plik Kotlin do bezpośrednio do projektu (bez szablonów dla Androida), Android Studio wyświetla Ostrzeżenie o tym, że usługa Kotlin nie jest skonfigurowana w projekcie, jak pokazano na rys. 3. Aby skonfigurować Kotlin, kliknij Skonfiguruj w prawym górnym rogu w edytorze lub w alercie dziennika zdarzeń, który pojawi się w prawym dolnym rogu.

z ostrzeżeniem, że należy skonfigurować Kotlin
      projekt
Rysunek 3. Android Studio wyświetla okno z ostrzeżeniem, gdy Kotlin nie zostało skonfigurowane w projekcie.

Wybierz opcję skonfigurowania Kotlin dla wszystkich modułów zawierających Kotlin , jak pokazano na rysunku 4:

skonfigurować Kotlin dla wszystkich modułów zawierających kod Kotlin
Rysunek 4. Wybierz, aby skonfigurować Kotlin dla wszystkich modułów zawierających Kod Kotlina.

Gdy klikniesz OK, Android Studio doda Kotlin do ścieżki zajęć projektu. stosuje wtyczkę Kotlin na Androida do każdego modułu zawierającego pliki Kotlin. Twoje pliki build.gradle powinny wyglądać podobnie do tych poniżej:

Odlotowe

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

Odlotowe

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

Organizacja źródłowa

Domyślnie nowe pliki Kotlin są zapisywane w usłudze src/main/java/, co ułatwia aby zobaczyć zarówno pliki Kotlin, jak i Java w jednym miejscu. Jeśli wolisz oddzielić plików Kotlin z plików Java, pliki Kotlin możesz umieścić w src/main/kotlin/. Jeśli to zrobisz, musisz też dodać atrybut w katalogu sourceSets Jak poniżej:

Odlotowe

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

Kotlin

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

Konwertuj istniejący kod w Javie na kod Kotlin

Aby przekonwertować kod Java na Kotlin, otwórz plik Java w Android Studio i wybierz Kod > Przekonwertuj plik Java na plik Kotlin. Możesz też utworzyć nowy projekt Kotlin (File > New > Kotlin File/Class (Plik > Nowy > Plik/klasa Kotlin))), a następnie wklej kod w języku Java ten plik. Android Studio wyświetli prośbę i zaproponuje konwersję kodu jak widać na ilustracji 5. Kliknij Tak, aby przekonwertować dane. Opcjonalnie możesz zaznacz opcję Nie pokazuj tego okna następnym razem, która spowoduje przyszłe konwersje. automatyczne.

skonfigurować Kotlin dla wszystkich modułów zawierających kod Kotlin
Rysunek 5. Android Studio umożliwia konwersję kodu Java na Kotlin.

Konwersja kodu i dopuszczalność wartości null

Proces konwersji w Android Studio tworzy odpowiedni kod Kotlin który kompiluje i uruchamia. Prawdopodobnie jednak trzeba będzie w ten sposób do przekonwertowanego kodu. Możesz na przykład określić, jak przekonwertowany kod obsługuje typy dopuszczone do wartości null.

W Androidzie często opóźnia się inicjalizację obiektów View i innych dopóki fragment lub działanie, do których są dołączone, nie osiągnie odpowiedni stan cyklu życia. Możesz na przykład mieć odniesienie do w jednym z fragmentów, jak widać w tym fragmencie:

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

Zmienna przycisku ma wartość null, jednak ze względów praktycznych W tym przykładzie nie powinna mieć ona wartości null. Ponieważ jednak jego wartość nie jest jest przypisany w punkcie budowy, wygenerowany kod Kotlin traktuje jako Button jako typ do wartości null i do wyodrębniania przycisku używa niepustego operatora asercji. podczas dodawania odbiornika kliknięć, jak pokazano poniżej:

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

Ta konwersja jest mniej idealna w tym przypadku niż użycie funkcji lateinit, ponieważ są zmuszeni do wyodrębnienia odwołania do przycisku za pomocą asercji niezerowej lub atrybutu Secure-call. w każdym miejscu, w którym uzyskano dostęp.

W innych przypadkach, gdzie null jest prawidłowym przypisaniem zmiennej na podstawie przypadku użycia aplikacji, z użyciem operatora bezpiecznego wywołania (?.) z zakończeniem elvis (?:) może być trafniejszym sposobem bezpiecznego wyodrębniania do wartości null lub wymuszać na rozsądną, niezerową wartość domyślną. Android Studio, nie ma wystarczających informacji, aby to ustalić konwersji. Domyślnie jest to asercja niepusta, musisz jednak i w razie potrzeby dostosuj przekonwertowany kod.

Więcej informacji

Aby dowiedzieć się więcej o używaniu w projekcie zarówno kodu Kotlin, jak i kodu Java, zobacz Wywołuję kod Java z Kotlin.

Więcej informacji o używaniu Kotlin w scenariuszach biznesowych znajdziesz w materiałach na temat Wdrożenie Kotlina w dużych zespołach

Informacje na temat idiomatycznych kodów Kotlin w istniejących interfejsach API Androida znajdziesz tutaj: Android KTX.