2015-01-06 80 views
8

我想同時將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"構建。

這是可能的,如果是這樣,如何?

回答

13

您需要爲您的項目創建自定義預構建事件。你的項目

右鍵單擊並選擇屬性...

然後單擊生成事件,這增加了預生成事件文本框:

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

複製以下PowerShell腳本和保存它在你的解決方案的文件夾中更新,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

謝謝。有用!需要注意的是PowerShell需要使用「Set-ExecutionPolicy RemoteSigned」才能使用。 – DaveDev

+1

我必須在PowerShell中執行此操作:「Set-ExecutionPolicy RemoteSigned -Scope CurrentUser」 – xleon

+0

任何人都有任何想法如何通過使用此PowerShell的變體來更改應用程序標籤(應用程序名稱)? –

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

+1

您是否從全局/屬性組外部刪除了Android清單標記? – david

相關問題