我们有一个使用Mono for Android构建的Android应用程序,现在我们希望制作可部署的测试版本以用于验收测试。生产版本保留在设备上并继续工作非常重要。在不引起包名称冲突等干扰的情况下,建议创建测试版本的建议方法是什么?
答案 0 :(得分:4)
此解决方案适用于Android的Mono,允许您根据Visual Studio中的构建配置更改应用程序的包名称:
AndroidManifest.xml
重命名为AndroidManifest-Template.xml
在 Properties 文件夹中创建两个.xslt文件:
的清单-transform.xslt 强>:
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/manifest/@package">
<xsl:attribute name="package">
<xsl:value-of select="'<your.test.package.name.here>'" />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
<强>清单-copy.xslt 强>:
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
将两个XslTransformation
任务添加到项目文件的BeforeBuild
目标中:
<Target Name="BeforeBuild">
<XslTransformation
Condition="'$(Configuration)|$(Platform)' != 'Test|AnyCPU'"
XslInputPath="Properties\manifest-copy.xslt"
XmlInputPaths="Properties\AndroidManifest-Template.xml"
OutputPaths="Properties\AndroidManifest.xml" />
<XslTransformation
Condition="'$(Configuration)|$(Platform)' == 'Test|AnyCPU'"
XslInputPath="Properties\manifest-transform.xslt"
XmlInputPaths="Properties\AndroidManifest-Template.xml"
OutputPaths="Properties\AndroidManifest.xml" />
</Target>
对条件代码使用 TEST 符号:
#if TEST
[Application(
Label = "App Test",
Theme = "@style/Theme.App.Test",
Icon = "@drawable/ic_launcher_test")]
#else
[Application(
Label = "App",
Theme = "@style/Theme.App",
Icon = "@drawable/ic_launcher")]
#endif
现在,您可以通过更改构建配置来切换测试和常规应用程序:)
答案 1 :(得分:0)
更改包名称应该足以防止冲突,除非您将数据写入硬编码位置,这也需要更改。