Cordova: How to set Platform-specific config.xml file which is not overwritten after cordova build?

后端 未结 4 786
说谎
说谎 2021-02-08 14:30

I use Cordova with two platforms ios and android. When I change something in my

Project/config.xml 

it will be merged into

Pro         


        
4条回答
  •  北荒
    北荒 (楼主)
    2021-02-08 15:18

    You need a cordova hook. I strongly recommend you see this link: Cordova Hooks

    More specifically:

    1. In the hooks/ top-level folder of your app, create a subfolder named "after_prepare".
    2. In hooks/after_prepare , create an executable script that your platform knows how to run (e.g. on Linux: create a BASH script; on Windows: create a BAT file; on any platform: create a Node.js script). Let's say you want a bash script:

    create an "after_prepare" cordova hook script file

    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
    

    hooks/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\&cordova=3.4.0/" platforms/ios/www/config.xml > config.tmp && mv -f -v config.tmp platforms/ios/www/config.xml
    

    Note that cordova hooks were originally placed in .cordova/hooks/... , but recently they have moved to a top-level hooks/ folder.

    EDIT:

    Here is a fully working script to create and run two slightly different cordova apps. Interestingly, the attribute in the iOS platform folder's config.xml seems to get ignored, so this script updates the top-level config.xml when dealing with iOS.

    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/ config.tmp && mv -f -v config.tmp platforms/android/res/xml/config.xml
        fi
        if [[ ${CORDOVA_PLATFORMS} == ios ]]; then
            sed -E "s/ 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
    

提交回复
热议问题