Ürün Haberleri

Room 3.0 - Odayı modernleştirme

Okuma süresi: 4 dakika
Daniel Santiago Rivera
Yazılım Mühendisi

Room 3.0'ın ilk alfa sürümü yayınlandı. Room 3.0, Kotlin Multiplatform'a (KMP) odaklanan ve mevcut Android, iOS ve JVM masaüstü desteğinin yanı sıra JavaScript ve WebAssembly (WASM) desteği ekleyen, kitaplığın büyük bir sürümüdür. 

Bu blogda, Room 3.0'ın gerekçesi, uyumluluğu bozan değişiklikler ve Room 2.0'dan geçiş yapmak için yapabileceğiniz çeşitli işlemler açıklanmaktadır.

Zarar veren değişiklikler

Room 3.0, aşağıdaki zarar veren API değişikliklerini içerir: 

  • SupportSQLite API'lerinin desteği sonlandırılıyor: Room 3.0, androidx.sqlite sürücü API'leri tarafından tamamen desteklenir. SQLiteDriver API'leri KMP ile uyumludur ve Room'un Android API'sine olan bağımlılığının kaldırılması, iki olası arka ucun olmaması nedeniyle Android için API yüzeyini basitleştirir.
  • Artık Java kodu oluşturulmuyor: Room 3.0 yalnızca Kotlin kodu oluşturur. Bu, gelişen Kotlin öncelikli paradigmayla uyumludur. Ayrıca kod tabanını ve geliştirme sürecini basitleştirerek daha hızlı yinelemeler yapılmasını sağlar.
  • KSP'ye odaklanma: Java Annotation Processing (AP) ve KAPT desteğini de sonlandırıyoruz. Room 3.0 yalnızca bir KSP (Kotlin Symbol Processing) işlemcisidir. Bu sayede, Java diliyle sınırlanmadan Kotlin kod tabanlarının daha iyi işlenmesine olanak tanır.
  • Öncelikle eş yordamlar: Room 3.0, Kotlin eş yordamlarını destekleyerek API'lerini eş yordam öncelikli hale getirir. Coroutines, KMP ile uyumlu asenkron bir çerçevedir ve Room'un doğası gereği asenkron olması, web platformlarının desteklenmesi için kritik bir gerekliliktir.

Yeni bir paket

Mevcut Room 2.x uygulamalarıyla uyumluluk sorunlarını önlemek ve Room'a geçişli bağımlılıkları olan kitaplıklar (ör. WorkManager) için Room 3.0 yeni bir pakette bulunur. Bu nedenle, yeni bir Maven grubu ve yapay nesne kimlikleri de vardır. Örneğin, androidx.room:room-runtime, androidx.room3:room3-runtime olarak değiştirildi ve androidx.room.RoomDatabase gibi sınıflar artık androidx.room3.RoomDatabase adresinde yer alacak.

Kotlin ve Eş Yordamlar Öncelikli

Java kodu oluşturma özelliği kaldırıldığından Room 3.0, Room ile etkileşimde bulunan kod tabanı Java ile yazılmış olsa bile KSP ve Kotlin derleyicisini gerektirir. Room kullanımının yoğunlaştığı ve Kotlin Gradle eklentisi ile KSP'nin kod tabanının geri kalanını etkilemeden uygulanabileceği çok modüllü bir proje oluşturmanız önerilir.

Room 3.0 ayrıca Coroutines'i gerektirir ve daha spesifik olarak, Flow gibi reaktif bir tür döndürmedikleri sürece DAO işlevlerinin askıya alınması gerekir. Room 3.0, DAO işlevlerinin engellenmesine izin vermez. Eş yordamları uygulamanıza entegre etmeye başlama hakkında bilgi edinmek için Android'de eş yordamlar dokümanlarına bakın.

SQLiteDriver API'lerine geçiş

SupportSQLite'den uzaklaşılmasıyla birlikte uygulamaların SQLiteDriver API'lerine geçmesi gerekecek. Bu taşıma, BundledSQLiteDriver aracılığıyla paketlenmiş SQLite kitaplığının kullanılmasına izin verme de dahil olmak üzere Room 3.0'ın tüm avantajlarından yararlanmak için gereklidir. Room 2.7.0+ ile sürücü API'lerine geçiş yapmaya bugün başlayabilirsiniz. SupportSQLite'in daha fazla kullanılmaması önemle tavsiye edilir. Room entegrasyonlarınızı SQLiteDriver API'lerine taşırsanız paket değişikliği çoğunlukla sembol referanslarının (içe aktarmalar) güncellenmesini içerdiğinden ve çağrı sitelerinde minimum değişiklik yapılması gerekebileceğinden Room 3.0'a geçiş daha kolay olur.

