13

我想我做错了什么,但我不得不以这种方式修补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;
}

否则首先找到并安装“未签名” apk,它会失败未签名。我正在使用 CLI 构建和运行我的 apk。很明显,在调试模式下没问题,因为签名采用了不同的路径。

乔瓦尼

4

2 回答 2

47

我不确定你做了什么来尝试签署你的应用程序,但这对我有用:

更新 (4/14/14)

一旦设置了正确的配置,实际上有一种更简单的方法可以在一个命令中完成所有这些操作,如此 SO 答案中所述:Android 版本自动化 我也在这里写了一篇关于它的博客文章: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

将密钥库文件放在计算机上的某个位置。在哪里并不重要。

告诉 ant 你的密钥库文件在哪里

然后,您只需要通过转到您的 android 项目文件夹(对于 phonegap,它位于平台/android 中)来告诉 ant 密钥库文件在哪里,并创建一个 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/

于 2013-10-16T16:33:18.770 回答
1

确保在运行构建之前生成正确的密钥。

例子:

keytool -genkey -v -keystore CHANGETHIS.keystore -alias CHANGETHIS -keyalg RSA -keysize 2048 -validity 10000

现在运行你的构建命令

例子:

cordova build android --release
于 2015-03-13T06:20:54.993 回答