要避免觸摸平臺目錄,可以使用cordova hook。我在節點上非常糟糕,但是這裏應該有所斬獲。首先npm install elementtree
然後在鉤子文件夾中創建一個子文件夾after_prepare
。從那裏把這個代碼粘貼到一個JavaScript文件並更改YourTheme。
老實說,這是一些非常粗糙的代碼,但應該給你這個想法。
#!/usr/bin/env node
var fs = require("fs");
var et = require('elementtree');
var rootdir = process.argv[2];
console.log(rootdir);
fs.open(rootdir + '/platforms/android/AndroidManifest.xml', 'r+',
function (err, fd) {
if (err) {
exitError(err);
}
fs.stat(rootdir + '/platforms/android/AndroidManifest.xml', getStats);
function getStats(error, stats) {
if (error) {
exitError(error);
}
var buffer = new Buffer(stats.size);
fs.read(fd, buffer, 0, buffer.length, null, fileRead);
}
function fileRead(error, bytes, buf) {
var data = buf.toString("utf8", 0, buf.length);
var androidXML = et.parse(data);
var root = androidXML.getroot();
var activityTag = root.find("application/activity");
activityTag.attrib["android:theme"] = "@style/YourTheme";
var outputBuffer = new Buffer(et.tostring(root), "utf-8");
console.log(outputBuffer.toString());
fs.closeSync(fd);
fs.open(rootdir + '/platforms/android/AndroidManifest.xml', 'w', writeFile);
function writeFile(error, fd) {
if (error) {
exitError(error);
}
fs.write(fd, outputBuffer, 0, outputBuffer.length, 0, function(errw, written, str) {
if (errw) {
exitError(errw);
}
console.log('file written');
fs.close(fd);
});
}
}
});
function exitError(error) {
console.log(error);
process.exit(0);
}
我想過使用一個鉤子,但不應該有我們可以添加到config.xml文件來改變這樣的事情嗎?考慮到phonegap build具有編寫定製xml的功能,該功能將與AndroidManifest.xml –
合併。再次,可以通過掛鉤完成。多了一點點後,似乎這個文件增加了一些不錯的功能(包括主題):https://github.com/djett41/generator-ionic/blob/master/templates/hooks/after_prepare/update_platform_config.js – laughingpine
哦非常好,我用發生器捅了一下,但沒有看到這些鉤子。它爲新的配置可能性打開了大門。謝謝您的幫助 ! –