How to add debug symbols to build.gradle

AndroidFlutterDebuggingReleaseAndroid App-Bundle

Android Problem Overview


I have created android build of my Flutter application.

Then I created an internal testing release. It is showing a warning

> This App Bundle contains native code, and you've not uploaded debug > symbols. We recommend you upload a symbol file to make your crashes > and ANRs easier to analyze and debug.

Basically what I had to do is add following to build.gradle file according to the link they show.

android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }

I assume it is android/app/build.gradle they are talking about.

Not sure exactly where in that file I have to add this line.

Can someone point out where to add this line?

Android Solutions


Solution 1 - Android

To use the option ndk debugSymbolLevel as written in the docs you need an android gradle plugin 4.1 or later. At the time of writing the lastest 4.1 version is 4.1.2

You will need also to install ndk and cmake for android studio.

In your android build.gradle you need the to set android gradle plugin version 4.1.2:

buildscript {
    ...
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.2'
        ...
    }

Then in the android/app build.gradle add:

...
android {
    ...
    // you see the ndk version in the android studio sdk-manager
    // have a look also here: https://stackoverflow.com/a/65747847/9481613
    ndkVersion "21.3.6528147" 
    ...
    buildTypes {
        release {
            ...
            ndk {
                debugSymbolLevel 'SYMBOL_TABLE'
            }
        }   
    }
}

when you then run: flutter build appbundle it should finish after a while with an appbundle that is twice the size.

Solution 2 - Android

There's two places in the app/build.gradle where you can specify bundling of debugging symbols with your app. If you use android.defaultConfig.ndk.debugSymbolLevel it will apply it to all build types (i.e., both debug and release builds). On the other hand, if you use android.buildTypes.release.ndk.debugSymbolLevel it will apply only to your release build.

These options have to be added into your app/build.gradle file as you correctly guessed. When you see a build property that's in this dotted notation, it actually corresponds to nested blocks in the build.gradle, which would look a bit like this:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId 'com.example.foo'
        minSdkVersion 23
        targetSdkVersion 28
        versionCode 42
        versionName "4.0.2"
        ndk {
            debugSymbolLevel 'SYMBOL_TABLE'
        }
    }
    // Rest of the file
}

HTH

Solution 3 - Android

Use Android Version 4.1 and above currently 4.1 RC 3 and 4.2 Canary 13 is available, and similarly use com.android.tools.build:gradle 4.1 and above, you can search for the suitable version from here

Then use this line in android -> defaultConfig in your app build.gradle file

    ndk { debugSymbolLevel 'FULL' }

Solution 4 - Android

If none of solutions work, you can also create a Sample JNI Application from Android Studio's project templates. Build it and check whether it got built successfully and installed on a device.

I have inspected its app build.gradle file and compared my Flutter's build.gradle. So I added this to make it work:

defaultConfig {

    // append below:
    externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
            }
        }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJanakaView Question on Stackoverflow
Solution 1 - AndroidAdamView Answer on Stackoverflow
Solution 2 - AndroidAlbertoView Answer on Stackoverflow
Solution 3 - AndroidSid.The.BikerView Answer on Stackoverflow
Solution 4 - AndroidMichał Dobi DobrzańskiView Answer on Stackoverflow