科尔多瓦 + Visual Studio + Android@7.0.0?
Cordova + Visual Studio + Android@7.0.0?
是否有人能够获得最新的 android 更新 (7.0.0) 以与 visual studio 一起使用?
VS 表示构建成功,但是当您尝试部署时,该步骤失败,因为它找不到创建的输出。
我认为这可能是更新一些路径的问题,但我想我会看看是否有人已经弄清楚了。
鉴于 taco.visualstudio.com 自 2017 年 6 月以来没有看到更新,我想知道该项目是否还没有结束:-(
1>------ Build started: Project: myProject, Configuration: Debug Android ------
Cordova 7.1.0
------ Platform android already exists
------ Copying native files from D:\myproject\res\native\android to D:\myproject\platforms\android
------ Done copying native files to D:\myproject\platforms\android
2>------ Deploy started: Project: myProject, Configuration: Debug Android ------
2>Could not locate the start page. You may need to build your project.
2>Deployment failed.
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 1 failed, 0 skipped ==========
编辑:回到 Android@6.4.0 解决了我眼前的问题。但这不是长久之计。
有点老套,但这就是我要做的。
从中得到线索:https://developercommunity.visualstudio.com/content/problem/199609/cordova-ios-640-deployment-error-due-to-change-bui.html
(虽然建议的路径对我不起作用)
到目前为止,我只看过 Android,所以我将就此进行讨论。 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 正在查找的文件夹中。我必须手动添加文件夹结构(对于两者正在复制的文件的位置和挂钩文件的位置)。我刚刚添加了以下文件,构建过程会自动获取它。
[项目]\hooks\after_build\copy_android_apk.js
copy_android_apk.js的内容:
#!/usr/bin/env node
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(rootdir, "platforms\android\app\build\outputs\apk\debug\app-debug.apk");
var destfile = path.join(rootdir, "platforms\android\build\outputs\apk\app-debug.apk");
var destdir = path.dirname(destfile);
if(fs.existsSync(srcfile) && fs.existsSync(destdir)) {
fs.createReadStream(srcfile).pipe(
fs.createWriteStream(destfile));
}
srcfile = path.join(rootdir, "platforms\android\app\build\outputs\apk\debug\output.json");
destfile = path.join(rootdir, "platforms\android\build\outputs\apk\output.json");
destdir = path.dirname(destfile);
if(fs.existsSync(srcfile) && fs.existsSync(destdir)) {
fs.createReadStream(srcfile).pipe(
fs.createWriteStream(destfile));
}
对于这个答案 ,我对其进行了一些调整以使其适合我的情况。 "after_build" 挂钩将 app-debug.apk 和 app-release 文件复制到 VS 正在查找的文件夹中。
我把copy_android_apk.js放在了[project]\scripts\
下
[项目]\scripts\copy_android_apk.js
我在[项目]\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 更新 (7.0.0) 以与 visual studio 一起使用?
VS 表示构建成功,但是当您尝试部署时,该步骤失败,因为它找不到创建的输出。
我认为这可能是更新一些路径的问题,但我想我会看看是否有人已经弄清楚了。
鉴于 taco.visualstudio.com 自 2017 年 6 月以来没有看到更新,我想知道该项目是否还没有结束:-(
1>------ Build started: Project: myProject, Configuration: Debug Android ------
Cordova 7.1.0
------ Platform android already exists
------ Copying native files from D:\myproject\res\native\android to D:\myproject\platforms\android
------ Done copying native files to D:\myproject\platforms\android
2>------ Deploy started: Project: myProject, Configuration: Debug Android ------
2>Could not locate the start page. You may need to build your project.
2>Deployment failed.
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 1 failed, 0 skipped ==========
编辑:回到 Android@6.4.0 解决了我眼前的问题。但这不是长久之计。
有点老套,但这就是我要做的。
从中得到线索:https://developercommunity.visualstudio.com/content/problem/199609/cordova-ios-640-deployment-error-due-to-change-bui.html (虽然建议的路径对我不起作用)
到目前为止,我只看过 Android,所以我将就此进行讨论。 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 正在查找的文件夹中。我必须手动添加文件夹结构(对于两者正在复制的文件的位置和挂钩文件的位置)。我刚刚添加了以下文件,构建过程会自动获取它。
[项目]\hooks\after_build\copy_android_apk.js
copy_android_apk.js的内容:
#!/usr/bin/env node
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(rootdir, "platforms\android\app\build\outputs\apk\debug\app-debug.apk");
var destfile = path.join(rootdir, "platforms\android\build\outputs\apk\app-debug.apk");
var destdir = path.dirname(destfile);
if(fs.existsSync(srcfile) && fs.existsSync(destdir)) {
fs.createReadStream(srcfile).pipe(
fs.createWriteStream(destfile));
}
srcfile = path.join(rootdir, "platforms\android\app\build\outputs\apk\debug\output.json");
destfile = path.join(rootdir, "platforms\android\build\outputs\apk\output.json");
destdir = path.dirname(destfile);
if(fs.existsSync(srcfile) && fs.existsSync(destdir)) {
fs.createReadStream(srcfile).pipe(
fs.createWriteStream(destfile));
}
对于这个答案
我把copy_android_apk.js放在了[project]\scripts\
下[项目]\scripts\copy_android_apk.js
我在[项目]\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;
}
}
}