Gradle依存関係のあるAndroidのCordovaプラグインを作成しています。 私は、プラグインを直接編集することなく、開発者が必要とする依存関係のバージョンを指定できるようにしたいと考えています。CordovaプラグインのGradle依存関係を指定できるようにする
<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を置き換えるフックを持っている:
は今、私は私のplugin.xmlでこれを持っています議論。ここで
は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
でプラグインを追加した場合、それは正しく、コマンドラインで指定されたソースでplugin.xmlのフレームワークsrcを置き換えます引数。
私が問題になっているのは、コードバが新しいplugin.xmlを気にしていないようだということです。古いplugin.xmlのフレームワークタグは引き続き使用されます。
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を生成するために、古い値を使用しています。私はまだこれ見生成build.gradleファイルで
ファイル。
誰にも提案がありますか、別のルートがありますか?
*といっても、ほとんどの場合、最後のバージョンを使用したいと考えています。あなたが知っている、最も多くのバグフィックスと多くの機能を持つもの... – Flummox
私はあなたに同意するが、これは家でのみ使用されるプラグインです。基本的に私がバージョンを指定したい理由は、プロダクションの依存関係とテスト環境固有の依存関係を区別することができるからです。 CIパイプライン内でそれらの間を切り替えることができます。したがって、build.gradleを手動で更新するのは理想的ではありません。 –
私は手動ではありませんでしたが、私はフックがplugin.xmlに書き込む代わりにそこに書き込むべきであることを意味しました – jcesarmobile