残念ながら、数週間前に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)
主な問題は、C/C++コードからネイティブライブラリを生成せずにプロジェクトを実行していることです。リンクで指摘したTelegramに基づくプロジェクトのため、ファイルAndroid.mk
jni
ディレクトリで、コードを手動でコンパイルする必要があります。次の手順に従って、その例外を修正しました。
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
とコンパイラがタスクを完了するまで待ちます。このプロセスが正しければ、2つのディレクトリobj
とlibs
が表示されます。 libs
ディレクトリに.so
拡張子。最後に、プロジェクトを実行します。
JesúsCastroが述べたように、ネイティブコードを.so
サフィックスを含むライブラリにコンパイルする必要があります。これは、Androidがアプリの実行に使用できるようにする)です。
しかし、なぜこれが新しく起こったのですか?なぜなら、DrKLOのTelegramリポジトリの最後のコミットでは、gitのコミットメッセージに従ってビルド済みのライブラリが削除されているためです。
ビルド済みライブラリを削除します。すべてのライブラリのソースコードは、ここにあります(常にありました)。 https://github.com/DrKLO/Telegram/tree/master/TMessagesProj/jni
コミット ここ を見つけることができます。
したがって、問題を解決するには、ビルドから64ビットライブラリを削除するか、32ビットアーキテクチャのみをパッケージ化するようにabiFiltersを設定します。
Android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
プロジェクトのルートにあるgradle.propertiesという名前のファイルにAndroid.useDeprecatedNdk = trueを追加します
@Rajsundar。行を追加する場合:
export ndkbuild=/cygdrive/c/Android-ndk-r10e/ndk-build.cmd
動かない。他のすべてを実行した後は、jniディレクトリから直接コマンドを直接実行できます。
/cygdrive/c/Android-ndk-r10e/ndk-build.cmd
同様のエラーメッセージが表示されました。私の解決策は、シミュレーターからアプリをアンインストールし、プロジェクト(すべてのライブラリーを含む)をクリーンアップして、再ビルドすることでした。これでアプリは正常に起動します。