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" |