Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cordova:如何设置特定于平台的config.xml文件,该文件在Cordova构建后不会被覆盖?_Javascript_Android_Ios_Cordova - Fatal编程技术网

Javascript Cordova:如何设置特定于平台的config.xml文件,该文件在Cordova构建后不会被覆盖?

Javascript Cordova:如何设置特定于平台的config.xml文件,该文件在Cordova构建后不会被覆盖?,javascript,android,ios,cordova,Javascript,Android,Ios,Cordova,我将Cordova与两个平台ios和android配合使用。当我改变我的生活时 Project/config.xml 它将被合并到 Project/platforms/android/res/xml/config.xml Project/platforms/ios/Project/config.xml 在完成cordova构建之后 如何设置不会被cordova build覆盖的特定于平台的设置?由于我还没有找到更好的方法,我建议您将config.xml文件保存到其他位置,然后编写一个脚

我将Cordova与两个平台ios和android配合使用。当我改变我的生活时

Project/config.xml 
它将被合并到

Project/platforms/android/res/xml/config.xml  
Project/platforms/ios/Project/config.xml
在完成cordova构建之后


如何设置不会被cordova build覆盖的特定于平台的设置?

由于我还没有找到更好的方法,我建议您将config.xml文件保存到其他位置,然后编写一个脚本,由cordova编写,然后将config.xml文件复制到编译前应该去的地方,然后让它运行cordova编译。cordova buld只是先进行cordova准备,然后进行cordova编译,因此在这两个步骤之间进行复制的脚本相当于cordova构建,但保留了自定义文件

如果您使用的是xcode IDE,则可以将预操作脚本添加到iOS项目的构建中:

选择产品>方案>编辑方案 从左侧选择构建>预操作 单击+并选择新建运行脚本操作 对于脚本,您可以输入:

科尔多瓦准备 cp命令用于复制保存的config.xml和任何其他要复制的内容。 还有什么你想做的吗。 之后,从xcode内部进行构建将刷新公共代码文件,保留对文件的编辑,并进行构建

这显然是一种解决方法,但它的优点是您可以将不同版本的config.xml和任何其他文件复制到不同的平台目录中

需要注意的一点是,无论何时使用Cordova工具对config.xml或任何其他要保存的文件进行更改时,都必须小心。特别是,无论何时添加或删除插件,都必须记住更新自定义config.xml文件


我希望Cordova工具开发人员要么为这种合理的需求添加支持,要么改进文档(如果它实际上已经得到支持),因为这是一个很好的选择

你需要一个科尔多瓦钩子。我强烈建议您查看以下链接:

更具体地说:

在应用程序的hooks/top-level文件夹中,创建一个子文件夹,以_prepare命名。 在hooks/after_prepare中,创建平台知道如何运行的可执行脚本,例如在Linux上:创建BASH脚本;在Windows上:创建BAT文件;在任何平台上:创建Node.js脚本。假设您想要一个bash脚本: 创建一个after_prepare cordova hook脚本文件 hooks/after\u prepare/change\u my\u configxml.sh 请注意,cordova挂钩最初放置在.cordova/hooks/,但是最近他们已经转移到了一个顶级的hooks/文件夹

编辑: 下面是一个完整的工作脚本,用于创建和运行两个略有不同的cordova应用程序。有趣的是,iOS平台文件夹config.xml中的属性似乎被忽略,因此该脚本在处理iOS时更新顶级config.xml

createMultiPlatformCordovaApp.sh
将平台文件夹添加到存储库、编辑平台文件夹中的文件不是更简单吗?在常规构建中,您只调用cordova compile而不是cordova build,以防止覆盖平台文件

在平台元素中定义特定于平台的配置

<platform name="android">
    <preference name="Fullscreen" value="true" />
    ...
</platform>
见下表:

如果使用旧版本的科尔多瓦,请考虑更新许多关键问题。

#!/bin/bash

echo ${CORDOVA_VERSION};
echo ${CORDOVA_PLATFORMS};
echo ${CORDOVA_PLUGINS};
echo ${CORDOVA_HOOK};
echo ${CORDOVA_CMDLINE};
# == put commands to make your config xml changes here ==
# == replace this statement with your own ==
sed "s/index\.html/http:\/\/my.example.com\?platform=ios\&amp;cordova=3.4.0/" platforms/ios/www/config.xml > config.tmp && mv -f -v config.tmp platforms/ios/www/config.xml
#!/bin/bash
# ==== Create cordova apps with different URLs for android and iOS
cordova create appFolder com.example.myApp "My App"

cd appFolder/

cordova platform add ios
cordova platform add android

# ==== make an after_prepare hook script
mkdir -p hooks/after_prepare 
touch hooks/after_prepare/change_my_configxml.sh
chmod 755 hooks/after_prepare/change_my_configxml.sh
# ==== start of hook script content ====
echo '#!/bin/bash

    echo "CORDOVA_VERSION: ${CORDOVA_VERSION}";
    echo "CORDOVA_PLATFORMS: ${CORDOVA_PLATFORMS}";
    echo "CORDOVA_PLUGINS: ${CORDOVA_PLUGINS}";
    echo "CORDOVA_HOOK: ${CORDOVA_HOOK}";
    echo "CORDOVA_CMDLINE: ${CORDOVA_CMDLINE}";
    # == put commands to make your config xml changes here ==
    # == replace these statement with your own ==

    if [ ! -f platforms/android/res/xml/config.xml ] 
    then 
      cp -v -f config.xml platforms/android/res/xml/config.xml; 
    fi
    if [[ ${CORDOVA_PLATFORMS} == android ]]; then
        sed -E "s/<content src=\"[^\"]+\"/<content src=\"http:\/\/www.google.com\/search\?q=Google%20Nexus%205\&amp;hl=xx-bork\"/" platforms/android/res/xml/config.xml > config.tmp && mv -f -v config.tmp platforms/android/res/xml/config.xml
    fi
    if [[ ${CORDOVA_PLATFORMS} == ios ]]; then
        sed -E "s/<content src=\"[^\"]+\"/<content src=\"http:\/\/www.google.com\/search\?q=iPad%20Retina\&amp;hl=xx-bork\"/"  config.xml > config.tmp && mv -f -v config.tmp config.xml
    fi
' > hooks/after_prepare/change_my_configxml.sh
# ==== end of hook script content ====

cordova prepare android
cordova build android
cordova emulate android

cordova prepare ios
cordova build ios
cordova emulate ios
<platform name="android">
    <preference name="Fullscreen" value="true" />
    ...
</platform>