Describe your environment
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.0.0-beta02'
classpath 'com.google.firebase:firebase-appdistribution-gradle:1.3.1'
}
Describe the problem
Steps to reproduce:
When I try to run:
./gradlew clean assembleRelease uploadCrashlyticsSymbolFileRelease
I get next error:
Execution failed for task ':app:generateCrashlyticsSymbolFileRelease'.
> java.io.IOException: Specified path for unstripped native libs is not a directory: /Users/martin/repos/example-app-android/app/obj
If I manually move all my NDK libs to ./app
folder I get the same error with different path:
Execution failed for task ':app:generateCrashlyticsSymbolFileRelease'.
> java.io.IOException: Specified path for stripped native libs is not a directory: /Users/martin/repos/example-app-android/app/build/intermediates/transforms/stripDebugSymbol/release
In this second case the build command sometimes fails, sometimes not.
This issue started to appear after I moved from Fabric Crashlytics plugin to Firebase Crashlytics plugin.
In the Fabric case, I had the option to define: androidNdkOut
and androidNdkLibsOut
paths.
Is that missing in the new Firebase plugin?
Relevant Code:
Old code example:
crashlytics {
enableNdk true
androidNdkOut "$buildDir/ndklibs/obj"
androidNdkLibsOut "$buildDir/ndklibs/libs"
}
New Code example:
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
In the Firebase case, I didn’t specify any paths.
To collect all ndk libs I use following code:
configurations {
ndkzip
}
task setupNdklibs(type: Sync) {
dependsOn configurations.ndkzip
from {
configurations.ndkzip.collect { zipTree(it) }
}
into "$buildDir/ndklibs/"
}
build.finalizedBy setupNdklibs
and executing ./gradlew build
In the new Firebase Crashlytics plugin, the
androidNdkOut
andandroidNdkLibsOut
properties have been changed tostrippedNativeLibsDir
andunstrippedNativeLibsDir
, and should be declared infirebaseCrashlytics
within the variant block, where you declarednativeSymbolUploadEnabled true
.Those options aren’t currently documented, though they will be shortly.
@mrichards I tested and I get the same issues, but now the problem is with the path:
It looks like this task prepends
<your-path-to-app>/app
tostrippedNativeLibsDir
andunstrippedNativeLibsDir
paths.Code:
I solved my problem using relative paths:
But it looks like a issue with the
app:generateCrashlyticsSymbolFileRelease
task 🙂Hello, thanks for your answer @mrichards
What should I do if I have a separate module with native code and include it in a project like aar?
Is it possible to work with new Crashlytics this way?
Crashlytics could not determine stripped/unstripped native library directories for project ‘:app’, variant Release. These are required for generating symbol files when NDK build tasks cannot be automatically inferred. Please specify strippedNativeLibsDir and unstrippedNativeLibsDir in the firebaseCrashlytics extension.