我已经弄清楚了如何使Visual Studio在Cordova 7.1.0上进行编译和测试,尽管从理论上讲它只能与6.3.1一起使用,但是Android还有一个问题。

Deploy在platform \ android \ build \ outputs \ apk中寻找apk

Build现在将apk放在platform \ android \ build \ outputs \ apk \ debug中

因此,如果我构建它,然后复制apk然后告诉Visual Studio进行调试,则它可以工作,因为它可以在platform \ android \ build \ outputs \ apk中对apk进行优化

因此,每次我要测试时,都必须删除apk,将其构建,然后复制,然后再次构建,以允许Visual Studio进行部署。

我可以使用Visual Studio,项目或注册表中的设置来更改deploy文件夹或build文件夹,以便它们匹配吗?

最佳答案

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


Cordova Android平台6.4+将内置的APK放在此处:

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

Visual Studio似乎在这里寻找它:

[项目] \平台\ 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;
        }
    }
}

关于android - Visual Studio 2017 Cordova ;更改Android构建的目标文件夹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49519163/

10-13 08:02