Crashlytics уже настроен для моего приложения Android и работает нормально для нормального кода Java / Kotlin. Сейчас я пытаюсь заставить Crashlytics регистрировать сбои NDK, используя это руководство: https://firebase.google.com/docs/crashlytics/ndk-reports.
Я сделал C ++ cra sh, и он отображается в Crashlytics, как вы можете смотрите на скриншоте ниже. Но в трассировке стека отсутствует много информации.
Файл Gradle верхнего уровня
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.61'
ext.ktlint_version = '0.33.0'
ext.spotless_version = '3.25.0'
repositories {
mavenCentral()
google()
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
classpath 'io.fabric.tools:gradle:1.31.2'
classpath "com.diffplug.spotless:spotless-plugin-gradle:$spotless_version"
}
}
apply plugin: "com.diffplug.gradle.spotless"
allprojects {
repositories {
mavenCentral()
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
spotless {
kotlin {
target "**/*.kt"
ktlint(ktlint_version)
}
}
Другой файл Gradle. Закомментированные строки - это то, что я пробовал.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'io.fabric'
def superpowered_sdk_path = new File(projectDir, '../../Superpowered/Superpowered')
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.something.app"
minSdkVersion 21
targetSdkVersion 28
versionCode 51
versionName "51"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk { // these platforms cover 99% percent of all Android devices
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-19', '-DANDROID_TOOLCHAIN=clang', '-DANDROID_ARM_NEON=TRUE', '-DANDROID_STL=c++_static', "-DPATH_TO_SUPERPOWERED:STRING=${superpowered_sdk_path}"
cFlags '-O3', '-fsigned-char' // full optimization, char data type is signed
cppFlags '-fsigned-char', "-I${superpowered_sdk_path}"
}
}
}
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path file('CMakeLists.txt')
}
}
afterEvaluate {
assembleDebug.finalizedBy(crashlyticsUploadSymbolsDebug)
assembleRelease.finalizedBy(crashlyticsUploadSymbolsRelease)
}
// android.applicationVariants.all { variant ->
// def variantName = variant.name.capitalize()
// if(variant.buildType.name=="release") {
// println('Calling crashlyticsUploadSymbolsRelease...')
// variant.assemble.finalizedBy(project.("crashlyticsUploadSymbols${variantName}"))
// }
// }
// tasks.whenTaskAdded { task ->
// if (task.name == "externalNativeBuildRelease") {
// println('Calling crashlyticsUploadSymbolsRelease...')
// task.finalizedBy "crashlyticsUploadSymbolsRelease"
//// crashlyticsUploadSymbolsRelease
// } else if (task.name == "externalNativeBuildDebug") {
// println('Calling crashlyticsUploadSymbolsDebug...')
// task.finalizedBy "crashlyticsUploadSymbolsDebug"
//// crashlyticsUploadSymbolsRelease
// }
// }
}
crashlytics {
enableNdk true
// androidNdkOut 'build/intermediates/cmake/debug/obj'
// androidNdkLibsOut 'build/intermediates/stripped_native_libs/debug/out/lib'
// androidNdkOut 'build/intermediates/cmake/release/obj'
// androidNdkLibsOut 'build/intermediates/merged_native_libs/debug/out/lib'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.12'
testImplementation 'androidx.test:core:1.2.0'
testImplementation "io.mockk:mockk:1.9.3"
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.karumi:dexter:6.0.2'
implementation 'org.koin:koin-android:0.9.2'
implementation 'com.android.billingclient:billing:1.1'
implementation 'com.google.android.exoplayer:exoplayer:2.11.1'
implementation('com.github.bumptech.glide:glide:4.10.0') {
exclude group: "com.android.support"
}
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
implementation 'com.google.firebase:firebase-ads:18.3.0'
implementation 'com.google.firebase:firebase-core:17.2.0' //17.2.1 Has a bug
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
implementation('com.crashlytics.sdk.android:crashlytics-ndk:2.1.1')
implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0"
implementation "android.arch.navigation:navigation-ui-ktx:1.0.0"
implementation 'com.beust:klaxon:5.0.1'
implementation 'com.h6ah4i.android.widget.verticalseekbar:verticalseekbar:1.0.0'
implementation 'us.belka:androidtoggleswitch:1.2.2'
implementation 'com.shawnlin:number-picker:2.4.8'
implementation 'com.github.Triggertrap:SeekArc:v1.1'
implementation 'com.sdsmdg.harjot:croller:1.0.7'
implementation 'com.jaredrummler:material-spinner:1.3.1'
implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3'
}
Я думаю, что проблема в шаге «Загрузка собственных символов». Я прочитал в другом посте , что после запуска ./gradlew crashlyticsUploadSymbolsRelease
или ./gradlew crashlyticsUploadSymbolsDebug
должна появиться строка типа «Успешно загруженные символы». Я не вижу эту строку после запуска задачи и не вижу никаких ошибок (я использовал --info и --debug). Я искал различные решения, предложенные для других постов, но, похоже, ничего не работает.
Версии
- Android Плагин Gradle: 3.5.3
- Версия Gradle: 5.4.1
- io.fabri c .tools: gradle: 1.31.2
Что еще нужно сделать перед загрузкой символов? Есть ли способ проверить, были ли они успешно загружены?
Спасибо!