在Cordova中,如何为ios和android指定不同的包名?

时间:2014-10-10 19:57:46

标签: android cordova cordova-3

由于遗留因素,我的Android和iOS应用程序的软件包名称不同。目前Cordova似乎在构建时将config.xml中的widget id属性注入其中。有没有办法自定义这个?如果我直接编辑AndroidManifest.xml,我预计它很快就会被覆盖。

感谢。

3 个答案:

答案 0 :(得分:41)

现在内置于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

编辑:( Cordova-Lib已被移动)

https://github.com/apache/cordova-lib/blob/master/cordova-common/src/ConfigParser/ConfigParser.js#L109

答案 1 :(得分:1)

自动执行此操作的方法是添加后准备挂钩。我从这里开始了如何根据环境替换文本的示例:http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/

我的项目中有一个project.json,它指定了我想为每个平台使用的id:

{ 
    "android": 
    {
        "app_id": "<my Android Package name>"
    },
    "ios": 
    {
        "app_id": "<my iOS Bundle Identifier>"
    }
}

然后在/ hooks目录中我有一个带有replace_text.js的/ after_prepare目录,如下所示:

#!/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);
}

请务必替换&lt;所示的值。 &GT;括号,其中包含与您的应用/项目相关的值。

答案 2 :(得分:0)

注意: 这尚未经过测试,但我认为它应该有效。

在Cordova CLI中创建新的IOS平台后,在下面的文件中编辑包名称。

app/platforms/ios/<APP_NAME>/config.xml app/platforms/ios/www/config.xml

为了避免一个丑陋的并发症,我建议你先在项目的另一个Git分支中尝试这个。