Android 空包签名(详细版)

空包签名


前言

  可能一看标题你不知道是什么意思,我这里解释一下什么是空包签名,为什么要空包签名。那是一个风和日丽的早晨,我愉快地敲着代码,于是项目总监告诉有一个老项目维护,给了我源代码,在我修复bug运行成功之后,说要上架到应用市场,我说要上那就上呗,简简单单。然后我发现事情并不是那么简单,平台上之前上架过此应用,那还是16、17年的事情,那时我还在学校呢。而且之前的平台开发者账号找不到了,也就是那之前平台上的应用是个孤儿。平台上有这个应用再想上架的话有两个方案,一、更改包名,应用名,然后上架。二、认领应用。方案一花费的时间太长,因为不仅仅是改一个包名那么简单,里面对接的第三方SDK因为这个包名改动,那么就都要改一次配置才行,周期太长,太繁琐。于是走方案二,就有了本文。

正文

  不采坑你就不知道有多少坑,认领应用的第一步就是空包签名,首先是改签名,相信打包过APK的朋友都知道签名是什么。我现在的情况我来描述一下,就是我这里有源码,但是没有之前的jks,所以无法获得原来的签名,于是我就重新生成新的jks去进行签名,生成APK。而如果要认领应用,平台就必须先肯定你的签名。下面我就用VIVO开放平台来举例子。

一、下载空包

首先登陆你的开发者平台,然后找到上传应用的地方,先看一下平台是否用这个包名上传过应用,是的话就进行认领,这里我使用的是VIVO开放平台。如下图为认领应用界面。

点击图中的标注的天蓝色字体,进行下载。下载后解压你会看到这样两个文件。

vivo_unsign.apk就是平台上未签名的空包,而你要做的就是把你当前需要上架应用市场的项目的签名打到这个apk上面。

之前是不是没听说过,脑瓜子嗡嗡的吧。为了更加的生动形象,我这里用我之前写的demo来做这个演示。

就决定是你了,TranslateDemo,这是一个百度翻译Demo,看过这篇博客应该记忆犹新,下面先获取keystore文件。

二、获取keystore

  其实在我们生成jks文件的时候,会有一个小提示,类似下面这样

JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore xxx.keystore -destkeystore xxx.keystore -deststoretype pkcs12” 迁
移到行业标准格式 PKCS12。

说你不符合行业标准什么的。但是通常我们都是不管它的,它就是让你去生成keystore文件。

那么在哪里生成这个keystore呢?首先打开你的项目,然后找到底部菜单的Terminal,点击之后就会进入到你自己项目当前的目录,如下图所示:

然后输入

keytool -genkey -alias jks别名 -keyalg RSA -validity 20000 -keystore keystore名称

比如我的别名是key0,我希望生成的keystore名称是translate.keystore,那么就可以这么写。

keytool -genkey -alias key0 -keyalg RSA -validity 20000 -keystore translate.keystore

然后输入秘钥的密码,然后验证密码,之后就是填写一些相关的资料。

如果你这些资料都忘记了,那么可以通过当前的jks和密码去查看。

比如你新开一个Terminal,在里面输入如下代码:

keytool -list -v -keystore 你的jks路径

比我的路径是D:\\APK\\translate.jks,那么就这么写

keytool -list -v -keystore D:\\APK\\translate.jks

然后回车,输入密码后再回车,你就能查看到创建时的信息了。

然后切换到Local。按照要求输入,因为我之前创建jks,只输入了自己的名字,其他都没有输入,没有的直接回车跳过,最后的问题,问你是否正确,输入Y。如下图所示:

然后回车。

由于我的别名密码和秘钥库秘钥是一致的,所以我直接回车,然后就会出现如下所示的提示,复制我标注的这句代码,以你自己的实际为主。

粘贴到下面去,然后回车,再输入密码,然后就成功创建了keystore文件。

这个文件在哪呢?如下图所示:

是不是挺麻烦的,就上面的这些内容我都不知道看了多少博客,踩了多少坑才写出来的。

现在keystore有了,下面就该来签名了,这个签名也有很多的坑。

三、空包签名

  首先请安装JDK,如果没有安装的话,请看JDK 安装与环境变量配置(Win10详细版)完成安装。

之后进入到jdk安装目录的bin目录下,比如我的目的地址是:C:\\Program Files\\Java\\jdk1.8.0_162\\bin

然后用管理员身份打开命令提示符,

管理员打开是不一样的,如下图所示:

下面把未签名的vivo_unsign.apk、translate.jks和translate.keystore三个文件都复制到这个bin目录中。都是需要管理员权限的。如下图所示就复制进来了。

然后通过 cd C:\\Program Files\\Java\\jdk1.8.0_162\\bin,进入此文件目录下:

参考格式如下:
jarsigner -verbose -keystore 签名文件路径 -signedjar 签名后APK保存地址路径 未签名APK地址路径 签名文件的别名

那我当前举例子:我刚才把三个文件复制到bin中来,我希望签名后的apk也放在bin中,于是就如下面这样。

签名文件路径 :translate.keystore

签名后APK保存地址路径 :vivo_sign.apk

未签名APK地址路径:vivo_unsign.apk

签名文件的别名:key0

我们组合一下:

jarsigner -verbose -keystore translate.keystore -signedjar vivo_sign.apk vivo_unsign.apk key0

注意区分大小写、英文和空格。

大功告成!然后去查看一下这个签名后的APK

然后上传到平台上

这样就说明你的空包签名成功了。


总结

  多一些耐心,心平气和,才能更好地解决问题。我是初学者-Study,山高水长,后会有期~

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Android 空包签名(详细版)
可能一看标题你不知道是什么意思,我这里解释一下什么是空包签名,为什么要空包签名。那是一个风和日丽的早晨,我愉快地敲着代码,于是项目总监告诉有一个老项目维护,给了...
<<上一篇
下一篇>>