I had the need to take an existing Android APK, tweak it, and rebuild. This is not too difficult, but I did have to download the tools from a few different sites, and find a full list of instructions. Thus to make this easier, here is a quick recap of what’s needed.
Download the following:
- apktool - tool for reverse engineering Android apk files. In this case can extract and rebuild.
- keytool - Java tool for creating keys/certs. Comes with the JDK.
- jarsigner Java tool for signing JAR/APK files. Comes with the JDK.
- zipalign - archive alignment tool, that comes with the Android SDK.
Optionally setup some alias:
alias apktool='java -jar ~/bin/apktool_2.0.1.jar' alias dex2jar='~/bin/dex2jar-2.0/d2j-dex2jar.sh' alias jd-gui='java -jar ~/bin/jd-gui-1.3.0.jar'
First, unpack the application.apk file. This will create a “application” directory with assets, resources, compiled code, etc.
apktool d -r -s application.apk
Now poke around, and edit any of the files in the application directory. If you wish to decompile any java you can do the following:
# Convert the Dex files into standard class files dex2jar application/classes.dex # Now use the JD (Java Decompiler) to inspect the source jd-gui classes-dex2jar.jar
Once you have made your changes, you need to repack the APK. This will create a
apktool b -f -d application mv application/dist/application.apk my_application.apk
The APK must be signed before it will run on a device. Create a key if you don’t have an existing one. If prompted for a password, enter anything (but remember it).
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name \ -keyalg RSA -keysize 2048 -validity 10000
Now sign the APK with the key:
# Sign the apk jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name # Verify apk jarsigner -verify -verbose -certs my_application.apk
Finally, the apk must be aligned for optimal loading:
zipalign -v 4 my_application.apk my_application-aligned.apk
Voila, now you have a
my_application-aligned.apk file, which you can side load onto your device.