我想我做错了什么,但我不得不修补https://github.com/phonegap/phonegap/blob/master/lib/android/bin/templates/cordova/lib/cordova.js#L313 这样(添加“未对齐”令牌匹配):
if (fso.GetExtensionName(path) == 'apk' && !path.match(/unaligned/) && !path.match(/unsigned/)) {
path_to_apk = out_files.item();
break;
}
否则首先找到并安装“unsigned”apk,否则将无法签名。 我正在使用CLI来构建和运行我的apk。 在调试模式下,很明显,因为签名采用了不同的路径。
乔瓦尼
答案 0 :(得分:47)
我不确定您为尝试签署自己的应用做了什么,但这对我有用:
设置正确的配置后,实际上有一种更简单的方法可以在一个命令中执行此操作,如本答案中所述:Automation for Android release build 我也写了一篇关于它的博客文章:http://www.adamwadeharris.com/android-automation/
确保您已在AndroidManifest.xml中设置版本号。 Google Play不会接受它,除非它与商店中的先前版本不同。 versionCode是一个整数值,因此每次提交时只需将其递增1,无论是主要更新还是次要更新。除了向用户显示之外,versionName不用于任何内容,它是一个字符串,因此您可以根据需要为其命名。例如,您可以将其设置为1.0.3,而versionCode可能是3.(http://developer.android.com/tools/publishing/versioning.html#appversioning)
http://schemas.android.com/apk/res/android”>
创建密钥库文件并设置密码。我不会详细介绍如何实际执行此操作。只要确保你没有丢失这个文件。如果您丢失了,并且必须创建一个新应用,那么当您尝试将其添加到Google Play商店时,它将成为新的应用。 (http://developer.android.com/tools/publishing/app-signing.html#cert)
始终为每个应用使用不同的密钥库文件,因为它是您将应用上传到商店的私钥。如果您决定将应用程序转移给其他开发人员,则必须向他们提供密钥库文件,如果您还将该密钥库用于其他应用程序,则会出现安全问题。 (http://developer.android.com/tools/publishing/app-signing.html#secure-key)
将密钥库文件放在计算机上的某个位置。在哪里都没关系。
然后你只需要通过转到你的android项目文件夹告诉ant密钥库文件的位置(对于phonegap它在platform / android中)并创建一个ant.properties文件并将其中包含在其中:
key.store=/Users/username/Documents/path/to/my-release-key.keystore
key.alias=app_name
其中key.store等于从C驱动器开始的密钥库文件的路径,而key.alias就是您想要简称的任何内容。您将在以下命令中使用别名。
打开命令提示符,然后导航到您的项目并运行phonegap build。
phonegap build android
在platforms / android / bin中你应该有:
AppName.ap_
AppName.ap_.d
AppName-debug.apk
AppName-debug-unaligned.apk
AppName-debug-unaligned.apk.d
然后导航到android目录并运行ant release:
cd platforms/android
ant release
它将提示您输入密钥库密码和别名“app_name”的密码。输入两者的密钥库密码。
在platforms / android / bin中,您现在还应该拥有该应用的发布版本:
AppName-release.apk
AppName-release-unaligned.apk
AppName-release-unsigned.apk
AppName-release-unsigned.apk.d
现在进入bin目录:
cd bin
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /Users/username/Documents/path/to/my-release-key.keystore AppName-release-unsigned.apk app_name
更新 - 根据下面的评论,如果您使用-sigalg SHA1withDSA -digestalg SHA1而不是SHA1withRSA
,则您不会在下一步收到警告输入您的密钥库密码
jarsigner -verify -verbose -certs AppName-release-unsigned.apk
如果你收到这样的警告,请忽略它: 警告:此jar包含未验证证书链的条目。
zipalign -v 4 AppName-release-unsigned.apk AppName.apk
它会说: 验证成功
你的最终apk(AppName.apk)将在bin目录中创建。
(http://developer.android.com/tools/publishing/app-signing.html#releasemode)
然后您就可以上传到Google Play。
我希望这会有所帮助。如果您有任何问题,请告诉我。
http://www.adamwadeharris.com/sign-publish-phonegap-app-google-play-store-windows/
答案 1 :(得分:1)
在运行构建之前,请确保生成正确的密钥。
示例:
keytool -genkey -v -keystore CHANGETHIS.keystore -alias CHANGETHIS -keyalg RSA -keysize 2048 -validity 10000
现在运行您的构建命令
示例:
cordova build android --release