在用户不知情的情况下,将现有的原生应用与基于 cordova/phonegap 的应用交换
Posted
技术标签:
【中文标题】在用户不知情的情况下,将现有的原生应用与基于 cordova/phonegap 的应用交换【英文标题】:Swap existing native app with a cordova/phonegap based one without the user knowing 【发布时间】:2014-07-29 12:13:05 【问题描述】:我即将使用 phonegap 部署一个混合应用程序(适用于 android 和 ios)。我们想在用户不知道的情况下交换它,所以我想我可以使用相同的设备 ID(例如“de.company.myapp”) - 这样在下一次应用商店更新后,用户将安装新应用.
请注意,在 iOS 上这似乎不是问题。
科尔多瓦config.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns = "http://www.w3.org/ns/widgets"
xmlns:gap = "http://phonegap.com/ns/1.0"
id = "de.company.myapp"
version = "1.0.0">
...
在使用 android 进行测试时出现此错误:(请注意,旧的 native 应用程序已安装在设备上)
...
Installing app on device...
>>
>> /path/to/cordova/platforms/android/cordova/node_modules/q/q.js:126
>> throw e;
>> ^
>> ERROR: Failed to launch application on device: ERROR: Failed to install apk to device: pkg: /data/local/tmp/Fahrschulcard-debug-unaligned.apk
>> Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
所以这意味着 apk 签名不匹配。删除旧应用后,我当然可以只安装新应用,但是有很多安卓用户在使用旧应用,所以告诉他们都先删除旧应用会很糟糕。
问题:
所以可以使用与构建本机应用程序相同的证书/签名吗?
有没有人有这种要求的经验,这可能吗?
【问题讨论】:
您确定您使用与原生应用程序相同的证书签署了您的 apk 吗?您似乎正在运行调试 apk,而不是发布签名和对齐的。 抱歉,如果不清楚。我确实运行了调试 apk。但看起来我需要使用私钥来签署旧的本机应用程序? ***.com/questions/4843212/… 对。要在 google play 上发布,您需要确保在 android manifest 中禁用调试,构建您的应用程序,使用与旧本机应用程序相同的密钥对其进行签名(android 检查证书是否相同以允许更新)并对齐它。这样,当您在商店中发布新的 cordova 应用程序时,用户将自动更新(除非您的新应用程序需要旧应用程序不需要的某些权限)。我认为可能有一种方法可以更改应用程序的证书(我认为我们必须这样做,但不记得如何)。可以查看谷歌播放文档。 【参考方案1】:要回答我自己的问题,需要做两件事来解决这个问题:
-
您将需要原始的
*.keystore
文件,旧的原生应用是使用该文件签名的(连同密码)
确保在您的 android 清单中禁用调试选项
对于 cordova 构建,您必须创建一个名为 ant.properties
的文件,如 this post 中所述。
创建ant.properties
文件后,您只需运行以下命令即可创建已签名的可发布的apk 文件platforms/android/ant-build/appname-release.apk
:
$ cordova build android --release
【讨论】:
以上是关于在用户不知情的情况下,将现有的原生应用与基于 cordova/phonegap 的应用交换的主要内容,如果未能解决你的问题,请参考以下文章
如何将现有的 Angular 2 Web 应用程序转换为原生脚本应用程序
如何将现有的 AngularJS 2 Web 应用程序转换为 Cordova 应用程序?
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS