Javascript Cordova:如何设置特定于平台的config.xml文件,该文件在Cordova构建后不会被覆盖?
我将Cordova与两个平台ios和android配合使用。当我改变我的生活时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文件保存到其他位置,然后编写一个脚
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\&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\&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\&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>