Using the Memfault CLI tool to upload
The easiest way to upload Android bugreport and/or symbol files is using the Memfault CLI tool.
The rest of this guide assumes you have the Memfault CLI tool installed. If you have not installed it yet, please follow the installation instructions.
Uploading Android binary symbol files
When processing traces from a bugreport.zip, Memfault will attempt to provide source file and line numbers for stackframes from native binaries. In order to do this, the symbol files for these native binaries need to be uploaded to Memfault.
Android OS symbol files
When building the Android OS, the final image will contain executables from
which the symbols (debug info) has been stripped. Usually, "unstripped" versions
of the executables are also kept in the build output. For example, in builds of
recent versions of AOSP, they are output in
out/target/product/generic/symbols/**. The exact location may be a bit
different for your project. To test
whether a file contains symbols, check out this article.
To upload all symbol files, run this command:
$ memfault --email <EMAIL> --password <PASSWORD> --org <ORG_SLUG> \--project <PROJ_SLUG> upload-symbols out/target/product/generic/symbols
It's best to hook this into Continuous Integration when a build is released for internal consumption so that Memfault will immediately have the ability to symbolicate crashes.
The command will run through all files in the given directory. For each file, it will check whether it's a symbol file that has not yet been uploaded and upload it if necessary. The output of the command looks like this:
INFO: /aosp/symbols/out/target/product/vsoc_x86/symbols/init: ELF file with .debug_info and GNU Build ID: 706b026c8cc3e970b409d79c11c182a5INFO: /aosp/symbols/out/target/product/vsoc_x86/symbols/init: uploaded!INFO: /aosp/symbols/out/target/product/vsoc_x86/symbols/apex/com.android.adbd/bin/adbd: ELF file with .debug_info and GNU Build ID: 37398ca3d0492ba8b1e708a13ab2f9e0INFO: /aosp/symbols/out/target/product/vsoc_x86/symbols/apex/com.android.adbd/bin/adbd: uploaded!INFO: /aosp/symbols/out/target/product/vsoc_x86/symbols/apex/com.android.adbd/lib/libcrypto.so: ELF file with .debug_info and GNU Build ID: a2a7ab7cea9d8c482f31b3ee3a71c5eeINFO: /aosp/symbols/out/target/product/vsoc_x86/symbols/apex/com.android.adbd/lib/libcrypto.so: skipping, already uploaded.... etc ...
Android NDK app symbol files
For Android apps that use the Android NDK or JNI (Java Native Interface), binary symbol files will need to be uploaded for each app.
The symbol files can be found in the build output folder of the app at:
The Android NDK builds .so files for various CPU architectures. You only need to
upload for the architectures that your (virtual) devices actually use and expect
to process bugreports from. However, the easiest is to upload all of them by
memfault tool to the parent folder:
$ memfault --email <EMAIL> --password <PASSWORD> --org <ORG_SLUG> \--project <PROJ_SLUG> <APP_SOURCE_ROOT>/build/intermediates/cmake/debug
Uploading an Android bugreport.zip
To upload a bugreport.zip file that is located at, for example
/path/to/bugreport.zip, run this command:
$ memfault --email <EMAIL> --password <PASSWORD> --org <ORG_SLUG> \--project <PROJ_SLUG> upload-bugreport /path/to/bugreport.zip
Note: support for passing a
Memfault-Project-Key instead of email, password,
org and project to the tool is coming soon.
Uploading without the Memfault CLI tool
Uploading is a 3 step process:
- "Prepare" the file upload by making a
/api/v0/uploadto obtain a
- Make a
PUTrequest to the
upload_urlto upload the file.
- Finally, make a
POSTrequest with the
tokento the appropriate upload processing API. For example, after uploading an Android Bugreport file,
Please consult the HTTP API documentation for details on each of the requests.