Visual Studio 2017 Cordova; 更改 Android 构建的目标文件夹

4

我已经找到了如何让Visual Studio编译和测试Cordova 7.1.0的方法,尽管理论上它只能与6.3.1一起使用。但我在Android方面还有一个问题。

部署正在寻找platforms\android\build\outputs\apk中的apk。

现在,构建将apk放在platforms\android\build\outputs\apk\debug中。

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

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

在Visual Studio、项目或注册表中是否有设置,可以用来更改部署文件夹或构建文件夹以使它们匹配?


嗨,安德鲁 - 你是如何配置你的环境来使用 Cordova 7.1.0 的?我正在尝试复制这个问题,但没有看到它。 - Jordan Matthiesen
我已经成功解决了这个问题。我无法记得我具体是怎么修复它的。话虽如此,如果VS支持更高版本的Cordova而不必覆盖它,那就太好了。通常当我加载我的应用程序时,VS会强制将其还原为6.3.1,然后我必须去config.xml将其改回7.1,这浪费了在VS中加载应用程序的时间,但除此之外它似乎工作得非常好。偶尔会出现编译过程中VS卡住的情况,我必须从任务管理器中关闭它。 - Andrew Lindzon
这个问题又出现了,不确定是不是VS的更新再次引起的。回答你的问题,我认为解决方案是通过在系统上安装Windows默认的cordova 7.1.0来实现的。然后它会在Cordova工具集下拉菜单中作为全局Cordova 7.1.0的选项出现。所以我只需在那里选择它即可。问题现在更严重了,因为复制APK文件并不能解决它。我不知道它在哪里寻找文件,或者它认为需要什么名称。 - Andrew Lindzon
我使用6.3.1创建了一个新的空白Cordova项目,但仍然遇到同样的错误。看起来 Visual Studio 2017 存在一个 bug,无法将调试 Android 项目部署到设备上。它会创建文件,但找不到它。 - Andrew Lindzon
2个回答

1

我按照这里的建议https://stackoverflow.com/a/49270052/9874134进行了调整,以使其适用于我的情况。

cordova android平台6.4+将构建的apk放置在此处:

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

Visual Studio似乎正在寻找它的位置是:

[project]\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\下

[project]\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;
        }
    }
}

0

我尝试了一些看起来有效的方法。我清除了Cordova缓存,Tools/Options Tools for Appache Cordova Cordova Tools

然后我重新启动了Visual Studio

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

虽然应用程序成功启动,但Visual Studio停止响应,我记得在最初更新到2017年后也有时会发生这种情况,但似乎已经消失了。重新启动Visual Studio后,将调试部署到Android设备,它就可以正常运行。


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