2015-01-06 13 views
8

Mi piacerebbe distribuire entrambe le build di debug e release sul mio dispositivo allo stesso tempo. Posso farlo se cambio manualmente il nome del pacchetto nel manifest prima di creare, ad es. cambiareÈ possibile specificare il nome del pacchetto dinamicamente durante la compilazione?

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

a

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

Tuttavia, mi piacerebbe farlo automaticamente quando sto costruendo la soluzione. Se eseguo un build di debug, verrà creato con package="my.packageDEBUG" nel manifest.

E 'possibile, e se sì, come?

risposta

13

È necessario creare un evento pre-compilazione personalizzato per il progetto.

pulsante destro del mouse sul progetto e selezionare Proprietà ...

Poi clicca su Eventi di compilazione e aggiungere questo alla casella di testo evento pre-compilazione:

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

Copiare il seguente script PowerShell e risparmiare nella vostra cartella della soluzione come 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" 
} 

Buona fortuna!

+1

Grazie. Funziona! Va notato che PowerShell richiede l'applicazione di 'Set-ExecutionPolicy RemoteSigned' prima che funzioni. – DaveDev

+1

Ho dovuto eseguire questa operazione in PowerShell: "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser" – xleon

+0

Qualcuno ha idea di come modificare l'etichetta dell'app (nome app) utilizzando una variante di questo powershell? –

1

In base allo this question sul forum Xamarin è possibile modificare le proprietà di packaging e specificare diversi file AndroidManifest.xml per ogni build.

Nel file droid.csproj aggiungere il tag <AndroidManifest> in questo modo, per ogni configurazione di generazione:

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

Ecco il Xamarin's documentation on it.

+1

Hai rimosso il tag manifest Android dal gruppo di proprietà globale/esterno? – david

Problemi correlati