Crashlytics Android NDK: missing all symbols in crash reports

笑着哭i 提交于 2020-01-13 09:10:53

问题


Our native Crashlytics crash reports are missing all symbol information as of late. I had hoped that the latest Crashlytics NDK would resolve the issue, but it does not.

I see that there is a similar query out there, but in this case I am not using Firebase, just Crashlytics, and had been doing so successfully for quite some time.

Our build.gradle (using CMake and the Gradle 3.0.0 or 3.1.0 Android plugin -- same issue either way) contains:

buildscript {
    ...
    dependencies {
        ...
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
...
dependencies {
    ...
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true
    }
    implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.0.2'
}

Which would seem to be correct and using all the latest Fabric components unless I am missing something.

I then added:

crashlytics {
    enableNdk true
    manifestPath 'AndroidManifest.xml'
}

tasks.whenTaskAdded { task ->
    if (task.name.startsWith('assemble')) {
        task.finalizedBy "crashlyticsUploadSymbols" + task.name.substring('assemble'.length())
    }
}

none of which I had needed some time ago when this was working. (And, no, just adding the crashlytics block was insufficient.)

This gives me symbols for the .cpp files I actually build in this project. It still has no symbols for the .a file I link in, nor even for libc++_shared.so!


回答1:


For Java

https://docs.fabric.io/android/crashlytics/dex-and-proguard.html

Configure ProGuard and DexGuard

We’ve made it simple to set up ProGuard or DexGuard in your app and receive deobfuscated crash reports. First of all, Fabric uses annotations internally, so add the following line to your configuration file:

-keepattributes *Annotation*

Next, in order to provide the most meaningful crash reports, add the following line to your configuration file:

-keepattributes SourceFile,LineNumberTable

Crashlytics will still function without this rule, but your crash reports will not include proper file names or line numbers.

For C++

https://docs.fabric.io/android/crashlytics/ndk.html

Specifying the path to debug and release binaries

To properly symbolicate and process native crashes, we need the symbols from your native binaries. Typically, Android’s native binary build processes produce two sets of binaries: one set with debugging symbols, and one set to be packaged in your final APK. The Fabric plugin uses both sets of binaries to generate a symbol file on your machine. The symbol generation and upload process assumes your project will have two directories - one for the debug binaries (called obj below), and one for the release binaries (called libs below) - that are broken down by architecture-specific folders.

When building your project with the Android plugin for Gradle version 2.2.0+ with the externalNativeBuild DSL, the Fabric plugin is able to automatically detect the necessary directories for each native build variant in order to generate the appropriate symbol files.

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

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

The paths to the debug and release binaries can be manually controlled via the androidNdkOut (default: src/main/obj) and androidNdkLibsOut (default: src/main/libs) properties. Ant users can modify these in the fabric.properties file. Gradle users can control these via the crashlytics {} block in their build.gradle.

Ant: ant crashlytics-upload-symbols

Gradle: ./gradlew crashlyticsUploadSymbols{Variant}

For example: ./gradlew crashlyticsUploadSymbolsRelease

You should also read "Uploading symbols for external dependencies" it it applies to your code.



来源:https://stackoverflow.com/questions/49511783/crashlytics-android-ndk-missing-all-symbols-in-crash-reports

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!