由於遺留因素,我的Android和iOS應用的軟件包名稱不同。目前Cordova似乎是在構建時將config.xml中的小部件id屬性注入到這兩者中。有沒有辦法自定義這個?如果我直接編輯AndroidManifest.xml,我預計它很快會被覆蓋。在Cordova中,我怎樣才能爲ios和android指定不同的包名?
謝謝。
由於遺留因素,我的Android和iOS應用的軟件包名稱不同。目前Cordova似乎是在構建時將config.xml中的小部件id屬性注入到這兩者中。有沒有辦法自定義這個?如果我直接編輯AndroidManifest.xml,我預計它很快會被覆蓋。在Cordova中,我怎樣才能爲ios和android指定不同的包名?
謝謝。
這就是現在被內置到CLI(最後):
在您在config.xml中文件 -
例子:
<widget
android-packageName="com.example.android"
ios-CFBundleIdentifier="com.example.ios">
來源:
https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/configparser/ConfigParser.js#L92
編輯:(Cordov A-庫已被移動)
注意:這還沒有經過測試,但我認爲它應該工作。
在Cordova CLI中創建新的IOS平臺後,在下面的文件中編輯軟件包名稱。
app/platforms/ios/<APP_NAME>/config.xml
app/platforms/ios/www/config.xml
爲了避免難看的複雜,我建議你先試試這個在您的項目的不同的Git分支。
謝謝,但我試圖避免通過編輯'platforms'目錄,我不要求他們檢查到回購。 – hooverlunch 2014-10-11 15:27:46
一種自動執行此操作的方法是在後面的準備掛鉤中添加。我從這裏開始瞭如何從環境中替換文本的例子:http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/。
我有我的項目,指定我想每個平臺所用什麼ID的project.json:
{
"android":
{
"app_id": "<my Android Package name>"
},
"ios":
{
"app_id": "<my iOS Bundle Identifier>"
}
}
然後在/ hooks目錄我有一個REPLACE_TEXT的/ after_prepare目錄。 JS如下:
#!/usr/bin/env node
// this plugin replaces arbitrary text in arbitrary files
//
var fs = require("fs");
var path = require("path");
var rootdir = process.argv[2];
function replace_string_in_file(filename, to_replace, replace_with) {
var data = fs.readFileSync(filename, "utf8");
var result = data.replace(to_replace, replace_with);
fs.writeFileSync(filename, result, "utf8");
}
function update_app_id(rootdir, platform, configobj) {
var appId = configobj[platform].app_id,
stringToReplace = "<value of the widget id property in the config.xml>";
if (platform === "android") {
replace_string_in_file(path.join(rootdir, "platforms/android/AndroidManifest.xml"), stringToReplace, appId);
replace_string_in_file(path.join(rootdir, "platforms/android/res/xml/config.xml"), stringToReplace, appId);
} else if (platform === "ios") {
replace_string_in_file(path.join(rootdir, "platforms/ios/<app name>/<app name>-Info.plist"), stringToReplace, appId);
replace_string_in_file(path.join(rootdir, "platforms/ios/<app name>/config.xml"), stringToReplace, appId);
}
}
if (rootdir) {
var ourconfigfile = path.join(rootdir, "project.json");
var configobj = JSON.parse(fs.readFileSync(ourconfigfile, "utf8"));
// Update each platform's specific configuration/properties files
update_app_id(rootdir, "android", configobj);
update_app_id(rootdir, "ios", configobj);
}
請務必更換用,涉及到你的應用程序/項目的值<>括號表示的數值。
好消息,看起來他們已經將這種能力添加到了Cordova-lib中,並且希望它能在下一個版本中提供:https://github.com/apache/cordova-lib/pull/105 – SunshinyDoyle 2014-10-28 22:19:26
是否有任何等效爲'windows'平臺? – Beat 2016-02-16 14:43:48