Flutter does not include Native Debug Symbols

509

Turns out the problem is occurring, for some reason, due to my usage of gradle plugin 7.1.1. Changing classpath 'com.android.tools.build:gradle:7.1.1' to 'classpath 'com.android.tools.build:gradle:4.1.3'` fixes my problem. The google play console recognizes the native debug symbols within the app bundle. It's unclear why, except within the app bundle, the directory BUNDLE-METADATA contains the directories:
Using 7.1.1:

com.android.tools.build.gradle
com.android.tools.build.libraries
com.android.tools.build.obfuscation

Using 4.1.3:

com.android.tools.build.debugsymbols
com.android.tools.build.libraries
com.android.tools.build.obfuscation

I've tried it with multiple versions of the android gradle plugin, and I can say that the problem occurs after android gradle plugin version 4.1.3. So my fix right now is to make android/build.gradle have:

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.3'
        ...
    }
}

The next version of the plugin, 4.2.0, omits the native debug files, despite this inclusion in app/build.gradle:

android {
    ...
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
        jniLibs {
            useLegacyPackaging true
        }
    }
}
Share:
509
Jaden Lorenc
Author by

Jaden Lorenc

Updated on January 03, 2023

Comments

  • Jaden Lorenc
    Jaden Lorenc over 1 year

    Building my app using flutter on android studio, and when I upload my app bundle (made via flutter build appbundle, the message pops up:

    Warning
    
    This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
    

    I've tried every solution currently online to fix this. Every combination of the following:
    these solutions:

    Upgrading to Flutter 2.10.0
    Upgrading to Android Studio Bumblebee | 2021.1.1 Patch 1 and clicking check for updates, to which it responds You already have the latest version of Android Studio and plugins installed.
    Trying to check the gradle plugin version, but it's packaged into android studio, and I can't see the version nor an option to upgrade.
    Upgrading Android SDK build tools to 33-rc1. via SDK manager
    Installing NDK (Side-by-side) via SDK manager
    Installing CMake via SDK manager
    Adding ndk.dir=/home/jaden/Android/Sdk/ndk/23.1.7779620 to the local.properties file, even though that's apparently deprecated. adding android.buildTypes.release.ndk.debugSymbolLevel = 'SYMBOL_TABLE' to the bottom of my app/build.gradle.
    from app/build.gradle:

    android {
        compileSdkVersion 31
    
        ...
    
        defaultConfig {
            applicationId "app.(myapp)"
            minSdkVersion 23
            targetSdkVersion 31
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
        }
        ndkVersion "23.1.7779620"
        buildTypes {
            ...
            release {
                signingConfig signingConfigs.release
                ndk {
                    debugSymbolLevel 'SYMBOL_TABLE'
                }
            }
        }
    }
    
    

    flutter doctor:

    flutter doctor
    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
    [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    [✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
        ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
    [✓] Android Studio (version 2021.1)
    [!] Connected device
        ! No devices available
    [✓] HTTP Host Availability
    
    ! Doctor found issues in 2 categories.
    

    last lines of flutter build appbundle -v:

    [        ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
    [        ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
    [        ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
    [        ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
    [        ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
    [        ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
    [        ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
    [        ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
    [        ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
    [        ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
    [        ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
    [        ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
    [        ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
    [        ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
    [  +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
    [        ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
    [        ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
    [        ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
    [        ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
    [        ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
    [        ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
    [        ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
    [        ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
    [        ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
    [        ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
    [        ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
    [        ] > Task :app:compileReleaseAidl NO-SOURCE
    [        ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
    [        ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
    [        ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
    [ +495 ms] > Task :app:copyFlutterAssetsRelease
    [        ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
    [        ] > Task :app:processReleaseResources UP-TO-DATE
    [        ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
    [        ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
    [  +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
    [        ] > Task :app:javaPreCompileRelease UP-TO-DATE
    [        ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
    [        ] > Task :app:extractProguardFiles UP-TO-DATE
    [        ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
    [        ] > Task :app:processReleaseJavaRes NO-SOURCE
    [        ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
    [        ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
    [        ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
    [        ] > Task :file_picker:bundleLibResRelease NO-SOURCE
    [        ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
    [        ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
    [        ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
    [        ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
    [        ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
    [        ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
    [        ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
    [        ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
    [        ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
    [        ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
    [        ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
    [        ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
    [        ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
    [        ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
    [        ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
    [        ] > Task :image_picker:bundleLibResRelease NO-SOURCE
    [        ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
    [        ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
    [        ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
    [        ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
    [        ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
    [        ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
    [        ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
    [        ] > Task :share_plus:bundleLibResRelease NO-SOURCE
    [        ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
    [        ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
    [        ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
    [        ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
    [        ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
    [        ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
    [        ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
    [        ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
    [        ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
    [ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
    [        ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [  +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [  +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
    [        ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
    [        ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
    [  +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
    [        ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
    [        ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
    [+2799 ms] > Task :app:buildReleasePreBundle
    [        ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
    [        ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
    [        ] > Task :app:compileReleaseArtProfile UP-TO-DATE
    [        ] > Task :app:collectReleaseDependencies UP-TO-DATE
    [        ] > Task :app:configureReleaseDependencies UP-TO-DATE
    [        ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
    [        ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
    [        ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
    [        ] > Task :app:validateSigningRelease UP-TO-DATE
    [+3397 ms] > Task :app:packageReleaseBundle
    [+4398 ms] > Task :app:shrinkBundleReleaseResources
    [+5699 ms] > Task :app:signReleaseBundle
    [        ] > Task :app:produceReleaseBundleIdeListingFile
    [        ] > Task :app:createReleaseBundleListingFileRedirect
    [        ] > Task :app:bundleRelease
    [  +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
    [        ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
    [        ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
    [        ] BUILD SUCCESSFUL in 36s
    [        ] 375 actionable tasks: 11 executed, 364 up-to-date
    [ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
    [  +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
    [   +5 ms] "flutter appbundle" took 39,072ms.
    [ +235 ms] ensureAnalyticsSent: 224ms
    [   +5 ms] Running shutdown hooks
    [   +1 ms] Shutdown hooks complete
    [   +3 ms] exiting with code 0
    
    

    What's insane is that the flutter documentation for building and releasing an android app says absolutely nothing about including native debug symbols. That leads me to believe that for some reason, flutter should already be including them in the app bundle, but it's not. Does it have anything to do with obfuscating my code? I didn't obfuscate mine, but do I need to use the solutions described in there to pull out the native debug symbols?
    Is this even supported? Should I just upload the app as-is without the feature? What am I supposed to do when I get unintelligible crash reports?