Cordova 不创建 AndroidManifest.xml

Cordova does not create AndroidManifest.xml

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

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

Failed to install 'cordova-plugin-admobpro': Error: ENOENT: no such file or directory, open 'D:\Projects\testApp1\platforms\android\AndroidManifest.xml' at Object.fs.openSync (fs.js:646:18) at Object.fs.readFileSync (fs.js:551:33) at Object.parseElementtreeSync (D:\Projects\testApp1\platforms\android\cordova\node_modules\cordova-common\src\util\xml-helpers.js:180:27) at new AndroidManifest (D:\Projects\testApp1\platforms\android\cordova\lib\AndroidManifest.js:29:20) at AndroidProject.getPackageName (D:\Projects\testApp1\platforms\android\cordova\lib\AndroidProject.js:99:12) at Api.addPlugin (D:\Projects\testApp1\platforms\android\cordova\Api.js:223:57) at handleInstall (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\plugman\install.js:594:10) at C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\plugman\install.js:357:28 at _fulfilled (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\node_modules\q\q.js:787:54) at self.promiseDispatch.done (C:\Users\Rao\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\node_modules\q\q.js:816:30)

有人可以帮忙吗?

最终编辑:

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

编辑:

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

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

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

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

旧答案:

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

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

阅读 cordova-android 7.0.0 版本 blog post

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,它即将推出。

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

platforms\android\app\src\main\

platforms\android\

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

<resource-file src="platforms/android/app/src/main/AndroidManifest.xml" target="AndroidManifest.xml" />
  1. 首先确保插件支持cordova android 7.0.0+
  2. 删除所有这些文件夹或文件:platforms/android 根目录中的 ['AndroidManifest.xml'、'libs'、'res']。

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

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

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

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

  • AndroidManifest.xml
  • 资源

link 有帮助

从 7.0 降级到 6.4 对我有用

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

这对我有用。

package.json中添加cordova-android版本

 "cordova-android": "~6.3.0"

然后添加平台

cordova platform add android