24

Currently I'm getting the apk signed with the private keystore file but I want to sign that apk with different keystore file. How can I resign that apk..?

Rookie
  • 8,660
  • 17
  • 58
  • 91

4 Answers4

37

You can resign your apk with different keystore.

Follow these steps:

Signing for release: $1.apk -> $1_release.apk"

Step 1: Removing any previous signing

  • Change the extension of your .apk to .zip.
  • Open and delete the folder META-INF
  • Change the extension to .apk
    Or
    Command: zip [originalapk]
    Example: zip "$1".apk -d

Step 2: Signing with release.keystore:

Command:

jarsigner –verbose –keystore [keystorefile] –signedjar [unalignedapk] [originalapk] alias_name

Example:

C:\Program Files\Java\jdk1.6.0_43\bin> jarsigner -verbose -keystore release.keystore -signedjar "$1"_unaligned.apk "$1".apk release

Step 3: Aligning

Command: zipalign -f 4 [unalignedapk] [releaseapk]

Example:

C:\Users\Downloads\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk\too ls>zipalign -f 4 "$1"_unaligned.apk "$1"_release.apk

Step 4: Cleaning up

Command: rm 4 [unalignedapk]
Example: rm "$1"_unaligned.apk


Additional Commands might help:

  1. To generate new key with keytool
keytool -genkey -alias  -keystore  
  1. To list keys
keytool -list -keystore 

Note:

To sign our apks we have downgraded JDK from 1.7 to 1.6.0_43 update.

Reason:

As of JDK 7, the default signing algorithim has changed, requiring you to specify the signature and digest algorithims (-sigalg and -digestalg) when you sign an APK.

Command:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile] [originalapk] alias_name
Hugo Dozois
  • 8,147
  • 12
  • 54
  • 58
Vihana Kewalramani
  • 915
  • 11
  • 14
19

you should check below SO thread

Can I resign an .apk with a different certificate

or this one also may help you

Community
  • 1
  • 1
swiftBoy
  • 35,607
  • 26
  • 136
  • 135
  • what would be the path for this command..Jarsigner -verbose -keystore debug.keystore yourapk.apk aliasname – Rookie Jun 06 '12 at 11:43
10

You can also use the open-source apk-resigner script, which is very easy to use.

APK-resigner: https://github.com/onbiron/apk-resigner

./signapk.sh calculator.apk ~/.android/debug.keystore android androiddebugkey

Also if you want to sign the APK with your debug key, you may use.

./signapk.sh calculator.apk 
Aksel Fatih
  • 1,419
  • 18
  • 31
7
  1. remove old sign

    zip -d xxxx.apk(your apk file) META-INF/*

  2. sign apk

    jarsigner -verbose -keystore xxxx.keystore(your keystore) -signedjar out_sign.apk(outfile) unsign.apk(unsign apk) xxxxxalias(your alias)

  3. if sign apk not work and jdk >= 1.7

    add params -digestalg SHA1 -sigalg MD5withRSA
    jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore xxxx.keystore(your keystore) -signedjar out_sign.apk(outfile) unsign.apk(unsign apk) xxxxxalias(your alias)

lingyfh
  • 1,363
  • 18
  • 23