2015-01-06 2 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"> 

에 내가 솔루션을 구축있을 때, 나는 자동으로 수행하고 싶습니다 변경. 디버그 빌드를 수행하면 매니페스트에 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

안드로이드 매니페스트 태그를 글로벌/외부 속성 그룹에서 제거 했습니까? – david

관련 문제