[英]java.lang.UnsatisfiedLinkError: No implementation found due to Library not loading
[英]Android Telegram App --> java.lang.UnsatisfiedLinkError: No implementation found for void
不幸的是,幾周前在Stackoverflow上刪除了一個類似的問題,我必須提出一個新問題。
我試圖通過源@ 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 ++代碼生成本機庫。 由於基於Telegram的項目(通過鏈接將其指出)在jni
目錄下具有文件Android.mk
,因此您必須手動編譯代碼。 我按照以下步驟修復了該異常:
build.gradle
包含: 源代碼版本3.13.1和更高版本:
sourceSets.main.jniLibs.srcDirs = ['./jni/']
源代碼版本低於3.13.1:
sourceSets.main { jniLibs.srcDirs = 'libs' jni.srcDirs = [] //disable automatic ndk-build call }
根據您的操作系統進行操作。
$ cd <path-to-Telegram>/TMessagesProj
$ <path-to-ndk>/ndk-build
添加.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
並等待編譯器完成其任務。 如果此過程正確,將顯示兩個目錄obj
和libs
。 檢查libs
目錄是否包含一些擴展名為.so
庫。 最后,運行項目。
正如JesúsCastro提到的那樣,您必須將本機代碼編譯為帶有.so
后綴的庫,以便android可以將其用於運行應用程序。
但是為什么這是新發生的呢? 因為在DrKLO的Telegram存儲庫的最后一次提交中,他們已根據git中的提交消息刪除了預構建的庫:
刪除預建的庫。 所有庫的源代碼都(並且一直是)可在此處獲得: https : //github.com/DrKLO/Telegram/tree/master/TMessagesProj/jni
您可以在此處找到提交。
因此,要解決您的問題,可以從構建中刪除64位庫,或將abiFilters設置為僅打包32位體系結構:
android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
將android.useDeprecatedNdk = true添加到項目根目錄下名為gradle.properties的文件中
@Rajsundar。 如果添加該行:
export ndkbuild=/cygdrive/c/android-ndk-r10e/ndk-build.cmd
不管用。 完成所有其他操作后,您可以直接從jni目錄直接運行命令。
/cygdrive/c/android-ndk-r10e/ndk-build.cmd
我有類似的錯誤消息。 對我來說,解決方案是從模擬器中卸載應用程序,清理項目(包括所有庫)並進行重建。 現在,該應用程序可以正常啟動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.