java - Android Telegram 应用程序 --> java.lang.UnsatisfiedLinkError : No implementation found for void

标签 java android telegram

不幸的是,几周前 Stackoverflow 上删除了一个类似问题,我必须提出一个新问题。

我正在尝试通过 source @ https://github.com/DrKLO/Telegram 为 android 构建一个自己的 Telegram 应用程序

我无法让它工作,它在启动时停止并出现以下错误,关于从哪里开始的任何想法,我对 Android Studio 很陌生。

11-17 19:55:04.142 2667-2667/org.telegram.messenger 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)
11-17 19:55:04.142 2667-2667/org.telegram.messenger D/AndroidRuntime: Shutting down VM
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: FATAL EXCEPTION: main
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: Process: org.telegram.messenger, PID: 2667
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: 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)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at org.telegram.tgnet.ConnectionsManager.native_setJava(Native Method)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at org.telegram.messenger.ApplicationLoader.onCreate(ApplicationLoader.java:259)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at android.app.ActivityThread.-wrap1(ActivityThread.java)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

最佳答案

主要问题是您在运行项目时没有从 C/C++ 代码生成 native 库。由于那个基于 Telegram 的项目(您通过链接指出)在 jni 目录中有文件 Android.mk,因此您必须手动编译代码。我按照以下步骤修复了该异常:

  • 检查 build.gradle 是否包含:

source version 3.13.1 and newer:

sourceSets.main.jniLibs.srcDirs = ['./jni/']

source version lower than 3.13.1:

    sourceSets.main {
       jniLibs.srcDirs = 'libs'
       jni.srcDirs = [] //disable automatic ndk-build call
    }

根据您的操作系统继续。

Linux/Mac

$ cd <path-to-Telegram>/TMessagesProj
$ <path-to-ndk>/ndk-build

窗口

  • 下载Cygwin
  • 添加 .bashrc 文件,该文件位于 Cygwin 根目录中(使用一些实用程序来查找该文件)。在我的例子中,该文件被放置在 C:\cygwin64\home\myuser 中。

    export ndkbuild=/cygdrive/partition_name/your_ndk_directory/ndk-build.cmd
    
  • 打开 Cygwin 终端,将自己移至项目的 jni 目录:

    cd /cygdrive/your_partition_name/project_jni_directory_path
    
  • 编写 $ndkbuild 并等待编译器完成其任务。如果这个过程是正确的,会出现两个目录,objlibs。检查 libs 目录是否包含一些带有 .so 扩展名的库。最后,运行项目。

关于java - Android Telegram 应用程序 --> java.lang.UnsatisfiedLinkError : No implementation found for void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33765946/

相关文章:

java - 如何将 InputStream 转换为虚拟文件

android - 如何从 SharedPreferences 中删除一些包含字符串的键?

android - 创建新的应用程序 Telegram API

javascript - 用户单击 Telegram Bot API 后如何隐藏 ReplyKeyboardMarkup

Java正则表达式,查找里面的文本

java - Phoenix连接运行一段时间后抛出错误消息 “Failed to find any Kerberos tgt”

java.lang.ClassNotFoundException : javax. 持久性.实体

android - 打开具有多个内部 Intent 的应用程序并等待结果

android - 分享安卓图片查看图片

python - Telethon Telegram 消息过滤器