トラブルシューティング - Java SDK
項目一覧
"librealm-jNI.so" を読み込むことができませんでした
アプリが 64 ビット アーキテクチャをサポートしていないネイティブ ライブラリを使用している場合、Android は ARM64 デバイスに Realm の librealm-jni.so
ファイルを読み込むのに失敗します。 これは、Android が 32 ビットと 64 ビットのネイティブ ライブラリを同時に読み込むことができないために発生します。 理想的には、すべてのライブラリが同じサポートされている ABI セットを提供できますが、サードパーティのライブラリを使用している場合はそれが実行できない場合があります。
この問題を回避するには、次のコードをアプリケーションのbuild.gradle
に追加して、Realm の ARM64 ライブラリを APK ファイルから除外します。 詳細については、「 Android で 32 ビットと 64 ビットの依存関係を混在させる 」を参照してください。
android { //... packagingOptions { exclude "lib/arm64-v8a/librealm-jni.so" } //... }
混合パネルへのネットワーク呼び出し
ソースコードで Realm バイトコード 変換を実行すると、Realm は匿名分析を収集します。 これは完全に匿名であり、フラグを付けることで製品を改善するのに役立ちます。
使用している SDK のバージョン
使用しているオペレーティング システム
アプリケーションが Kotlin を使用している場合
アプリケーションがローカル専用の Realm または Sync を使用する場合
分析は、アプリケーションがユーザー デバイス上で実行されている場合は実行されません - は、ソースコードをコンパイルした場合にのみ実行されます。 分析をオプトアウトするには、 REALM_DISABLE_ANALYTICS
環境変数をtrue
に設定します。
SDK バージョンが 10.5.1 未満の Android 12 での変更リスナー
Linux カーネルの変更により、オブジェクト、コレクション、および Realm 通知は、特定のバージョンの Android 12 を実行しているデバイスの SDK バージョン 10.5.1 未満では機能しません。
この変更は、 5.5
以降の Linux カーネル バージョンに影響します。 Linux カーネル バージョン5.14-rc4
で問題が修正されました。 この修正はLTS 5.10.56
とLTS 5.13.8
にもバックポートされました。 すべてのメインラインおよび LTS ブランチには、修正またはそのバックポートが含まれています。
この問題が発生した場合は、次の修正で通知機能を復元できます。
10.5.1 以降のバージョンの SDK にアップグレードします。
修正を含む Linux
3a34b13a88caeb2800ab44a4918f230041b37dd9
リリースを使用する Android 12 のバージョンに4b20d2de0b367bca627b49efd8d2e9e01bb66753
する
同じファイルを開くために使用される場合は、構成が異なることはありません
Realm では、破損を防ぐために、Realm ファイルを開くたびにチェックが実行されます。 互換性のない設定を持つ Realm ファイルを誤って開かないようにするため、SDK は Java のequals()
メソッドを使用してRealmConfiguration
オブジェクトを比較します。 これにより、SDK が異なるスキーマ、耐久性レベル、または書込み可能設定を持つ単一の Realm ファイルを開くことを防止します。 ただし、 initialData()やcompactOnLaunch( ) に渡されるような、Lambda 関数を含む構成では、このequals()
比較が中断される可能性があります。Java の組み込み比較では、2 つの異なる Lambda が等価と見なされないためです。 Lambda を使用するときにこのエラーを回避するには、次のいずれかを実行します。
アプリケーションに単一の構成を静的に保存することで、個別の Realm インスタンスが完全に同じ
RealmConfiguration
オブジェクトを使用し、チェックに合格します。RealmConfiguration
のデフォルトの と等しいチェックを上書きします。val config = RealmConfiguration.Builder() .initialData(object: Realm.Transaction { override fun execute(realm: Realm) { TODO("Not yet implemented") } override fun equals(other: Any?): Boolean { return true } override fun hashCode(): Int { return 37 } }).build()
ビルド中の例外のキャプチャ
Kapt ライブラリで次のような説明を持つ例外が発生した場合。
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
これはモデル クラスのいずれかに問題があることを意味します。 考えられる原因は次のとおりです。
SDK でサポートされていないフィールドタイプの導入
Realm オブジェクトモデル クラスに
open
またはpublic
以外の可視性タイプを使用する互換性のないフィールドで Realm 注釈を使用する
このエラーが発生した場合は、スキーマの最近の更新に問題があるかを確認してください。
インストールサイズ
アプリをリリース用にビルドし、配信用に分割すると、SDK はほとんどの場合、約 800 KB のみを APK に追加します。 ARM7、ARMv7、ARM64、x86、MIPS など、より多くのアーキテクチャのサポートが含まれるため、リリースは大幅に大きくなります。 APK ファイルにはサポートされているすべてのアーキテクチャが含まれていますが、Android インストーラーはデバイスのアーキテクチャのネイティブ コードのみをインストールします。 これは、インストールされたアプリが APK ファイルのサイズより小さいことを意味します。
APK を各アーキテクチャのバージョンに分割することで、Android APK 自体のサイズを縮小できます。 Android Build Tools ABI 分割 サポートを使用するには、以下をbuild.gradle
に追加します。
android { splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } }
含めるアーキテクチャを選択して、それぞれに個別の APK を構築します。
複数の APK を処理したくない場合は、単一の APK でサポートされるアーキテクチャの数を制限できます。 これは、 build.gradle
にabiFilters
を追加することで行われます。
android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'mips', 'x86', 'x86_64' } } }
Realm Gradle プラグインによって定義された依存関係をカスタマイズする
Realm では、多数の依存関係の設定が容易になるため Gradle プラグインを使用しています。 残念ながら、特定の推移的な依存関係を無視するのが若干困難になります。
プラグインによって公開される範囲を超えて Realm をカスタマイズする場合は、すべての依存関係を手動で設定し、 Gradle プラグインを無視できます。 次の例は、 Kotlin を使用して Android アプリケーションの SDK を手動で設定する方法を示しています。
buildscript { ext.kotlin_version = '1.5.21' ext.realm_version = '10.18.0' repositories { jcenter() mavenCentral() } dependencies { classpath "io.realm:realm-transformer:$realm_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' import io.realm.transformer.RealmTransformer android.registerTransform(new RealmTransformer(project)) dependencies { api "io.realm:realm-annotations:$realm_version" api "io.realm:realm-android-library:$realm_version" api "io.realm:realm-android-kotlin-extensions:$realm_version" kapt "io.realm:realm-annotations-processor:$realm_version" }