7

NDK と gradle CMake を使用する Android プロジェクトに Crashlytics サポートを追加しようとしています。これは、共有プロジェクトにシンボルが必要であることを意味します。したがって、リリース ビルド用のシンボルを作成する場合は、次のように呼び出します。gradlew crashlyticsUploadSymbolsRelease

https://docs.fabric.io/android/crashlytics/ndk.htmlの公式ドキュメントによると、シンボルの生成とアップロードのプロセスは、標準のプロジェクト構造を想定しています: デバッグ バイナリの src/main/obj、および src/main/libs ndk-build によって生成されたリリース バイナリ用。

gradle ファイルでは、これは次のような新しいブロックを意味します。

crashlytics {
    enableNdk true
    androidNdkOut 'src/main/obj'
    androidNdkLibsOut 'src/main/libs'
}

私はgradle CMake統合を使用してネイティブライブラリを構築しているため、もちろんデフォルトパスは機能していません。リリース モードのネイティブ ライブラリはディレクトリに組み込まれ、build/intermediates/cmake/release/objデバッグ モードではbuild/intermediates/cmake/debug/objディレクトリに移動します。

試行錯誤の結果、リリース ビルドを機能させるには、以下に示すように、リリース モードのネイティブ ライブラリへのパスを両方の行に配置する必要があると考えました。

crashlytics {
    enableNdk true
    androidNdkOut 'build/intermediates/cmake/release/obj'
    androidNdkLibsOut 'build/intermediates/cmake/release/obj'
}

少なくとも私のシナリオでは同じディレクトリを指しているため、変数androidNdkOutと変数の違いが本当にわかりません。androidNdkLibsOut幸いなことに、リリース バイナリを操作するために Crashlytics が必要なだけなので、これは問題ではありません。

だから私の質問は:

androidNdkOut1)との違いは何androidNdkLibsOutですか? デバッグ バイナリへのパスを一方に配置し、バイナリをリリースするパスを他方に配置できないのはなぜですか? 説明に加えて、具体的な例がいいでしょう。

2) いつかデバッグ ライブラリのシンボルも含めたい場合、gradle ファイルをどのように変更すればよいですか? コマンド gradlew crashlyticsUploadSymbolsReleaseも機能するというgradlew crashlyticsUploadSymbolsDebugことですか?

これについては、Crashlytics NDK シンボルと Gradle タスクおよびCrashlytics NDK マルチ androidNdkOut パス サポートのスレッドで議論されていますが、実際にはこれら 2 つの質問には答えていません。

4

2 に答える 2

6

私は、Crashlytics NDK サポートを維持する Fabric チームで働いています。

コンテキストを説明すると、シンボル アップロード ツールは、2 セットのバイナリを生成するプロセスに基づいていndk-buildます。シンボル データが取り除かれた製品バイナリと、デバッグ目的でシンボル データがそのまま残っているデバッグ バイナリです。

Gradle のプロパティは、ndk-buildプロセス内の変数にマップされます。具体的には、次のとおりです。

  • androidNdkOutは、ストリップされていないデバッグ バイナリが置かれるディレクトリです ($NDK_OUT変数 in に相当ndk-build) がデフォルトで呼び出さobjれます。
  • androidNdkLibsOut$NDK_LIBS_OUTは、削除されたリリース バイナリが置かれるディレクトリです (変数 in に相当ndk-build) がデフォルトで呼び出さlibsれます。

これらのパスの予期される内容は、ライブラリのアーキテクチャ固有のディレクトリです。たとえば、次のようになります。

obj/
  — armeabi
    — lib1.so
    — lib2.so
  — x86
    — lib1.so
    — lib2.so

libs/
  — armeabi
    — lib1.so
    — lib2.so
  — x86
    — lib1.so
    — lib2.so

シンボルのアップロードを機能させるために必要なことは、CMake からこれらと同じバイナリ セットを生成し、それらのライブラリが見つかる適切な最上位ディレクトリにandroidNdkOutandを設定することだけです。androidNdkLibsOut

2017年7月7日編集/更新

Gradle 用 Fabric プラグインのバージョン 1.23.0 をリリースしました。これは、externalNativeBuildDSL でAndroid Gradle プラグイン 2.2.0+ を使用しandroidNdkOutているandroidNdkLibsOut場合に、適切なネイティブ ライブラリ パスの自動解決をサポートします。最新の Android Gradle プラグインを使用しています。ここで詳細情報を確認してください: https://docs.fabric.io/android/crashlytics/ndk.html#specifying-the-path-to-debug-and-release-binaries

于 2016-10-24T16:59:53.717 に答える
0

mWillis が言及した自動検出が機能しない場合は、非表示のログ ファイルをチェックアウトします。

~/.crashlytics/com.crashlytics.tools/crashlytics.log

なんらかの理由で、Googleはそれを指摘しておらず、fabric.ioのドキュメントにも記載されていないようです。

于 2019-02-27T16:46:57.760 に答える