1
0
forked from BRT/arc
arc/apk/arc-shot/build_manual.sh

62 lines
2.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Офлайн-сборка APK arc-shot напрямую через Android build-tools (без Gradle/AGP).
# Использует только локальный SDK + android.jar. Требует: javac (JDK 17+), Android SDK.
set -euo pipefail
cd "$(dirname "$0")"
SDK="${ANDROID_SDK_ROOT:-${ANDROID_HOME:-$HOME/Library/Android/sdk}}"
BT_VER="${BT_VER:-35.0.1}"
PLATFORM="${PLATFORM:-android-34}"
MIN_SDK="${MIN_SDK:-24}"
TARGET_SDK="${TARGET_SDK:-34}"
BT="$SDK/build-tools/$BT_VER"
ANDROID_JAR="$SDK/platforms/$PLATFORM/android.jar"
[ -d "$BT" ] || { echo "build-tools $BT_VER not found at $BT"; exit 1; }
[ -f "$ANDROID_JAR" ] || { echo "android.jar not found at $ANDROID_JAR"; exit 1; }
OUT="build"
rm -rf "$OUT"
mkdir -p "$OUT/classes" "$OUT/dex"
echo "[1/6] javac"
find src/main/java -name '*.java' > "$OUT/sources.txt"
javac --release 17 -classpath "$ANDROID_JAR" -d "$OUT/classes" @"$OUT/sources.txt"
echo "[2/6] d8 -> classes.dex"
CLASSES=$(find "$OUT/classes" -name '*.class')
"$BT/d8" --min-api "$MIN_SDK" --lib "$ANDROID_JAR" --output "$OUT/dex" $CLASSES
echo "[3/6] aapt2 link"
"$BT/aapt2" link \
-o "$OUT/app-unsigned.apk" \
-I "$ANDROID_JAR" \
--manifest src/main/AndroidManifest.xml \
--min-sdk-version "$MIN_SDK" \
--target-sdk-version "$TARGET_SDK"
echo "[4/6] add classes.dex"
cp "$OUT/dex/classes.dex" "$OUT/classes.dex"
( cd "$OUT" && zip -j -q app-unsigned.apk classes.dex )
echo "[5/6] zipalign"
"$BT/zipalign" -f -p 4 "$OUT/app-unsigned.apk" "$OUT/app-aligned.apk"
echo "[6/6] sign"
# Keystore держим ВНЕ build/ — иначе rm -rf build стирает ключ и подпись меняется
# каждую пересборку (INSTALL_FAILED_UPDATE_INCOMPATIBLE при обновлении на устройстве).
KS="debug.keystore"
if [ ! -f "$KS" ]; then
keytool -genkeypair -keystore "$KS" -storepass android -keypass android \
-alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 \
-dname "CN=Android Debug,O=Android,C=US" >/dev/null 2>&1
fi
"$BT/apksigner" sign \
--ks "$KS" --ks-pass pass:android --ks-key-alias androiddebugkey --key-pass pass:android \
--out "$OUT/arc-shot.apk" "$OUT/app-aligned.apk"
echo "OK -> $OUT/arc-shot.apk"
"$BT/aapt2" dump badging "$OUT/arc-shot.apk" 2>/dev/null | grep -E "package:|launchable-activity:|uses-permission: name='android.permission.(MANAGE_EXTERNAL_STORAGE|FOREGROUND_SERVICE)'" || true