【问题标题】:Visual Studio 2017 Cordova; change target folder for Android buildVisual Studio 2017 科尔多瓦;更改 Android 构建的目标文件夹
【发布时间】:2018-03-27 17:35:05
【问题描述】:

我已经弄清楚了如何让 Visual Studio 使用 Cordova 7.1.0 进行编译和测试,尽管理论上它应该只适用于 6.3.1 但我对 Android 还有一个问题。

Deploy 正在platforms\android\build\outputs\apk 中寻找apk

Build 现在将 apk 放入platforms\android\build\outputs\apk\debug

所以如果我构建它,然后复制 apk,然后告诉 Visual Studio 进行调试,它可以正常工作,因为它可以在 platform\android\build\outputs\apk 中处理 apk

所以每次我想测试时,我都必须删除 apk,构建它,然后复制它,然后再次构建它以允许 Visual Studio 部署它。

Visual Studio、项目或注册表中是否有可用于更改部署文件夹或构建文件夹以使其匹配的设置?

【问题讨论】:

  • 嗨,Andrew - 您如何配置环境以使用 Cordova 7.1.0?我正在尝试复制该问题,但没有看到它。
  • 我已经设法解决了这个问题。我不记得我做了什么来修复它。也就是说,如果 VS 支持更新版本的 Cordova 而无需覆盖它,那就太好了。通常,当我加载我的应用程序时,VS 会强制它回到 6.3.1,然后我必须去 config.xml 将其更改回 7.1,这会浪费时间将应用程序加载到 VS 中,但除此之外它似乎工作得很好。有时VS在编译期间挂起,我必须从任务管理器中关闭它。
  • 这个问题又回来了,不确定是不是VS更新导致的。在回答您的问题时,我相信解决方案是通过在系统上安装 Windows 默认的 cordova 7.1.0。然后它作为 Global Cordova 7.1.0 的 Cordova 工具集下拉列表中的一个选项出现。所以我只是在那里选择它。现在问题更严重了,因为复制 APK 并不能解决问题。我不知道它在哪里寻找文件,也不知道它需要什么名称。
  • 我使用 6.3.1 创建了一个新的空白 corodova 项目,我得到了同样的错误。 Visual Studio 2017 中似乎存在一个错误。它无法将调试 android 项目部署到设备。它创建文件,然后找不到它。

标签: android visual-studio-cordova


【解决方案1】:

我遵循了https://stackoverflow.com/a/49270052/9874134 的建议,但对其进行了一些调整以使其适合我的情况。

cordova android 平台6.4+ 将构建的apk放在这里:

[项目]\platforms\android\app\build\outputs\apk\debug\app-debug.apk

Visual Studio 似乎在这里寻找它:

[项目]\platforms\android\build\outputs\apk\app-debug.apk

我添加了一个“after_build”钩子来复制 app-debug.apk 和 output.json 文件到 VS 正在查找的文件夹中。我必须手动 添加文件夹结构(对于正在复制的文件的位置 和挂钩文件的位置)。我刚刚添加了以下文件,并且 构建过程会自动拾取它。

下一步与建议略有不同。 “after_build”挂钩将 app-debug.apk 和 app-release 文件复制到 VS 正在查找的文件夹中:

我将 copy_android_apk.js 放在 [project]\scripts\

[项目]\scripts\copy_android_apk.js

我在 [project]\config.xml 中添加了一个“after_build”钩子元素

<platform name="android">
  <hook src="scripts/copy_android_apk.js" type="after_build" />
</platform>

copy_android_apk.js 的内容:

#!/usr/bin/env node

module.exports = function (context) {
    console.log(" -- manual step -- have to copy apk to this folder because that is where VS is looking for it...");

    var fs = require('fs');
    var path = require('path');
    var rootdir = process.argv[2];

    var srcfile = path.join(process.cwd(), "platforms\\android\\app\\build\\outputs\\apk\\debug\\app-debug.apk");
    var destfile = path.join(process.cwd(), "platforms\\android\\build\\outputs\\apk\\app-debug.apk");

    var destdir = path.dirname(destfile);

    //Create the output directory if it doesn't exist
    if (!fs.existsSync(destdir)) {
        mkdirSyncRecursive(destdir);
    }

    if (fs.existsSync(srcfile) && fs.existsSync(destdir)) {
        fs.createReadStream(srcfile).pipe(
            fs.createWriteStream(destfile));
    }

    srcfile = path.join(process.cwd(), "platforms\\android\\app\\build\\outputs\\apk\\release\\app-release.apk");
    destfile = path.join(process.cwd(), "platforms\\android\\build\\outputs\\apk\\app-release.apk");

    destdir = path.dirname(destfile);
    if (fs.existsSync(srcfile) && fs.existsSync(destdir)) {
        fs.createReadStream(srcfile).pipe(
            fs.createWriteStream(destfile));
    }

    /**
     * Splits whole path into segments and checks each segment for existence and recreates directory tree from the bottom.
     * If since some segment tree doesn't exist it will be created in series.
     * Existing directories will be skipped.
     * @param {String} directory
     */
    function mkdirSyncRecursive(directory) {
        var path = directory.replace(/\\$/, '').split('\\');
        for (var i = 1; i <= path.length; i++) {
            var segment = path.slice(0, i).join('/');
            !fs.existsSync(segment) ? fs.mkdirSync(segment) : null;
        }
    }
}

【讨论】:

    【解决方案2】:

    我尝试了一些似乎有效的方法。我清除了 Cordova 缓存、工具/选项 Appache Cordova 工具 科尔多瓦工具

    然后我重新启动了 Visual Studio

    现在它可以工作并将调试直接发布到设备。

    虽然应用程序启动成功,但 Visual Studio 停止响应,我记得在 2017 年初始更新后也偶尔发生过这种情况,但似乎消失了。再次重启Visual Studio,并将debug部署到Android Device后,运行正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多