blob: 29e403f1e29413b42b425c78d363ad7f902dc873 [file] [view]
# R8 Keep Radius
The "keep radius" of a keep rule refers to the negative impact that the rule has on the final application.
R8 provides a tool to analyze and visualize this keep radius. This helps developers:
* **Identify expensive rules**: Find keep rules that prevent R8 from
optimizing large parts of the application.
* **Debug dependencies**: See which libraries introduce broad keep rules.
* **Remove redundancy**: Discover rules that are not needed because they are
covered by other rules.
> **Note**: This feature is currently **experimental** and requires R8 version
> 9.2.14-dev or higher.
## Generating the R8 Configuration Analysis Report
R8 supports outputting a Configuration Analysis Report as an HTML file.
### Gradle
To generate the HTML report from a Gradle build, pass the
`com.android.tools.r8.dumpkeepradiushtmltodirectory` system property.
See [Replacing R8 in AGP](../README.md#replacing-r8-in-agp) for instructions on
how to update the R8 version in your build.
```bash
./gradlew assembleRelease \
--no-daemon \
-Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>
```
**Example**:
```bash
./gradlew assembleRelease \
--no-daemon \
-Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=/tmp/blastradius
```
### Android Platform
For builds within the Android Platform, set the `R8_DUMP_BLAST_RADIUS` environment variable to `true`.
```bash
R8_DUMP_BLAST_RADIUS=true m
```
This will generate an `r8blastradius.pb` file for each R8 build target within
`out/soong/.intermediates`.
## Visualizing the Data
The raw `.pb` file can be converted into an interactive HTML report using the
`BlastRadiusHtmlReportGenerator`.
### Converting a single file
Use the following command to convert a specific `.pb` file to HTML:
```bash
java -cp r8.jar com.android.tools.r8.blastradius.BlastRadiusHtmlReportGenerator \
<path_to_input_pb> <path_to_output_html>
```
**Example**:
```bash
java -cp r8.jar com.android.tools.r8.blastradius.BlastRadiusHtmlReportGenerator \
/tmp/blastradius/blastradius.pb /tmp/blastradius/report.html
```
### Converting multiple files (Android Platform)
If you have multiple blast radius files (e.g., from an Android Platform build),
you can generate a summary report for the directory:
```bash
java -cp prebuilts/r8/r8.jar com.android.tools.r8.blastradius.BlastRadiusHtmlReportGenerator \
<path_to_input_directory> <path_to_output_directory>
```
**Example**:
```bash
java -cp prebuilts/r8/r8.jar com.android.tools.r8.blastradius.BlastRadiusHtmlReportGenerator \
out/soong/.intermediates /tmp/blastradiusreport
```
This will scan the input directory for `.pb` files and generate an HTML report
in the output directory.