Usage:
./minimize.sh -n test.apk
For small APK without embedded resources for widgets. Minimal size is about 2.8 MB
./minimize.sh test.apk
Just repackage it. Minimal size is about 3.9 MB
| #!/bin/bash -e | |
| DELETE_RES=0 | |
| while test $# -gt 0; do | |
| case "$1" in | |
| -h|--help) | |
| echo "minimize.sh - repackage APK for minimal size" | |
| echo " " | |
| echo "./minimize.sh [--no-res|-n] <input.apk>" | |
| echo " " | |
| echo "options:" | |
| echo "-h, --help show brief help" | |
| echo "-n, --no-res uses plugin.beta for output" | |
| exit 0 | |
| ;; | |
| -n|--no-res) | |
| DELETE_RES=1 | |
| shift | |
| ;; | |
| *) | |
| break | |
| ;; | |
| esac | |
| done | |
| if [ ! -f "$1" ]; then | |
| echo "Must input APK! Run" | |
| echo "./minimize.sh -h" | |
| echo "for more info" | |
| exit 0 | |
| fi | |
| if [[ -z "${SDK_BUILD_TOOLS}" ]]; then | |
| SDK_BUILD_TOOLS=~/Library/Android/sdk/build-tools/$(ls -r ~/Library/Android/sdk/build-tools/ | head -n 1) | |
| # echo "Default build-tools: $SDK_BUILD_TOOLS" | |
| fi | |
| if [ ! -f "$SDK_BUILD_TOOLS/zipalign" ]; then | |
| echo "Cannot find Android SDK in ~/Library/Android/sdk/build-tools, default Android Studio location" | |
| echo "Set SDK_BUILD_TOOLS env to desired build tools location. For example:" | |
| echo "SDK_BUILD_TOOLS=~/Android/sdk/build-tools/26.0.2 ./minimize.sh -n myapk.apk" | |
| exit 0 | |
| fi | |
| OUT=$(mktemp -d) | |
| unzip -q "$1" -d "$OUT/out" | |
| pushd "$OUT/out" > /dev/null | |
| if [ $DELETE_RES == 1 ]; then | |
| rm -r res/raw | |
| fi | |
| zip -q -r ../zipped.apk . | |
| popd > /dev/null | |
| RESULT=$(dirname "$1")/mini-$(basename "$1") | |
| rm -f "$RESULT" | |
| "$SDK_BUILD_TOOLS/zipalign" -z 4 "$OUT/zipped.apk" "$OUT/aligned.apk" | |
| "$SDK_BUILD_TOOLS/apksigner" sign --ks /Applications/Corona/Corona\ Simulator.app/Contents/Resources/debug.keystore --ks-pass pass:"android" --out="$RESULT" --min-sdk-version=19 "$OUT/aligned.apk" |