Ionic构建Android时出现错误:copyFileSync:无法写入目标文件。

16

当我使用命令:ionic cordova build android时,会得到以下结果:

cp: copyFileSync: 无法写入目标文件 (code=ENOENT):/Users/mehdigriche/work/cam1/test/platforms/android/res/xml/config.xml

解析 /Users/mehdigriche/work/cam1/test/platforms/android/res/xml/config.xml 失败(node:2306)UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: ENOENT: no such file or directory, open '/Users/mehdigriche/work/cam1/test/platforms/android/res/xml/config.xml'

[10:50:14] 代码检查完成


1
你是否检查了错误中提到的文件的存在或权限? - Thomas Smyth - Treliant
我不应该只是放这个链接,但是这个帖子解决了我的问题:https://github.com/ionic-team/ionic-cli/issues/2835 - Ulises Layera
10个回答

22

将此钩子添加到 Cordova 项目:patch-android-studio-check.js

  1. 将文件patch-android-studio-check.js放在您的项目的hooks目录中。

  2. 将以下行添加到您的项目的config.xml中:

    <platform name="android">
        <hook src="hooks/patch-android-studio-check.js" type="before_plugin_install" />
        <hook src="hooks/patch-android-studio-check.js" type="before_plugin_add" />
        <hook src="hooks/patch-android-studio-check.js" type="before_build" />
        <hook src="hooks/patch-android-studio-check.js" type="before_run" />
        <hook src="hooks/patch-android-studio-check.js" type="before_plugin_rm" />
    </platform>
    
  3. 删除插件目录:

    rm -rf plugins
    
  4. 重新安装插件:

    ionic build
    
  5. 重新安装 Android 平台:

    cordova platform rm android
    cordova platform add android@latest
    

15

您输入的命令:ionic cordova build androird 是错误的。
我想您的意思是:ionic cordova build android

另外,您也可以尝试使用:ionic cordova build --release android

我曾经遇到过相同的错误,在经过两天的调试后,我找到了解决方案:

在目录 platforms/android/cordova 中的文件 Api.js 中,我更新了 locations 对象,因为路径不正确。

目前我的 Api.js 文件中的 locations 对象如下所示:

    this.locations = {
    root: self.root,
    www: path.join(self.root, 'assets/www'),
    res: path.join(self.root, 'res'),
    platformWww: path.join(self.root, 'platform_www'),
    configXml: path.join(self.root, 'app/src/main/res/xml/config.xml'),
    defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'),
    strings: path.join(self.root, 'app/src/main/res/values/strings.xml'),
    manifest: path.join(self.root, 'app/src/main/AndroidManifest.xml'),
    build: path.join(self.root, 'build'),
    javaSrc: path.join(self.root, 'app/src/main/java/'),
    // NOTE: Due to platformApi spec we need to return relative paths here
    cordovaJs: 'bin/templates/project/assets/www/cordova.js',
    cordovaJsSrc: 'cordova-js-src'
};

在进行这些更改后,我能够构建我的应用程序。 我还遇到了像cordova-sqlite-storage这样的插件错误,所以我将其删除并构建了应用程序。

希望这可以帮助您


我已经尝试过了,但没有成功。很抱歉没有提到:在使用ionic 1进行构建时,一切都很顺利,但是当我使用ionic 3时就会出现这个问题。此外,这个问题出现在平台文件夹中。当我使用来自ionic 1项目的另一个文件夹时,问题得到了解决。 - mehdigriche

8

解决这个问题

cp: copyFileSync: 无法写入目标文件 (code=ENOENT):/Users/mehdigriche/work/cam1/test/platforms/android/res/xml/config.xml

platforms/android/res中创建一个名为xml的文件夹。


6
显然,当添加android +7时,一些文件未能正确生成,因此我通过以下方式解决了这个问题:
首先删除您的平台,
ionic cordova platform rm android

请重新安装较低版本(6.3在我这里能够运行)
ionic cordova platform add android@6.3.0

1
@Vivek Android 7+ 引起了很多问题,所以如果你时间紧迫,找不到替代插件的话,现在回滚到 6.4.0 更容易些。 - Trevor

5
我今早遇到了同样的问题,我采取了一个相当激烈的解决方案:

  1. 移除该平台:
ionic cordova platform rm android
  1. 从您的应用程序文件夹中删除以下文件夹:platformspluginswww
  2. 确保您的依赖项可用,运行:npm install
  3. 添加回平台,此步骤将重新创建在步骤2中删除的文件夹:
ionic cordova platform add android

最后,构建您的应用程序:
ionic cordova build android

4
在进行重置时,我建议保留 "www" 文件夹!你可能会有重要的资源文件在里面。 :) - xke
4
它们已经在src文件夹中了,所以不用担心,尽管删除www文件夹也不会有任何影响。@xke - Black Mamba
这取决于你的Ionic版本 - 对于Ionic v1项目,你不应该删除'www'文件夹! - kolli

1
注意dtmp的回答,使用钩子目录似乎已经被弃用。使用“scripts”目录可能更为合适。
尝试使用ionic 2进行构建时,使用“hooks”目录会导致找不到钩子js文件。

0

如果你和我一样,尝试了所有的解决方案但问题仍未解决。请尝试以下解决方案:

  1. 打开项目文件夹中的 project.json 文件。
  2. 添加依赖 "android-versions" : "1.3.0"
  3. 运行 npm i 命令。
  4. 运行命令 sudo ionic cordova run android

祝编程愉快!


0

0

这太老了,但使用ionic 4我遇到了同样的问题,只需删除android并重新添加即可解决:

ionic cordova platform rm android
ionic cordova platform add android

0
ionic cordova rm platform android

删除www和plugins文件夹

npm cache clean
npm install audit fix
ionic cordova build  android

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接