是否可以在构建期间动态指定包名称?
Is it possible to specify package name dynamically during build?
我想同时将调试和发布版本部署到我的设备。如果我在构建之前手动更改清单中的包名称,我可以这样做,例如变化
<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">
但是,我想在构建解决方案时自动执行此操作。如果我进行调试构建,它将在清单中使用 package="my.packageDEBUG"
进行构建。
这可能吗?如果可能,怎么做?
您需要为项目创建自定义预构建事件。
右键单击您的项目和 select 属性...
然后点击构建事件并将其添加到预构建事件文本框中:
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"
}
祝你好运!
根据 Xamarin 论坛上的 this question,您可以更改打包属性并为每个构建指定不同的 AndroidManifest.xml
文件。
在 droid.csproj
文件中,像这样为每个构建配置添加 <AndroidManifest>
标签:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<AndroidManifest>Properties\AndroidManifestDbg.xml</AndroidManifest>
...
我想同时将调试和发布版本部署到我的设备。如果我在构建之前手动更改清单中的包名称,我可以这样做,例如变化
<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">
但是,我想在构建解决方案时自动执行此操作。如果我进行调试构建,它将在清单中使用 package="my.packageDEBUG"
进行构建。
这可能吗?如果可能,怎么做?
您需要为项目创建自定义预构建事件。
右键单击您的项目和 select 属性...
然后点击构建事件并将其添加到预构建事件文本框中:
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"
}
祝你好运!
根据 Xamarin 论坛上的 this question,您可以更改打包属性并为每个构建指定不同的 AndroidManifest.xml
文件。
在 droid.csproj
文件中,像这样为每个构建配置添加 <AndroidManifest>
标签:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<AndroidManifest>Properties\AndroidManifestDbg.xml</AndroidManifest>
...