android - 当我添加 Realm 库时,Telegram Messenger 客户端将无法工作

标签 android android-studio gradle realm telegram

我正在开发存储库中的 Telegram Messenger 的自定义版本:https://github.com/DrKLO/Telegram .我想在其中使用 MPAndroidChart 和 Realm ,但是当我通过这样的在线存储库添加 Realm 时:

在 gradle 文件中:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:0.88.2"
    }
}

在 gradle 模块文件中:
dependencies {
    compile 'io.realm:realm-android:0.88.2'
}

repositories {
    maven { url "https://jitpack.io" }
    maven { // this is for realm-db
        url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
    }
}

即使添加这样的 jar 文件并编译并运行它,我也会遇到以下错误,当我没有添加编译的 c/c++ 依赖项时,我会遇到以下错误。

手动添加:
我已将与 Realm 库相关的 jar 和 pom 文件添加到“realm_libs”文件夹中,并将以下行添加到 gradle 依赖项中。
compile files('realm_libs/realm-android-0.80.2.jar')

我遇到的错误:
E/art: dlopen("/data/data/org.telegram.messenger.beta/files/lib/libtmessages.17loc.so", RTLD_LAZY) failed: dlopen failed: "/data/data/org.telegram.messenger.beta/files/lib/libtmessages.17loc.so" is 32-bit instead of 64-bit
E/art: dlopen("/data/data/org.telegram.messenger.beta/files/lib/libtmessages.17loc.so", RTLD_LAZY) failed: dlopen failed: "/data/data/org.telegram.messenger.beta/files/lib/libtmessages.17loc.so" is 32-bit instead of 64-bit
E/art: No implementation found for void org.telegram.tgnet.ConnectionsManager.native_setJava(boolean) (tried Java_org_telegram_tgnet_ConnectionsManager_native_1setJava and Java_org_telegram_tgnet_ConnectionsManager_native_1setJava__Z)
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: org.telegram.messenger.beta, PID: 13900
                  java.lang.UnsatisfiedLinkError: No implementation found for void org.telegram.tgnet.ConnectionsManager.native_setJava(boolean) (tried Java_org_telegram_tgnet_ConnectionsManager_native_1setJava and Java_org_telegram_tgnet_ConnectionsManager_native_1setJava__Z)
                      at org.telegram.tgnet.ConnectionsManager.native_setJava(Native Method)
                      at org.telegram.messenger.ApplicationLoader.onCreate(ApplicationLoader.java:268)
                      at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1017)
                      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4938)
                      at android.app.ActivityThread.access$1500(ActivityThread.java:182)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1576)
                      at android.os.Handler.dispatchMessage(Handler.java:111)
                      at android.os.Looper.loop(Looper.java:194)
                      at android.app.ActivityThread.main(ActivityThread.java:5717)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
I/Process: Sending signal. PID: 13900 SIG: 9

该项目成功清理,我对 Realm 库导入没有任何问题,但是当我在设备上运行它时会发生错误。

最佳答案

问题是 Telegram 只支持 32bit 机器,realm 应该在 32bit 模式下编译。这可以通过使用 Realm 的旧版本 (https://static.realm.io/downloads/java/realm-java-0.87.4.zip) 并按照此处的说明拆分构建来完成:

realm.io/news/reducing-apk-size-native-libraries

您必须从 link 的下载部分获取 jar 文件。并且应将 eclipse 目录中指示不同架构的 4 个文件夹添加到 src/main/jniLibs目录。

并且应该将以下内容添加到模块的 build.gradle 文件中:

android {
    // Some other configuration here...

    splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi', 'armeabi-v7a', 'mips'
            universalApk false
        }
    }
} 

dependencies {
    compile files('libs/realm-android-0.87.4.jar')
}

关于android - 当我添加 Realm 库时,Telegram Messenger 客户端将无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36113133/

相关文章:

java - Gradle 依赖与传递 false 继续检索依赖

java - 有没有办法使用gradle从文件夹解压缩多个文件?

java - AsyncTask 和上下文

java - 比较两个日期是否在android中的同一周内

android - wifi调试Android 11设备已配对但Android Studio未检测到

android - 错误 :(20, 0) 找不到 Gradle DSL 方法: 'compile()'

gradle - gradle应用程序插件过程以非零退出值1完成

android - IndexOutOfBoundsException 但错误没有给我代码中的一行

android - 在两个 Android 应用程序之间共享 Phonegap 存储数据库

android - 如何调试通过Google Drive安装的apk?