我正在构建一个Cordova应用程序,我允许不同的客户品牌。我想知道是否有一种方法可以使用默认的config.xml,然后让第二个文件用品牌值覆盖默认值。我需要覆盖很多值,但更明显的一些是:
如果没有Cordova方式这样做,是否有一个我可以用于此目的的linux工具可以输出我的单个config.xml文件?
答案 0 :(得分:1)
实现此目的的最佳方法是为应用程序的每个实例创建一个单独的项目。
以下是我将如何解决这个问题:
1.为config.xml
文件创建模板。
2.在同一目录中创建一个www
文件夹(包含应用程序的文件),在该目录中为每个应用程序实例创建project_folders
。
3.创建应用程序cordova create...
4.在每个实例中,将config.xml
的模板复制到现有模板上,然后针对特定实例进行修改。
5.将www
文件夹从project_root
上方的目录复制到其中,或从www
中删除project_root
文件夹并创建符号链接到{ {1}}上方目录中的{1}}文件夹。
现在您有了应用程序的单独实例,它们共享相同的www
内容但使用自定义project_root
文件。
示例目录结构:
www
答案 1 :(得分:0)
您可以拥有一个xlst
文件来更新config.xml
上的特定属性。例如,我有两个捆绑软件ID(一个用于测试,一个用于原始)。因此,我每个人都需要一个不同的<widget id="<ID>">
。
我的文件夹结构是:
App_Name
\config.xml
\configs
\original
\parser.xslt
\test
\parser.xslt
每个解析器都有其特定的id
,例如:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:widget="http://www.w3.org/ns/widgets"
xmlns:cdv="http://cordova.apache.org/ns/1.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="widget:widget/@id">
<xsl:attribute name="id">
<xsl:value-of select="'TEST_BUNDLE'"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
然后我可以执行一个简单的unix命令xsltproc
来解析/更改文件
xsltproc configs/test/parser.xslt ./config.xml > output_config.xml
请注意,输出文件必须与原始文件不同,此后,您可以mv
的输出替换config
。
希望有帮助,
干杯!