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:
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.
.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ść.
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.
Wybierz opcję skonfigurowania Kotlin dla wszystkich modułów zawierających Kotlin , jak pokazano na rysunku 4:
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.
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.