使用--release和自签名应用程序从CLI运行Phonegap需要我修补cordova.js

时间:2013-06-26 09:55:04

标签: cordova cordova-cli

我想我做错了什么,但我不得不修补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。 在调试模式下,很明显,因为签名采用了不同的路径。

乔瓦尼

2 个答案:

答案 0 :(得分:47)

我不确定您为尝试签署自己的应用做了什么,但这对我有用:

更新(2014年4月14日)

设置正确的配置后,实际上有一种更简单的方法可以在一个命令中执行此操作,如本答案中所述: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

将密钥库文件放在计算机上的某个位置。在哪里都没关系。

告诉ant您的密钥库文件适用于此应用的位置

然后你只需要通过转到你的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