Skip to content

Instantly share code, notes, and snippets.

@tomcurran
Last active May 13, 2020 10:33
Show Gist options
  • Save tomcurran/bdf5e6e52a79af92078498d3d12c6b70 to your computer and use it in GitHub Desktop.
Save tomcurran/bdf5e6e52a79af92078498d3d12c6b70 to your computer and use it in GitHub Desktop.
Resign Android APK
#!/bin/bash
# Original https://code.google.com/p/apk-resigner/
# Sample usage is as follows;
# ./resignapk myapp.apk debug.keystore android androiddebugkey android
#
# param1, APK file: myapp.apk
# param2, keystore location: ~/.android/debug.keystore
# param3, keystore password: android
# param4, keystore alias: androiddebugkey
# param5, keystore alias password: android
USER_HOME=$(eval echo ~${SUDO_USER})
ANDROID_SDK="/Library/Android/sdk"
ANDROID_BUILD_TOOLS_VERSION="23.0.1"
# use my debug key default
APK=$1
KEYSTORE="${2:-$USER_HOME/.android/debug.keystore}"
STOREPASS="${3:-android}"
ALIAS="${4:-androiddebugkey}"
ALIASPASS="${5:-android}"
# get the filename
APK_BASENAME=$(basename $APK)
APK_EXTENSION="${APK_BASENAME##*.}"
APK_FILENAME="${APK_BASENAME%.*}"
APK_SIGNED_UNALIGNED=$APK_FILENAME"-RESIGNED-UNALIGNED."$APK_EXTENSION
APK_SIGNED_ALIGNED=$APK_FILENAME"-RESIGNED."$APK_EXTENSION
#debug
echo param1 $APK
echo param2 $KEYSTORE
echo param3 $STOREPASS
echo param4 $ALIAS
echo param5 $ALIASPASS
rm -f $APK_SIGNED_UNALIGNED
rm -f $APK_SIGNED_ALIGNED
# delete META-INF folder
zip -d $APK META-INF/\*
# sign APK
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore "$KEYSTORE" -storepass "$STOREPASS" -keypass "$ALIASPASS" "$APK" "$ALIAS" -signedjar "$APK_SIGNED_UNALIGNED"
#zipalign
"$ANDROID_SDK"/build-tools/"$ANDROID_BUILD_TOOLS_VERSION"/zipalign -f -v 4 $APK_SIGNED_UNALIGNED $APK_SIGNED_ALIGNED
#verify
jarsigner -verify -verbose -keystore "$KEYSTORE" $APK_SIGNED_ALIGNED
rm -f $APK_SIGNED_UNALIGNED
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment