How to Fix “This App Bundle Contains Native Code, and You've Not Uploaded Debug Symbols” Warning in Google Play Console
While uploading your Android app to Google Play Console, you may see this 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.
What Does This Warning Mean?
Android apps are mainly built using:
- Kotlin
- Java
But some libraries use:
- C
- C++
These are called Native Libraries.
Native libraries are compiled into .so files.
libavcodec.so libffmpeg.so libxyz.so
When your app crashes inside native code, Google Play Console cannot properly understand the crash unless debug symbols are uploaded.
What Are Debug Symbols?
Debug symbols are special files that help Google Play Console convert unreadable crash reports into readable crash details.
Without debug symbols:
#00 pc 00000000001a2f8c #01 pc 00000000003bc920
With debug symbols:
compressVideo() VideoCompressor.cpp line 245
This makes debugging much easier.
Why Does This Warning Appear?
This warning appears when your app includes native .so files.
Common Libraries That Use Native Code
| Library / Feature | Uses Native Code? |
|---|---|
| FFmpeg | Yes |
| Media3 Transformer | Sometimes |
| OpenCV | Yes |
| TensorFlow Lite | Yes |
| Video Compression SDKs | Yes |
If you are building:
- Video Compressor App
- Video Editor App
- Camera App
- AI App
- Game App
then this warning is very common.
How to Check if Your App Contains Native Code
Open your APK or AAB file and check for folders like:
lib/arm64-v8a/ lib/armeabi-v7a/
If you see .so files inside these folders, your app contains native code.
How to Fix This Warning
Method 1 — Upload Native Debug Symbols (Recommended)
Step 1: Add Debug Symbol Configuration
Add the following inside your app-level build.gradle file:
android {
buildTypes {
release {
ndk {
debugSymbolLevel 'FULL'
}
}
}
}
Alternative Option
debugSymbolLevel 'SYMBOL_TABLE'
| Option | Size | Information |
|---|---|---|
| FULL | Large | Complete debugging information |
| SYMBOL_TABLE | Smaller | Basic crash decoding |
Step 2: Generate Signed Bundle
Generate your release bundle:
Build → Generate Signed Bundle / APK
After the build completes, go to:
app/build/outputs/native-debug-symbols/release/
You will find:
native-debug-symbols.zip
Step 3: Upload Symbols to Google Play Console
Go to:
Google Play Console → Your App → App Bundle Explorer → Select Release → Upload Debug Symbols
Upload:
native-debug-symbols.zip
Method 2 — If Using CMake
If your app uses CMake, add:
android {
buildTypes {
release {
ndk {
debugSymbolLevel 'FULL'
}
}
}
}
Also add:
packagingOptions {
doNotStrip "**/*.so"
}
Method 3 — Ignore the Warning
You can ignore this warning if:
- Your app rarely crashes
- You don't need native crash reports
- The warning comes from third-party libraries
Your app will still publish successfully.
Example Scenario
Suppose your app uses:
implementation "androidx.media3:media3-transformer"
or:
implementation "com.arthenica:ffmpeg-kit"
These libraries include native .so files, so Google Play Console shows this warning.
Does This Affect Users?
No.
- Users can install the app normally
- The app works normally
- Users never see this warning
Does This Affect App Approval?
No.
Google Play usually still approves the app.
This warning only helps developers improve crash debugging.
Best Practice Recommendation
For production apps, always upload debug symbols.
Especially for:
- Video Apps
- Camera Apps
- FFmpeg Apps
- AI Apps
- Games
Full Recommended Configuration
android {
buildTypes {
release {
minifyEnabled true
ndk {
debugSymbolLevel 'FULL'
}
}
}
}
Using Firebase Crashlytics
If you use Firebase Crashlytics with NDK support:
plugins {
id 'com.google.firebase.crashlytics'
}
Add:
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
This automatically uploads native symbols.
Final Summary
| Question | Answer |
|---|---|
| Why does this warning appear? | Your app contains native .so files |
| Is it an error? | No, only a warning |
| Can the app still be published? | Yes |
| Should you fix it? | Yes, recommended |
| Main Fix? | Upload native debug symbols |
| Where are symbols generated? | build/outputs/native-debug-symbols/ |
| Where to upload? | Play Console → App Bundle Explorer |
Simple Beginner Explanation
Think of debug symbols like a translation file for crashes.
Without symbols:
Crash at memory address 0x000123
With symbols:
Crash in compressVideo() at line 45
That is why Google recommends uploading debug symbols.
