xref: /aosp_15_r20/external/google-breakpad/README.ANDROID (revision 9712c20fc9bbfbac4935993a2ca0b3958c5adad2)
1*9712c20fSFrederick MayleGoogle Breakpad for Android
2*9712c20fSFrederick Mayle===========================
3*9712c20fSFrederick Mayle
4*9712c20fSFrederick MayleThis document explains how to use the Google Breakpad client library
5*9712c20fSFrederick Mayleon Android, and later generate valid stack traces from the minidumps
6*9712c20fSFrederick Mayleit generates.
7*9712c20fSFrederick Mayle
8*9712c20fSFrederick MayleThis release supports ARM, x86 and MIPS based Android systems.
9*9712c20fSFrederick MayleThis release requires NDK release r11c or higher.
10*9712c20fSFrederick Mayle
11*9712c20fSFrederick MayleI. Building the client library:
12*9712c20fSFrederick Mayle===============================
13*9712c20fSFrederick Mayle
14*9712c20fSFrederick MayleThe Android client is built as a static library that you can
15*9712c20fSFrederick Maylelink into your own Android native code. There are two ways to
16*9712c20fSFrederick Maylebuild it:
17*9712c20fSFrederick Mayle
18*9712c20fSFrederick MayleI.1. Building with ndk-build:
19*9712c20fSFrederick Mayle-----------------------------
20*9712c20fSFrederick Mayle
21*9712c20fSFrederick MayleIf you're using the ndk-build build system, you can follow
22*9712c20fSFrederick Maylethese simple steps:
23*9712c20fSFrederick Mayle
24*9712c20fSFrederick Mayle  1/ Include android/google_breakpad/Android.mk from your own
25*9712c20fSFrederick Mayle     project's Android.mk
26*9712c20fSFrederick Mayle
27*9712c20fSFrederick Mayle     This can be done either directly, or using ndk-build's
28*9712c20fSFrederick Mayle     import-module feature.
29*9712c20fSFrederick Mayle
30*9712c20fSFrederick Mayle  2/ Link the library to one of your modules by using:
31*9712c20fSFrederick Mayle
32*9712c20fSFrederick Mayle     LOCAL_STATIC_LIBRARIES += breakpad_client
33*9712c20fSFrederick Mayle
34*9712c20fSFrederick MayleNOTE: The client library requires a C++ STL implementation,
35*9712c20fSFrederick Mayle      which you can select with APP_STL in your Application.mk
36*9712c20fSFrederick Mayle
37*9712c20fSFrederick Mayle      It has been tested succesfully with both STLport and GNU libstdc++
38*9712c20fSFrederick Mayle
39*9712c20fSFrederick Mayle
40*9712c20fSFrederick MayleI.2. Building with a standalone Android toolchain:
41*9712c20fSFrederick Mayle--------------------------------------------------
42*9712c20fSFrederick Mayle
43*9712c20fSFrederick MayleAll you need to do is configure your build with the right 'host'
44*9712c20fSFrederick Maylevalue, and disable the processor and tools, as in:
45*9712c20fSFrederick Mayle
46*9712c20fSFrederick Mayle  $GOOGLE_BREAKPAD_PATH/configure --host=arm-linux-androideabi \
47*9712c20fSFrederick Mayle                                  --disable-processor \
48*9712c20fSFrederick Mayle                                  --disable-tools
49*9712c20fSFrederick Mayle  make -j4
50*9712c20fSFrederick Mayle
51*9712c20fSFrederick MayleThe library will be under src/client/linux/libbreakpad_client.a
52*9712c20fSFrederick Mayle
53*9712c20fSFrederick MayleYou can also use 'make check' to run the test suite on a connected
54*9712c20fSFrederick MayleAndroid device. This requires the Android 'adb' tool to be in your
55*9712c20fSFrederick Maylepath.
56*9712c20fSFrederick Mayle
57*9712c20fSFrederick MayleII. Using the client library in Android:
58*9712c20fSFrederick Mayle========================================
59*9712c20fSFrederick Mayle
60*9712c20fSFrederick MayleThe usage instructions are very similar to the Linux ones that are
61*9712c20fSFrederick Maylefound at https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/linux_starter_guide.md
62*9712c20fSFrederick Mayle
63*9712c20fSFrederick Mayle1/ You need to include "client/linux/handler/exception_handler.h" from a C++
64*9712c20fSFrederick Mayle   source file.
65*9712c20fSFrederick Mayle
66*9712c20fSFrederick Mayle2/ If you're not using ndk-build, you also need to:
67*9712c20fSFrederick Mayle
68*9712c20fSFrederick Mayle   - add the following to your compiler include search paths:
69*9712c20fSFrederick Mayle       $GOOGLE_BREAKPAD_PATH/src
70*9712c20fSFrederick Mayle       $GOOGLE_BREAKPAD_PATH/src/common/android/include
71*9712c20fSFrederick Mayle
72*9712c20fSFrederick Mayle   - add -llog to your linker flags
73*9712c20fSFrederick Mayle
74*9712c20fSFrederick Mayle   Note that ndk-build does that for your automatically.
75*9712c20fSFrederick Mayle
76*9712c20fSFrederick Mayle3/ Keep in mind that there is no /tmp directory on Android.
77*9712c20fSFrederick Mayle
78*9712c20fSFrederick Mayle   If you use the library from a regular Android applications, specify a
79*9712c20fSFrederick Mayle   path under your app-specific storage directory. An alternative is to
80*9712c20fSFrederick Mayle   store them on the SDCard, but this requires a specific permission.
81*9712c20fSFrederick Mayle
82*9712c20fSFrederick MayleFor a concrete example, see the sample test application under
83*9712c20fSFrederick Mayleandroid/sample_app. See its README for more information.
84*9712c20fSFrederick Mayle
85*9712c20fSFrederick Mayle
86*9712c20fSFrederick MayleIII. Getting a stack trace on the host:
87*9712c20fSFrederick Mayle=======================================
88*9712c20fSFrederick Mayle
89*9712c20fSFrederick MayleThis process is similar to other platforms, but here's a quick example:
90*9712c20fSFrederick Mayle
91*9712c20fSFrederick Mayle1/ Retrieve the minidumps on your development machine.
92*9712c20fSFrederick Mayle
93*9712c20fSFrederick Mayle2/ Dump the symbols for your native libraries with the 'dump_syms' tool.
94*9712c20fSFrederick Mayle   This first requires building the host version of Google Breakpad, then
95*9712c20fSFrederick Mayle   calling:
96*9712c20fSFrederick Mayle
97*9712c20fSFrederick Mayle      dump_syms $PROJECT_PATH/obj/local/$ABI/libfoo.so > libfoo.so.sym
98*9712c20fSFrederick Mayle
99*9712c20fSFrederick Mayle3/ Create the symbol directory hierarchy.
100*9712c20fSFrederick Mayle
101*9712c20fSFrederick Mayle   The first line of the generated libfoo.so.sym will have a "MODULE"
102*9712c20fSFrederick Mayle   entry that carries a hexadecimal version number, e.g.:
103*9712c20fSFrederick Mayle
104*9712c20fSFrederick Mayle     MODULE Linux arm D51B4A5504974FA6ECC1869CAEE3603B0 test_google_breakpad
105*9712c20fSFrederick Mayle
106*9712c20fSFrederick Mayle   Note: The second field could be either 'Linux' or 'Android'.
107*9712c20fSFrederick Mayle
108*9712c20fSFrederick Mayle   Extract the version number, and a 'symbol' directory, for example:
109*9712c20fSFrederick Mayle
110*9712c20fSFrederick Mayle      $PROJECT_PATH/symbols/libfoo.so/$VERSION/
111*9712c20fSFrederick Mayle
112*9712c20fSFrederick Mayle   Copy/Move your libfoo.sym file there.
113*9712c20fSFrederick Mayle
114*9712c20fSFrederick Mayle4/ Invoke minidump_stackwalk to create the stack trace:
115*9712c20fSFrederick Mayle
116*9712c20fSFrederick Mayle     minidump_stackwalk $MINIDUMP_FILE $PROJECT_PATH/symbols
117*9712c20fSFrederick Mayle
118*9712c20fSFrederick MayleNote that various helper scripts can be found on the web to automate these
119*9712c20fSFrederick Maylesteps.
120*9712c20fSFrederick Mayle
121*9712c20fSFrederick MayleIV. Verifying the Android build library:
122*9712c20fSFrederick Mayle========================================
123*9712c20fSFrederick Mayle
124*9712c20fSFrederick MayleIf you modify Google Breakpad and want to check that it still works correctly
125*9712c20fSFrederick Mayleon Android, please run the android/run-checks.sh script which will do all
126*9712c20fSFrederick Maylenecessary verifications for you. This includes:
127*9712c20fSFrederick Mayle
128*9712c20fSFrederick Mayle  - Rebuilding the full host binaries.
129*9712c20fSFrederick Mayle  - Rebuilding the full Android binaries with configure/make.
130*9712c20fSFrederick Mayle  - Rebuilding the client library unit tests, and running them on a device.
131*9712c20fSFrederick Mayle  - Rebuilding the client library with ndk-build.
132*9712c20fSFrederick Mayle  - Building, installing and running a test crasher program on a device.
133*9712c20fSFrederick Mayle  - Extracting the corresponding minidump, dumping the test program symbols
134*9712c20fSFrederick Mayle    and generating a stack trace.
135*9712c20fSFrederick Mayle  - Checking the generated stack trace for valid source locations.
136*9712c20fSFrederick Mayle
137*9712c20fSFrederick MayleFor more details, please run:
138*9712c20fSFrederick Mayle
139*9712c20fSFrederick Mayle  android/run-checks.sh --help-all
140