66 lines
2.3 KiB
Bash
Executable File
66 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build Paw Play without Gradle. Android 35 platform + build-tools 35's d8.jar.
|
|
set -euo pipefail
|
|
|
|
ROOT=$(cd -- "$(dirname -- "$0")" && pwd)
|
|
TOOLCHAIN=${TOOLCHAIN:-$HOME/android-toolchain}
|
|
ANDROID_JAR=${ANDROID_JAR:-$TOOLCHAIN/android-35/android.jar}
|
|
RESOURCE_JAR=${RESOURCE_JAR:-$TOOLCHAIN/android-34/android.jar}
|
|
D8_JAR=${D8_JAR:-$TOOLCHAIN/android-15/lib/d8.jar}
|
|
AAPT2=${AAPT2:-aapt2}
|
|
KEYSTORE=${KEYSTORE:-$ROOT/keystore/catplay.jks}
|
|
STOREPASS=${STOREPASS:-catplay-local}
|
|
KEYPASS=${KEYPASS:-catplay-local}
|
|
ALIAS=${ALIAS:-catplay}
|
|
BUILD_DIR=${BUILD_DIR:-$ROOT/build}
|
|
APK_OUT=${APK_OUT:-$ROOT/猫爪游乐场.apk}
|
|
|
|
for f in "$ANDROID_JAR" "$RESOURCE_JAR" "$D8_JAR"; do
|
|
[[ -f "$f" ]] || { echo "missing toolchain file: $f" >&2; exit 1; }
|
|
done
|
|
|
|
if [[ ! -f "$KEYSTORE" ]]; then
|
|
mkdir -p "$(dirname "$KEYSTORE")"
|
|
keytool -genkeypair -v \
|
|
-keystore "$KEYSTORE" -storetype PKCS12 \
|
|
-alias "$ALIAS" -keyalg RSA -keysize 2048 -validity 10000 \
|
|
-storepass "$STOREPASS" -keypass "$KEYPASS" \
|
|
-dname "CN=PawPlay, OU=Local, O=PawPlay, L=Local, ST=Local, C=CN" >/dev/null
|
|
fi
|
|
|
|
rm -rf "$BUILD_DIR"
|
|
mkdir -p "$BUILD_DIR/gen" "$BUILD_DIR/classes" "$BUILD_DIR/dex"
|
|
|
|
"$AAPT2" compile --dir "$ROOT/res" -o "$BUILD_DIR/res.zip"
|
|
"$AAPT2" link -o "$BUILD_DIR/unsigned.apk" \
|
|
-I "$RESOURCE_JAR" \
|
|
--manifest "$ROOT/AndroidManifest.xml" \
|
|
--java "$BUILD_DIR/gen" \
|
|
"$BUILD_DIR/res.zip"
|
|
|
|
SRC=$(find "$ROOT/src" -name '*.java' -print)
|
|
javac -source 8 -target 8 -Xlint:-options -encoding UTF-8 \
|
|
-cp "$ANDROID_JAR" -d "$BUILD_DIR/classes" \
|
|
$SRC "$BUILD_DIR/gen/com/local/pawplay/R.java"
|
|
|
|
jar cf "$BUILD_DIR/classes.jar" -C "$BUILD_DIR/classes" .
|
|
java -cp "$D8_JAR" com.android.tools.r8.D8 \
|
|
--min-api 26 --lib "$ANDROID_JAR" \
|
|
--output "$BUILD_DIR/dex" "$BUILD_DIR/classes.jar"
|
|
|
|
python3 - "$BUILD_DIR" <<'PY'
|
|
import sys, pathlib, zipfile
|
|
p = pathlib.Path(sys.argv[1])
|
|
with zipfile.ZipFile(p / 'unsigned.apk', 'a', compression=zipfile.ZIP_DEFLATED) as z:
|
|
z.write(p / 'dex/classes.dex', 'classes.dex')
|
|
PY
|
|
|
|
rm -f "$APK_OUT"
|
|
apksigner sign \
|
|
--ks "$KEYSTORE" --ks-key-alias "$ALIAS" \
|
|
--ks-pass "pass:$STOREPASS" --key-pass "pass:$KEYPASS" \
|
|
--out "$APK_OUT" "$BUILD_DIR/unsigned.apk"
|
|
apksigner verify --verbose "$APK_OUT" | sed -n '1,12p'
|
|
echo "Built: $APK_OUT"
|
|
ls -lh "$APK_OUT"
|