大家可能不知道标题是什么意思,我先解释一下什么是空包签名,为什么需要它。 那是一个阳光明媚的早上,我正开开心心的敲着代码,然后项目负责人告诉我,有一个老项目维护者给了我源码,在我修复了bug,运行成功之后,他说要上架到应用市场上。我说,想上就上,很简单。 然后我发现事情并没有那么简单,这个应用之前上过平台,但那是2016年还是2017年空包,那时候我还在上学。而且之前的平台开发者账号也找不到了,也就是说之前在平台上的应用是一个孤儿。如果想把这个应用重新上架,有两个方案,一是改一下包名,应用名,然后上架,二是认领这个应用。 方案一耗时太长,因为不只是改个包名那么简单。里面接入的第三方SDK因为包名改了,也要改配置,周期太长,太麻烦,所以我就采取了方案2,于是就有了这篇文章。
文本
不走不知道有多少坑。认领app第一步就是对空包进行签名。首先改签名。相信打包过APK的朋友都知道签名是什么。我描述一下我现在的情况,我这里有源码,但是没有之前的jks,所以拿不到原始签名。于是重新生成一个新的jks来签名,生成APK。如果要认领app,平台首先要确认你的签名。我以VIVO开放平台为例。
1.下载空包
首先登录你的开发者平台,然后找到你上传应用的地方,查看平台有没有上传这个包名的应用,如果有就认领,这里我用的是VIVO开放平台,下图是应用认领界面。
点击图中蓝色字体进行下载,下载解压之后,你会看到两个这样的文件。
vivo_unsign.apk是平台未签名的空包空包,您需要做的就是把您当前需要上架应用市场的项目的签名添加到这个apk中。
你听说过吗?你的脑袋嗡嗡作响。为了更生动,我将使用我之前编写的演示来演示它。
决定是你了,TranslateDemo,这是一个百度翻译Demo。如果你看过这篇博客,应该还记得。接下来,获取keystore文件。
2. 获取密钥库
其实我们在生成jks文件的时候,会有一个小提示,类似下面的
JKS keystore采用特殊格式,建议使用“keytool -importkeystore -srckeystore xxx.keystore -destkeystore xxx.keystore -deststoretype pkcs12”进行迁移。
转向行业标准格式 PKCS12。
说你不符合行业标准之类的。但通常我们并不关心这个,它只是要求你生成密钥库文件。
那么这个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和密码进行检查。
例如,你打开一个新的终端并在其中输入以下代码:
keytool -list -v -keystore 你的jks路径
我的路径是D:\APK\translate.jks所以就这样写就可以了
keytool -list -v -keystore D:\APK\translate.jks
然后回车,输入密码再回车,就可以查看到创建时的信息了。
然后切换到Local。按要求输入。因为之前创建了jks,所以只输入了我的名字,其他什么都没输入。如果没有答案,直接回车跳过。最后一个问题,问你是否正确,输入Y。如下图:
然后按 Enter。
由于我的别名密码和keystore密钥相同,所以直接回车,然后就会出现下图所示的提示,复制我标注的代码,按照自己的实际情况来即可。
粘贴到下面,回车,输入密码,keystore文件就创建成功了。
这个文件在哪里呢?如下图:
是不是很麻烦,在写出上述内容之前,我不知道看了多少博客,遇到了多少坑。
现在我们有了密钥库,我们需要对它进行签名。然而,签名过程中有很多陷阱。
3. 空包签名
首先请安装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
然后上传到平台
这就说明你的空包签名成功了。
总结
多一点耐心和冷静,你就能更好地解决问题。我是初学者——学习了,山高水长流,我们还会再见的~
开发人员薪资增长指南
48位专家的思维规则、工作方法和逻辑体系
以上内容均来自网络搜集,如有侵权联系客服删除