# `dumpstate` development tips

## To build `dumpstate`

Do a full build first:

```
m -j dumpstate
```

Then incremental ones:

```
mmm -j frameworks/native/cmds/dumpstate
```

If you're working on device-specific code, you might need to build them as well.
Example:

```
mmm -j frameworks/native/cmds/dumpstate device/acme/secret_device/dumpstate/ hardware/interfaces/dumpstate
```

## Dumpstate philosophy: exec not link

Never link code directly into dumpstate. Dumpstate should execute many
binaries and collect the results. In general, code should fail hard fail fast,
but dumpstate is the last to solve many Android bugs. Oftentimes, failures
in core Android infrastructure or tools are issues that cause problems in
bugreport directly, so bugreport should not rely on these tools working.
We want dumpstate to have as minimal of code loaded in process so that
only that core subset needs to be bugfree for bugreport to work. Even if
many pieces of Android break, that should not prevent dumpstate from
working.

## To build, deploy, and take a bugreport

```
mmm -j frameworks/native/cmds/dumpstate && adb push ${OUT}/system/bin/dumpstate system/bin && adb push ${OUT}/system/lib64/*dumpstate*.so /system/lib64/ && adb shell am bug-report
```

Make sure that the device is remounted before running the above command. * If
you're working with `userdebug` variant, you may need to run the following to
remount your device:

```
  adb root && adb remount -R && adb wait-for-device && adb root && adb remount
```

*   If you're working with `eng` variant, you may need to run the following to
    remount your device:

    ```
    adb root && adb remount
    ```

## To build, deploy, and run unit tests

First create `/data/nativetest64`:

```
adb shell mkdir /data/nativetest64
```

Then run:

```
mmm -j frameworks/native/cmds/dumpstate/ && adb push ${OUT}/data/nativetest64/dumpstate_* /data/nativetest64 && adb shell /data/nativetest64/dumpstate_test/dumpstate_test
```

And to run just one test (for example, `DumpstateTest.RunCommandNoArgs`):

```
mmm -j frameworks/native/cmds/dumpstate/ && adb push ${OUT}/data/nativetest64/dumpstate_test* /data/nativetest64 && adb shell /data/nativetest64/dumpstate_test/dumpstate_test --gtest_filter=DumpstateTest.RunCommandNoArgs
```

## To take quick bugreports

```
adb shell setprop dumpstate.dry_run true
```

## To emulate a device with user build

```
adb shell setprop dumpstate.unroot true
```

## To change the `dumpstate` version

```
adb shell setprop dumpstate.version VERSION_NAME
```

Example:

```
adb shell setprop dumpstate.version split-dumpsys && adb shell dumpstate -v
```

Then to restore the default version:

```
adb shell setprop dumpstate.version default
```

## To set Bugreport API workflow for bugreport

```
adb shell setprop settings_call_bugreport_api true
```

## Code style and formatting

Use the style defined at the
[Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) and
make sure to run the following command prior to `repo upload`:

```
git clang-format --style=file HEAD~
```

## Useful Bash tricks

```
export BR_DIR=/bugreports

alias br='adb shell cmd activity bug-report'
alias ls_bugs='adb shell ls -l ${BR_DIR}/'

unzip_bug() {
  adb pull ${BR_DIR}/$1 && emacs $1 && mv $1 /tmp
}

less_bug() {
  adb pull ${BR_DIR}/$1 && less $1 && mv $1 /tmp
}

rm_bugs() {
 if [ -z "${BR_DIR}" ] ; then echo "Variable BR_DIR not set"; else adb shell rm -rf ${BR_DIR}/*; fi
}

```
