我正在爲具有Gradle依賴項的android編寫Cordova插件。 我希望開發人員能夠指定他們想要的依賴關係的版本,而無需直接編輯插件。允許用戶指定科爾多瓦插件的Gradle依賴項
現在我有這個在我的plugin.xml:
<hook type="before_plugin_install" src="modifyPluginXML.js" />
<framework src="resources/custom.gradle" custom="true" type="gradleReference"/>
<framework src="$TO_BE_DEFINED_PACKAGE" type="gradleReference"/>
,我有一個鉤子,需要在命令行參數,並在plugin.xml與所提供的包路徑/名稱替換$ TO_BE_DEFINED_PACKAGE爭論。
這裏是modifyPluginXML.js鉤:
module.exports = function(context) {
var Q = context.requireCordovaModule('q');
var deferral = new Q.defer();
var fs = require('fs'),
xml2js = require('xml2js'),
path = require('path'),
util = require('util');
var parser = new xml2js.Parser({explicitArray:false});
var cb = function(data){
console.log("plugin.xml updated");
deferral.resolve();
}
fs.readFile(__dirname + '/plugin.xml', function(err, data) {
parser.parseString(data, function (err, result) {
//console.log(util.inspect(result, false, null));
var externalDep = "";
for (var i = 0; i < process.argv.length;i++){
if(process.argv[i].indexOf('EXTERNAL_DEP') >= 0){
externalDep = process.argv[i].replace("EXTERNAL_DEP=", "");
console.log(externalDep);
}
}
result.plugin.platform.framework[1]['$'].src = externalDep;
var builder = new xml2js.Builder();
var xml = builder.buildObject(result);
var filepath = path.normalize(path.join(__dirname, '/plugin.xml'));
fs.writeFile(filepath, xml, cb);
});
});
return deferral.promise;
}
截至如果你添加插件與cordova plugin add plugin-name EXTERNAL_DEP=5.0
它會正確地在命令行中指定的源更換框架SRC在plugin.xml現在論據。
我遇到的問題是cordova似乎並不關心新的plugin.xml。它仍然使用舊的plugin.xml的框架標籤。
在生成的build.gradle文件我還看到:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
// SUB-PROJECT DEPENDENCIES START
debugCompile project(path: "CordovaLib", configuration: "debug")
releaseCompile project(path: "CordovaLib", configuration: "release")
compile "$TO_BE_DEFINED_PACKAGE"
// SUB-PROJECT DEPENDENCIES END
}
因此,即使plugin.xml的是越來越與before_plugin_install鉤正確更新,科爾多瓦使用舊值生成的build.gradle文件。
有沒有人有任何建議,或我可以採取不同的路線?
*就是說,你幾乎總是想要最後的版本。你知道,錯誤修正最多,功能最多的一個...... – Flummox
我同意你的看法,但是這是一個只能在家中使用的插件。基本上我想指定版本的原因是,我可以區分生產依賴性和具有特定於測試環境功能的依賴性。所以我可以在CI管道中切換它們。所以手動更新build.gradle並不理想。 –
我的意思不是手動的,我的意思是鉤子應該寫在那裏,而不是寫在plugin.xml中 – jcesarmobile