我按照这里的建议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);
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));
}
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;
}
}
}