在用户不知情的情况下,将现有的原生应用与基于 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 部署一个混合应用程序(适用于 androidios)。我们想在用户不知道的情况下交换它,所以我想我可以使用相同的设备 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

该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的解决办法

该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的解决办法