是否可以在构建期间动态指定包名称?

时间:2015-01-06 12:37:49

标签: android xamarin xamarin.android

我想同时将Debug和Release版本部署到我的设备上。如果我在构建之前手动更改清单中的包名称,我可以这样做,例如变化

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          package="my.package">

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          package="my.packageDEBUG">

但是,我想在构建解决方案时自动执行此操作。如果我执行Debug构建,它将在清单中使用package="my.packageDEBUG"构建。

这是可能的,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:14)

您需要为项目创建自定义预建事件。

右键单击您的项目,然后选择属性...

然后单击Build Events并将其添加到Pre-build事件文本框:

PowerShell -File "$(SolutionDir)Update-PackageName.ps1" $(ProjectDir) $(ConfigurationName)

复制以下PowerShell脚本并将其作为 Update-PackageName.ps1

保存在解决方案文件夹中
param ([string] $ProjectDir, [string] $ConfigurationName)
Write-Host "ProjectDir: $ProjectDir"
Write-Host "ConfigurationName: $ConfigurationName"

$ManifestPath = $ProjectDir + "Properties\AndroidManifest.xml"

Write-Host "ManifestPath: $ManifestPath"

[xml] $xdoc = Get-Content $ManifestPath

$package = $xdoc.manifest.package

If ($ConfigurationName -eq "Release" -and $package.EndsWith("DEBUG")) 
{ 
    $package = $package.Replace("DEBUG", "") 
}
If ($ConfigurationName -eq "Debug" -and -not $package.EndsWith("DEBUG")) 
{ 
    $package = $package + "DEBUG" 
}

If ($package -ne $xdoc.manifest.package) 
{
    $xdoc.manifest.package = $package
    $xdoc.Save($ManifestPath)
    Write-Host "AndroidManifest.xml package name updated to $package"
}
祝你好运!

答案 1 :(得分:1)

根据Xamarin论坛上的this question,您可以更改打包属性,并为每个版本指定不同的AndroidManifest.xml文件。

droid.csproj文件中为每个构建配置添加<AndroidManifest>标记,如下所示:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    ...
    <AndroidManifest>Properties\AndroidManifestDbg.xml</AndroidManifest>
    ...

这是Xamarin's documentation on it