2016-10-19 9 views
5

NDKとgradle CMakeを使用するAndroidプロジェクトにCrashlyticsサポートを追加しようとしています。つまり、共有プロジェクトのシンボルが必要です。だから私は、リリースビルドのシンボルを作成したい場合、私はgradlew crashlyticsUploadSymbolsReleaseCrashlytics NDKのシンボルビルドをコマンドラインから

と呼ぶことにしますhttps://docs.fabric.io/android/crashlytics/ndk.htmlでの公式文書では、は、シンボル生成およびアップロードプロセスは、標準的なプロジェクト構造を前提としていることを述べている:デバッグバイナリのためのsrc /メイン/ OBJ、およびsrc/main/libs(ndk-buildによって生成されたリリースバイナリ用)。 Gradleのファイルで

これは次のようである新しいブロックを意味:私は私のネイティブLIBSを構築するためのGradle CMakeの統合を使用していますので

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

を、当然のデフォルトのパスが機能していません。リリースモードのネイティブライブラリは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' 
} 

少なくとも私のシナリオでは、同じディレクトリを指すので、私は本当に、androidNdkOutandroidNdkLibsOut変数の違いを理解していません。幸いにも、これは私にとっては問題ではありません。なぜなら、私のリリースのバイナリを扱うのにCrashlyticsが必要なだけなのでです。

だから私の質問は以下のとおりです。

1)本当にandroidNdkOutandroidNdkLibsOutの違いは何ですか?デバッグバイナリへのパスを1つに、パスをバイナリを他に解放できないのはなぜですか?説明に加えて具体的な例がいいでしょう。

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

スレッドCrashlytics NDK symbols and Gradle tasksCrashlytics NDK multi androidNdkOut path supportにこれに関する議論がありますが、実際にはこれらの2つの質問には答えません。

+0

行番号は使えますか?ストライプされていないバイナリはどこで見つけましたか?あなたが提供したそれらのパスは、剥奪された.soだけをcontaingしていますか? – urSus

答えて

3

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

シンボルのアップロードツールは、ndk-buildプロセスに基づいています。これは、シンボルデータが削除されたプロダクションバイナリとデバッグ用のシンボルデータがそのまま残っているデバッグバイナリの2セットのバイナリを生成します。

のGradle特性は、具体的には、ndk-buildプロセスの変数にマップ:

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

これらのパスの期待内容は、あなたのライブラリのためのアーキテクチャ固有のディレクトリなので、例えば:

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

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

あなたが仕事に私たちのシンボルのアップロードのために行う必要がありますすべてがこれらを生成することですCMakeのバイナリと同じセットを作成し、androidNdkOutandroidNdkLibsOutを、それらのライブラリが見つかる適切な最上位ディレクトリに設定します。

EDIT/UPDATE 2017年7月7日

私達はちょうどあなたは、AndroidのGradleプラグインを使用しているときに自動的に適切なネイティブライブラリパスを解決するサポートのGradle用ファブリックプラグインのバージョン1.23.0をリリースしました2.2.0+にexternalNativeBuild DSLを追加したので、最新のAndroid Gradleプラグインを使用している場合は、androidNdkOutandroidNdkLibsOutを設定する必要はなくなりました。ここで詳細を確認してください:https://docs.fabric.io/android/crashlytics/ndk.html#specifying-the-path-to-debug-and-release-binaries

関連する問題