Ürün Haberleri

Room 3.0 - Room'u Modernleştirme

Okuma süresi: 4 dk.
Daniel Santiago Rivera adlı kullanıcının profilini görüntüle
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 önemli bir kitaplık sürümüdür. 

Bu blogda zarar veren değişiklikleri, Room 3.0'ın arkasındaki mantığı ve Room 2.0'dan geçiş yapmak için yapabileceğiniz çeşitli işlemleri açıklıyoruz.

Zarar veren değişiklikler

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

  • SupportSQLite API'leri için destek 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 uçtan kaçındığı için Android'in API yüzeyini basitleştirir.
  • Java kodu oluşturma sonlandırıldı: Room 3.0 yalnızca Kotlin kodu oluşturur. Bu, gelişen Kotlin öncelikli paradigmaya uyum sağlamanın yanı sıra kod tabanını ve geliştirme sürecini basitleştirerek daha hızlı iterasyonlar yapılmasına olanak tanır.
  • KSP'ye odaklanma: Java Ek Açıklama İşleme (AP) ve KAPT desteğini de sonlandırıyoruz. Room 3.0, yalnızca KSP (Kotlin Sembol İşleme) işlemcisidir. Bu sayede, Java diliyle sınırlı kalmadan Kotlin kod tabanlarının daha iyi işlenmesini sağlar.
  • Öncelik eş yordamlarda: Room 3.0, Kotlin eş yordamlarını destekler ve API'lerini eş yordam öncelikli hale getirir. Eş yordamlar, KMP ile uyumlu eşzamansız çerçevedir ve Room'un doğası gereği eşzamansız olması, web platformlarını desteklemek için kritik bir gerekliliktir.

Yeni bir paket

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

Kotlin ve Eş Yordamlar Öncelikli

Java kod üretimi artık kullanılmadığından Room 3.0, Room ile etkileşimde bulunan kod tabanı Java'da olsa bile KSP ve Kotlin derleyicisini de gerektirir. Room kullanımının yoğun olduğu ve Kotlin Gradle eklentisi ile KSP'nin kod tabanının geri kalanını etkilemeden uygulanabileceği çok modüllü bir projenizin olması önerilir.

Room 3.0 için Coroutine'ler de gereklidir. Daha açık belirtmek gerekirse DAO işlevleri, Flow gibi reaktif bir tür döndürmedikleri sürece askıya alınmalıdır. Room 3.0, DAO işlevlerinin engellenmesine izin vermez. Eş yordamları uygulamanıza entegre etmeye başlamak için Android'de eş yordamlar belgelerine bakın.

SQLiteDriver API'lerine geçiş

SupportSQLite'tan uzaklaşılmasıyla birlikte uygulamaların SQLiteDriver API'lerine geçmesi gerekecek. Bu taşıma işlemi, BundledSQLiteDriver aracılığıyla paketlenmiş SQLite kitaplığının kullanılmasına izin vermek de dahil olmak üzere Room 3.0'ın tüm avantajlarından yararlanmak için gereklidir. Room 2.7.0 ve sonraki sürümlerle sürücü API'lerine geçiş yapmaya hemen başlayabilirsiniz. SupportSQLite'ı kullanmayı bırakmanızı önemle tavsiye ederiz. Room entegrasyonlarınızı SQLiteDriver API'lerine taşırsanız Room 3.0'a geçiş daha kolay olur. Bunun nedeni, paket değişikliğinin çoğunlukla sembol referanslarını (içe aktarmalar) güncellemeyi içermesi ve çağrı sitelerinde minimum değişiklik gerektirebilmesidir.

SQLiteDriver API'lerine kısa bir genel bakış için SQLiteDriver API belgelerini inceleyin.

Room'u SQLiteDriver API'lerini kullanacak şekilde taşıma hakkında daha fazla bilgi için SupportSQLite'tan taşıma ile ilgili resmi belgeleri inceleyin.

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 yapı kullanıma sunuldu. Bu yapı, veritabanındaki SupportSQLite API'leri SQLiteDriver yüklendiği için devre dışı bırakılmış olsa bile RoomDatabase öğesini SupportSQLiteDatabase öğesine dönüştürmenize olanak tanıyan bir uyumluluk API'si sunar. Bu sayede, kod tabanlarını tamamen taşımak için daha fazla zamana ihtiyaç duyan geliştiricilere geçici bir çözüm sunulur. Bu yapı, kritik SupportSQLite kullanımını desteklemeye devam ederken Room 3.0'a geçişi etkinleştirmek için Room 3.0'da androidx.room3:room3-sqlite-wrapper olarak varlığını sürdürür.

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

Daha fazla bilgi için room-sqlite-wrapper belgelerine göz atın.

Room ve SQLite Web Desteği

Kotlin Multiplatform hedefleri JS ve WasmJS için destek sunar ve en önemli API değişikliklerinden bazılarını içerir. Özellikle, web depolama alanı için uygun destek eşzamansız olduğundan Room 3.0'daki birçok API askıya alma işlevidir. SQLiteDriver API'leri de web'i destekleyecek şekilde güncellendi ve androidx.sqlite:sqlite-web sürümünde yeni bir web eşzamansız sürücüsü kullanıma sunuldu. Veritabanının, kaynağa özel dosya sisteminde (OPFS) kalıcı olmasını sağlayan Web Çalışanı tabanlı bir sürücüdür.

Web için Room'u nasıl ayarlayacağınız hakkında daha fazla bilgi edinmek isterseniz Room 3.0 sürüm notlarını inceleyin.

Özel DAO Dönüş Türleri

Room 3.0, RxJava ve Sayfalandırma'ya benzer şekilde Room'a özel entegrasyonlar ekleme olanağı sunar. @DaoReturnTypeConverter adlı yeni bir ek açıklama API'si aracılığıyla kendi entegrasyonunuzu oluşturabilirsiniz. Böylece Room'un oluşturduğu kod, çalışma zamanında erişilebilir hale gelir. Bu sayede @Dao işlevleri, Room ekibinin desteği eklemesini beklemeden kendi özel dönüş türlerine sahip olabilir. Mevcut entegrasyonlar bu işlevi kullanacak şekilde taşındı. Bu nedenle, bu işlevi kullananların dönüştürücüleri @Database veya @Dao tanımlarına eklemesi gerekecek.

Örneğin, Sayfalandırma dönüştürücü androidx.room3:room3-paging yapısında bulunur ve PagingSourceDaoReturnTypeConverter olarak adlandırılır. LiveData için ise dönüştürücü androidx.room3:room3-livedata içinde bulunur ve LiveDataDaoReturnTypeConverter olarak adlandırılır.

Daha fazla bilgi için Room 3.0 sürüm notlarındaki 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ştirme süreci Room 3'e odaklanacağından mevcut Room 2.x sürümü bakım moduna girer. Bu, önemli bir özellik geliştirilmeyeceği ancak hata düzeltmeleri ve bağımlılık güncellemeleri içeren yama sürümlerinin (2.8.1, 2.8.2 vb.) yayınlanmaya devam edeceği anlamına gelir. Ekip, Room 3 kararlı hale gelene kadar bu çalışmaya devam edecek.

Son düşünceler

Room 3.0'ın potansiyeli ve Kotlin ekosistemi için sunduğu fırsatlar bizi çok heyecanlandırıyor. Bu yolculuğumuzda daha fazla güncelleme için bizi takip etmeye devam edin.

Okumaya devam et