chromium/third_party/r8/playground/build.sh

#!/bin/bash
# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Usage:
# Make edits to *.java and *.pgcfg
# Then run: ./build.sh | less

set -e
cd $(dirname $0)

# Returns the first parameter after ensuring the path exists.
function get_path() {
  if [[ ! -f $1 ]]; then
    >&2 echo "Pattern matched no files: $1"
    exit 1
  fi
  echo "$1"
}

ANDROID_JAR=$(get_path ../../android_sdk/public/platforms/*/android.jar)
DEXDUMP=$(get_path ../../android_sdk/public/build-tools/*/dexdump)
R8_PATH=$(get_path ../cipd/lib/r8.jar)
JAVA_HOME=../../jdk/current
JAVA_BIN=../../jdk/current/bin
MIN_API=24

# E.g.:
# EXTRA_JARS=../../../out/Release/obj/components/autofill_assistant/browser/proto_java.javac.jar:../../../out/Release/obj/clank/third_party/google3/protobuf.processed.jar

# Uncomment to create r8inputs.zip:
# DUMP_INPUTS=-Dcom.android.tools.r8.dumpinputtofile=r8inputs.zip

rm -f *.class
$JAVA_BIN/javac -cp $ANDROID_JAR:$EXTRA_JARS --release 11 *.java
$JAVA_BIN/java -cp $R8_PATH $DUMP_INPUTS com.android.tools.r8.R8 \
    --min-api $MIN_API \
    --lib "$JAVA_HOME" \
    --lib "$ANDROID_JAR" \
    --no-minification \
    --pg-conf playground.pgcfg \
    --pg-map-output Playground.mapping \
    --output . \
    ${EXTRA_JARS/:/ } \
    *.class
$DEXDUMP -d classes.dex > dexdump.txt

du -b *.dex
echo 'Outputs are: Playground.mapping, classes.dex, dexdump.txt'