要避免触摸平台目录,可以使用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
哦非常好,我用发生器捅了一下,但没有看到这些钩子。它为新的配置可能性打开了大门。谢谢您的帮助 ! –