SQLiteDriver API'lerine kısa bir genel bakış için SQLiteDriver API'leri belgelerine göz atın.

Room'u SQLiteDriver API'lerini kullanacak şekilde taşıma hakkında daha fazla bilgi için resmi SupportSQLite'ten taşıma belgelerine göz atın.

Room SupportSQLite sarmalayıcısı

SupportSQLite'ın tamamen kaldırılmasının tüm projeler için hemen mümkün olmayabileceğinin farkındayız. Bu geçişi kolaylaştırmak için Room 2.0 serisinin en yeni sürümü olan Room 2.8.0'da androidx.room:room-sqlite-wrapper adlı yeni bir yapay nesne kullanıma sunuldu. Bu yapıt, veritabanındaki SupportSQLite API'leri SQLiteDriver yüklenmesi nedeniyle devre dışı bırakılmış olsa bile RoomDatabase öğesini SupportSQLiteDatabase öğesine dönüştürmenize olanak tanıyan bir uyumluluk API'si sunar. Bu, kod tabanlarını tamamen taşımak için daha fazla zamana ihtiyacı olan geliştiriciler için geçici bir köprü sağlar. Bu yapay nesne, kritik SupportSQLite kullanımını desteklemeye devam ederken Room 3.0'a geçişi sağlamak için Room 3.0'da androidx.room3:room3-sqlite-wrapper olarak varlığını sürdürüyor.

Örneğin, roomDatabase.openHelper.writableDatabase çağrıları roomDatabase.getSupportWrapper() ile değiştirilebilir ve setDriver(), Room'un oluşturucusunda çağrılsa bile bir sarmalayıcı sağlanır.

Daha fazla bilgi için room-sqlite-wrapper dokümanlarına göz atın.

Room ve SQLite Web Desteği

Kotlin Multiplatform'un JS ve WasmJS hedefleri için destek sunulur ve en önemli API değişikliklerinden bazıları yapılır. Özellikle, Room 3.0'daki birçok API, web depolama için uygun destek eşzamansız olduğundan askıya alma işlevleridir. SQLiteDriver API'leri de web'i destekleyecek şekilde güncellendi ve androidx.sqlite:sqlite-web içinde yeni bir web eşzamansız sürücüsü kullanıma sunuldu. Veritabanının Origin özel dosya sisteminde (OPFS) kalıcı olmasını sağlayan, Web Worker tabanlı bir sürücüdür.

Room for the Web'i ayarlama hakkında daha fazla bilgi için Room 3.0 sürüm notlarına göz atın.

Özel DAO dönüş türleri

Room 3.0, RxJava ve Paging'e benzer şekilde Room'a özel entegrasyonlar ekleme olanağı sunar. @DaoReturnTypeConverter adlı yeni bir ek açıklama API'si aracılığıyla, Room'un oluşturduğu kodun çalışma zamanında erişilebilir olmasını sağlayacak kendi entegrasyonunuzu oluşturabilirsiniz. Bu sayede, Room ekibinin destek eklemesini beklemenize gerek kalmadan @Dao işlevlerinin özel dönüş türleri olabilir. Mevcut entegrasyonlar bu işlevi kullanacak şekilde taşınır. Bu nedenle, bu işlevden yararlananların artık dönüştürücüleri @Database veya @Dao tanımlarına eklemesi gerekir.

Örneğin, Paging dönüştürücü androidx.room3:room3-paging yapısında bulunur ve PagingSourceDaoReturnTypeConverter olarak adlandırılır. Bu arada, LiveData için dönüştürücü androidx.room3:room3-livedata konumunda ve LiveDataDaoReturnTypeConverter olarak adlandırılıyor.

Daha fazla bilgi için Room 3.0 sürüm notlarındaki DAO Return Type Converters (DAO Dönüş Türü Dönüştürücüler) bölümüne göz atın.

Room 2.x'in bakım modu

Room'un geliştirilmesi Room 3'e odaklanacağından mevcut Room 2.x sürümü bakım moduna giriyor. Bu nedenle, büyük özellikler geliştirilmeyecek ancak hata düzeltmeleri ve bağımlılık güncellemeleri içeren yama sürümleri (2.8.1, 2.8.2 vb.) yayınlanmaya devam edecek. Ekip, Room 3 kararlı hale gelene kadar bu çalışmaya devam edecektir.

Son düşünceler

Room 3.0'ın potansiyeli ve Kotlin ekosistemine sunduğu fırsatlar konusunda çok heyecanlıyız. Bu yolculuğa devam ederken daha fazla güncelleme için takipte kalın.

Okumaya devam edin