apk签署概念:
- 我们不能分发debug签名的app。只有打上release的签名时才能分发。
- 在Andriod Studio里面run或者debug app时,IDE给我们的app自动打上了debug的签名。
- IDE会使用在”$HOME/.android/debug.keystore”里面的debug keystore.这个keystore包括了公开的password和一个key。
手动为app打release签名:
1 通过keytool工具得到keystore和private key
运行如下keytool命令
keytool -genkey -v -keystore lewi-release-key.keystore -aliae test-key -keyalg RSA -keysize 2048 -validity 10000
根据提示信息输入keystore的password和private key的password等信息。得到一个keystroe的文件lewi-release-key.keystore
可以通过keytool -list -keystore lewi-release-key.keystore + keystore的password查看里面包括的private key.
2 获取一个app文件:AndroidCalculator.apk
3 通过keytool工具签署上面生产的private key
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lewi-release-key.keystore AndroidCalculator.apk test-key
注意:可以在一个apk文件中签署多个不同的private key.
例如:AndroidCalculator.apk里面包括Eclipse自带的Andriod Debug的key,当完成签署后,通过如下命令查看apk的key.
jarsigner -verify -verbose -certs AndroidCalculator.apk
发现此apk同时存在两个key.
4 通过zipalign工具优化apk文件大小
zipalign -v 4 AndroidCalculator.apk AndroidCalculator_new.apk
Note:
可以按照如下方式删除已经签署过的apk
- 解压apk文件
- 删除META-INF文件夹
- 重新压缩并改名,例如:AndroidCalculator.apk.zip 改名为AndroidCalculator.apk
这样此apk就没有任何的签署,需要签署,请再安装上面的步骤进行。
Reference:
Signing Your Apps: http://developer.android.com/tools/publishing/app-signing.html
keytool :http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html
jarsigner : http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html
zipalign: http://developer.android.com/tools/help/zipalign.html