Android apk签名方法

方法一:使用自己的Android签名工具给apk重新签名:
  • 使用自己的Android签名工具给apk重新签名:

/build/target/product/security

该目录下有 media.pk8、media.x509.pem、platform.pk8、platform.x509.pem、shared.pk8、shared.x509.pem、testkey.pk8、testkey.x509.pem等签名文件,不同的签名文件,对应不同的权限。Android默认的签名文件为testkey.pk8、testkey.x509.pem。

  • signapk.jar

    signapk.jar是Android源码包中的一个签名工具。

代码位于:Android源码目录下,signapk.jar 可以编译build/tools/signapk/ 得到。

使用signapk.jar签名时需要提供签名文件,我们可以使用安卓源码中提供的testkey.pk8与testkey.x509.pem,他们位于Android源码build/target/product/security目录。

使用android自带的签名工具signapk.jar 以及源码中的testkey.x509.pem,testkey.pk8 对apk进行重新签名。

 执行:java -jar signapk.jar testkey.x509.pem testkey.pk8 old.apk new.apk 执行后new.apk即为签名后的文件。

   (注:执行命令时所有文件这里放在同一目录下,如果不在同一目录请修改路径)。

  含义:通过signapk.jar这个可执行jar包,以testkey.x509.pem这个公钥文件和testkey.pk8这个私钥文件对old.apk进行签名,签名后的文件保存为new.apk。

方法二:通过Android源码编译成签名apk:
  • 编写Android.mk
1
2
3
4
5
6
7
8
9
10
11
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := app
LOCAL_SRC_FILES := app.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := .apk
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_CERTIFICATE := platform //表示使用系统签名
LOCAL_DEX_PREOPT := false //不提前优化,无oat文件
LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PREBUILT)
  • 将apk放入.mk同目录(命名为app.apk),配置好sdk编译环境后执行mm指令,签名apk生成在:out/target/product/xxxx/system/priv-app/app/app.apk 。
方法三:Android studio配置签名工具:
  • 生成本地key

1540802603917

  • 下载keytool-importkeypair工具
1
2
3
./keytool-importkeypair -k [jks文件名] -p [jks的密码] -pk8 platform.pk8 -cert platform.x509.pem -alias [jks的别名]
如:
./keytool-importkeypair -k test.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias test
  • 1540802820792

实质是运行 Sdk\build-tools\27.0.3\lib\apksigner.jar 进行签名:

  java -jar apksigner.jar sign    //执行签名操作

    –ks 你的jks路径      //jks签名证书路径

    –ks-key-alias 你的alias    //生成jks时指定的alias

    –ks-pass pass:你的密码    //KeyStore密码

    –key-pass pass:你的密码  //签署者的密码,即生成jks时指定alias对应的密码

    –out output.apk       //输出路径

    input.apk          //被签名的apk