簡體   English   中英

Android電報應用程序-> java.lang.UnsatisfiedLinkError:找不到無效的實現

[英]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 } 

根據您的操作系統進行操作。

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庫。 最后,運行項目。

正如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM