Cordova 不创建 AndroidManifest.xml

Posted

技术标签:

【中文标题】Cordova 不创建 AndroidManifest.xml【英文标题】:Cordova does not create AndroidManifest.xml 【发布时间】:2018-06-04 05:44:27 【问题描述】:

我在 Cordova 和 androidStudio 工作以创建 Android/ios 应用程序。在我昨天将我的 Cordova 更新到 8 之前,一切正常。我还将 Node 更新到了最新版本。当我创建一个 Cordova 项目并添加 Android 平台时。它产生一个完全不同的目录结构。我在项目的平台目录D:\testApp1\platforms\android 中看不到assetsressrc 文件夹。更重要的是,上面的目录缺少AndroidManifest.xml,导致admob插件添加失败。

这是我在添加插件时遇到的错误:

无法安装“cordova-plugin-admobpro”:错误:ENOENT:没有这样的文件或目录,打开“D:\Projects\testApp1\platforms\android\AndroidManifest.xml” 在 Object.fs.openSync (fs.js:646:18) 在 Object.fs.readFileSync (fs.js:551:33) 在 Object.parseElementtreeSync (D:\Projects\testApp1\platforms\android\cordova\node_modules\cordova-common\src\util\xml-helpers.js:180:27) 在新的 AndroidManifest (D:\Projects\testApp1\platforms\android\cordova\lib\AndroidManifest.js:29:20) 在 AndroidProject.getPackageName (D:\Projects\testApp1\platforms\android\cordova\lib\AndroidProject.js:99:12) 在 Api.addPlugin (D:\Projects\testApp1\platforms\android\cordova\Api.js:223:57) 在 handleInstall (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\plugman\install.js:594:10) 在 C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\plugman\install.js:357:28 在 _fulfilled (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\node_modules\q\q.js:787:54) 在 self.promiseDispatch.done (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\node_modules\q\q.js:816:30)

有人可以帮忙吗?

【问题讨论】:

我也遇到了同样的问题,缺少 AndroidManifest.xml 文件。虽然是一个简单的举措,但这种变化将在所需的下游变化中产生大量的小时数。我当然希望这种兼容性中断是值得的。顺便说一句,我还注意到 IOS 上的编辑配置支持被破坏,以将插件使用描述添加到 *-Info.plist。在此期间使用 config-file 标签。不幸的是,在所有依赖插件都支持更改之前,备份到 cordova 7.1.0 是有效的。 【参考方案1】:

Cordova CLI v8.0 默认使用cordova-android@7.0.0

由于大多数cordova插件还不支持cordova-android@7.0.0,你也可以通过指定版本来尝试使用旧的:

cordova platform add android@6.4.0

或者,如果您觉得使用cordova-android@7.0.0 很舒服,您也可以等待cordova-plugi-admobpro 的更新以支持cordova-android@7.0.0,它即将推出。

【讨论】:

拯救了我的一天!为我工作。 刚刚破坏了一切......:S 即使是现在......当你发现这种情况发生时,只要继续尝试使用不同的版本进行构建,你就会让它工作。版本可能会发生变化,但核心解决方案本身仍然有效且有效。【参考方案2】:

最终编辑:

cordova-android 7.1.4 出来了,应该可以解决大部分此类问题。

编辑:

随着人们对答案的持续投票,我将提供有关该问题的更多详细信息。

问题不在于AndroidManifest.xmlconfig.xml 上的插件。确实位置发生了变化,插件应该更新路径,但这不是强制性的,Cordova 会处理新路径。

问题是一些插件使用source-file标签来表示不是源代码的东西。 (即,使用它来复制图像而不是使用resource-file 标签) 这会创建一个混淆 Cordova 的 res 文件夹(或 lib),使其认为这是一个旧的 Eclipse 项目,而它实际上是一个 Android 工作室项目,并在旧位置搜索文件而不是查看新位置。

这已在 cordova-android 中进行了修补,并将在下一个版本中修复。 解决方法是使用source-file 标签查找插件并将其更新为使用resource-file 标签

旧答案:

现在在app/src/main/AndroidManifest.xml

如果插件在上面写,应该更新到正确的地方写。

阅读cordova-android 7.0.0 版本blog post

【讨论】:

如果您的项目根目录中有一个“res”文件夹,即使在更新 plugin.xml 中的路径后,您仍然会收到此错误(由于 Eclipse 项目检测) @RyanWilliams 如果您使用的是 Cordova CLI 8,则不必更改 plugin.xml 中的路径,只需更改挂钩中的路径或其他写入文件的内容。无论创建什么 res 文件夹都应该被修改。正如您所说,Cordova 检查该文件夹以了解它是 Android Studio 项目还是 Eclipse 项目,因此如果它是 Android Studio 项目但找到 res 文件夹,它会发疯并做出奇怪的事情。 我正在使用这个插件,它甚至没有在 plugin.xml 中指定 AndroidManifest,但它仍然没有安装。什么给了? 这是cordova中的一个错误。当插件对不是源文件(即图像)的文件使用源文件标签时,它们会被复制到根目录并创建一个 res 文件夹。该文件夹使 Cordova 疯狂并开始在旧路径中查找文件并阻止插件安装,不是错误的插件,而是它尝试安装的下一个插件。 在plugin.xml中【参考方案3】:

在cordova项目的config.xml文件中,在xml标签<platform name="android">部分下,添加如下标签:

<resource-file src="platforms/android/app/src/main/AndroidManifest.xml" target="AndroidManifest.xml" />

【讨论】:

【参考方案4】:

从 7.0 降级到 6.4 对我有用

cordova platform rm android
cordova platform add android@6.4
cordova build

【讨论】:

【参考方案5】:

我只是通过复制 AndroidManifest.xml 来修复错误 在

平台\android\app\src\main\

平台\安卓\

【讨论】:

不,不要那样做。你会摆脱错误,但你没有修复任何东西。 @jcesarmobile:如果你能指导我这个***.com/questions/50017635/…,那就太好了【参考方案6】:

这对我有用。

package.json 添加 cordova-android 版本

 "cordova-android": "~6.3.0"

然后添加平台

cordova platform add android

【讨论】:

【参考方案7】:
    首先确保插件支持cordova android 7.0.0+ 删除所有这些文件夹或文件:['AndroidManifest.xml', 'libs', 'res'] 在platforms/android 根目录中。

Cordova 使用这些文件来确定您的项目是否是 Eclipse 项目。如果它们存在,您的项目将被视为具有旧路径结构的 eclipse 项目。某些插件可能会在您的 android 文件夹中创建这些文件/文件夹。

【讨论】:

【参考方案8】:

问题似乎是当您在本地运行应用程序的同时尝试构建发布。我在本地主机上停止应用程序,然后构建发布。问题解决了。

【讨论】:

【参考方案9】:

我的问题是一个自定义插件在platforms\android 中创建了libs 文件夹。这让 Cordova 认为我的项目是一个 eclipse 项目,因此它在旧地方寻找 AndroidManifest。

如果您升级到 Cordova Android +7.0.0,请确保平台\android 不包含以下项目:

AndroidManifest.xml 库 回复

这个link 帮助了

【讨论】:

以上是关于Cordova 不创建 AndroidManifest.xml的主要内容,如果未能解决你的问题,请参考以下文章

使用Cordova创建第一个App和Cordova构建环境的配置

cordova与vue2集成

在 chrome 中运行时,cordova.js 不可用

vue和cordova项目整合打包,并实现vue调用android的相机的demo

Katzer 本地通知不起作用 - Cordova

Cordova 5.3.3 cordovalib.jar 不存在