Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

トラブルシューティング - Java SDK

項目一覧

  • "librealm-jNI.so" を読み込むことができませんでした
  • 混合パネルへのネットワーク呼び出し
  • SDK バージョンが 10.5.1 未満の Android 12 での変更リスナー
  • 同じファイルを開くために使用される場合は、構成が異なることはありません
  • ビルド中の例外のキャプチャ
  • インストールサイズ
  • Realm Gradle プラグインによって定義された依存関係をカスタマイズする

アプリが 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"
}
//...
}

Tip

以下も参照してください。

詳細については、「 Android における32 - と64 - ビットの依存関係の混合」を参照してください。

ソースコードで Realm バイトコード 変換を実行すると、Realm は匿名分析を収集します。 これは完全に匿名であり、フラグを付けることで製品を改善するのに役立ちます。

  • 使用している SDK のバージョン

  • 使用しているオペレーティング システム

  • アプリケーションが Kotlin を使用している場合

  • アプリケーションがローカル専用の Realm または Sync を使用する場合

分析は、アプリケーションがユーザー デバイス上で実行されている場合は実行されません - は、ソースコードをコンパイルした場合にのみ実行されます。 分析をオプトアウトするには、 REALM_DISABLE_ANALYTICS環境変数をtrueに設定します。

Linux カーネルの変更により、オブジェクト、コレクション、および Realm 通知は、特定のバージョンの Android 12 を実行しているデバイスの SDK バージョン 10.5.1 未満では機能しません。

この変更は、 5.5以降の Linux カーネル バージョンに影響します。 Linux カーネル バージョン5.14-rc4で問題が修正されました。 この修正はLTS 5.10.56LTS 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 を使用するときにこのエラーを回避するには、次のいずれかを実行します。

  1. アプリケーションに単一の構成を静的に保存することで、個別の Realm インスタンスが完全に同じRealmConfigurationオブジェクトを使用し、チェックに合格します。

  2. 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 を構築します。

Tip

以下も参照してください。

複数の APK を処理したくない場合は、単一の APK でサポートされるアーキテクチャの数を制限できます。 これは、 build.gradleabiFiltersを追加することで行われます。

android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'mips', 'x86', 'x86_64'
}
}
}

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

戻る

テスト