#!/bin/bash # Builds Minamp.apk for Android 2.2+ without the Android SDK/Gradle: # aapt2 (resources) -> javac (Java 8 bytecode vs android-8 API) -> dx (dex 035) -> jarsigner (v1/SHA-1) -> zipalign. set -euo pipefail cd "$(dirname "$0")" T=${TOOLS:-$PWD/toolchain} ANDROID_JAR=$T/platforms/android-8/android.jar BC_SRC=$T/bcsrc OUT=build rm -rf $OUT && mkdir -p $OUT/res $OUT/gen $OUT/classes echo "== resources" $T/aapt2 compile --dir res -o $OUT/res/compiled.zip $T/aapt2 link -o $OUT/base.apk -I $ANDROID_JAR --manifest AndroidManifest.xml \ --java $OUT/gen -A assets --min-sdk-version 8 --target-sdk-version 10 \ --no-version-vectors $OUT/res/compiled.zip echo "== java" find src $OUT/gen -name '*.java' > $OUT/sources.txt javac -nowarn -Xlint:-options -source 8 -target 8 -encoding UTF-8 -g:source,lines \ -bootclasspath $ANDROID_JAR -sourcepath "src:$BC_SRC:$OUT/gen" \ -d $OUT/classes @$OUT/sources.txt 2>&1 | grep -v -E '^Picked up|^Note:' || true test -f $OUT/classes/com/minamp/HomeActivity.class echo "== dex" java -Xmx2g -jar $T/dx.jar --dex --output=$OUT/classes.dex $OUT/classes 2>&1 | grep -v '^Picked up' || true echo "== package" cp $OUT/base.apk $OUT/unsigned.apk (cd $OUT && zip -q unsigned.apk classes.dex) jarsigner -keystore ${KEYSTORE:-$T/minamp.keystore} -storepass minamp123 -keypass minamp123 \ -digestalg SHA-1 -sigalg SHA1withRSA -signedjar $OUT/signed.apk $OUT/unsigned.apk minamp 2>&1 \ | grep -v -E '^Picked up|^$|Warning|risk|self-signed|POSIX|ignored when signing|not protected' || true python3 tools/zipalign.py $OUT/signed.apk $OUT/Minamp.apk ls -la $OUT/Minamp.apk