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
中看不到assets
、res
和src
文件夹。更重要的是,上面的目录缺少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.xml
或config.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构建环境的配置