【问题标题】:Cordova: How to set Platform-specific config.xml file which is not overwritten after cordova build?Cordova:如何设置特定于平台的 config.xml 文件,该文件在 cordova 构建后不会被覆盖?
【发布时间】:2014-05-17 00:28:10
【问题描述】:

我在两个平台 ios 和 android 上使用 Cordova。当我改变我的

Project/config.xml 

会合并到

Project/platforms/android/res/xml/config.xml  
Project/platforms/ios/Project/config.xml

在进行 cordova 构建之后。

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

【问题讨论】:

    标签: javascript android ios cordova


    【解决方案1】:

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

    <platform name="android">
        <preference name="Fullscreen" value="true" />
        ...
    </platform>
    

    见底部:http://cordova.apache.org/docs/en/4.0.0/config_ref_index.md.html

    如果您使用旧版本的 Cordova,请考虑更新,因为许多关键问题已得到修复。

    【讨论】:

      【解决方案2】:

      你需要一个科尔多瓦钩。我强烈建议您查看此链接:Cordova Hooks

      更具体地说:

      1. 在应用的 hooks/ 顶级文件夹中,创建一个名为“after_prepare”的子文件夹。
      2. 在 hooks/after_prepare 中,创建您的平台知道如何运行的可执行脚本(例如,在 Linux 上:创建 BASH 脚本;在 Windows 上:创建 BAT 文件;在任何平台上:创建 Node.js 脚本)。假设您想要一个 bash 脚本:

      创建一个“after_prepare”cordova 钩子脚本文件

      mkdir -p hooks/after_prepare
      touch hooks/after_prepare/change_my_configxml.sh
      chmod 755 hooks/after_prepare/change_my_configxml.sh
      edit hooks/after_prepare_change_my_configxml.sh
      

      钩子/after_prepare/change_my_configxml.sh

      #!/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
      

      请注意,cordova 挂钩最初放置在 .cordova/hooks/... 中,但最近它们已移至顶级 hooks/ 文件夹。

      编辑:

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

      createMultiPlatformCordovaApp.sh

      #!/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
      

      【讨论】:

        【解决方案3】:

        由于我还没有找到更好的方法,我建议将 config.xml 文件根据需要保存在其他位置,并编写一个执行 cordova prepare 的脚本,然后将 config.xml 文件复制到它应该在编译之前运行,然后运行cordova compilecordova buld 只是执行 cordova prepare 后跟 cordova compile,因此在这两个步骤之间执行此复制的脚本等同于 cordova build,但会保留您的自定义文件。

        如果您使用的是 xcode IDE,您可以在 iOS 项目的构建中添加一个 pre-action 脚本:

        1. 选择产品 > 方案 > 编辑方案
        2. 从左侧选择 Build > Pre-actions
        3. 单击 + 并选择“新建运行脚本操作”

        对于脚本,您可以输入:

        1. cordova prepare
        2. cp 命令复制您保存的 config.xml 以及您要复制的任何其他内容。
        3. 您想做的任何其他事情。

        之后,从 xcode 内部进行构建将刷新您的公共代码文件,保留您对文件的编辑,然后进行构建。

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

        其中一个警告是,当您使用 Cordova 工具对 config.xml 或您通过准备保留的任何其他文件进行更改时,您必须小心。特别是,您必须记住在添加或删除插件时更新您的自定义 config.xml 文件。

        我希望 Cordova 工具开发人员要么添加对这种合理需求的支持,要么改进文档(如果它实际上已经被支持),因为这样。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多