web-dev-qa-db-ja.com

Android Telegram App-> Java.lang.UnsatisfiedLinkError:voidの実装が見つかりません

残念ながら、数週間前にStackoverflowで同様の質問が削除されました。新しい質問を作成する必要があります。

Androidソース@ https://github.com/DrKLO/Telegram の独自のTelegramアプリを構築しようとしています。

私はそれを機能させることができません、それは次のエラーで起動時に停止します、どこから始めるべきかについてのアイデア、Im 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)
23
stavasknall

主な問題は、C/C++コードからネイティブライブラリを生成せずにプロジェクトを実行していることです。リンクで指摘したTelegramに基づくプロジェクトのため、ファイルAndroid.mkjniディレクトリで、コードを手動でコンパイルする必要があります。次の手順に従って、その例外を修正しました。

  • それを確認します 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とコンパイラがタスクを完了するまで待ちます。このプロセスが正しければ、2つのディレクトリobjlibsが表示されます。 libsディレクトリに.so拡張子。最後に、プロジェクトを実行します。

21
Jesús Castro

JesúsCastroが述べたように、ネイティブコードを.soサフィックスを含むライブラリにコンパイルする必要があります。これは、Androidがアプリの実行に使用できるようにする)です。

しかし、なぜこれが新しく起こったのですか?なぜなら、DrKLOのTelegramリポジトリの最後のコミットでは、gitのコミットメッセージに従ってビルド済みのライブラリが削除されているためです。

ビルド済みライブラリを削除します。すべてのライブラリのソースコードは、ここにあります(常にありました)。 https://github.com/DrKLO/Telegram/tree/master/TMessagesProj/jni

コミット ここ を見つけることができます。

5

したがって、問題を解決するには、ビルドから64ビットライブラリを削除するか、32ビットアーキテクチャのみをパッケージ化するようにabiFiltersを設定します。

Android {
....
defaultConfig {
    ....
    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }
}

}

プロジェクトのルートにあるgradle.propertiesという名前のファイルにAndroid.useDeprecatedNdk = trueを追加します

1
FeelCode

@Rajsundar。行を追加する場合:

export ndkbuild=/cygdrive/c/Android-ndk-r10e/ndk-build.cmd

動かない。他のすべてを実行した後は、jniディレクトリから直接コマンドを直接実行できます。

/cygdrive/c/Android-ndk-r10e/ndk-build.cmd
0

同様のエラーメッセージが表示されました。私の解決策は、シミュレーターからアプリをアンインストールし、プロジェクト(すべてのライブラリーを含む)をクリーンアップして、再ビルドすることでした。これでアプリは正常に起動します。

0
testing