2015-01-06 14 views
8

Aynı anda hem Hata Ayıklama hem de Sürüm yapılarını cihazıma dağıtmak istiyorum. Oluşturmadan önce manifestodaki paket adını manuel olarak değiştirirsem bunu yapabilirim.Yapı sırasında paket adını dinamik olarak belirtmek mümkün mü?

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

Ancak

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

I çözümü inşa ediyorum, ben otomatik olarak yapmak istiyorum değiştirin. Bir Hata Ayıklama yapısı yaparsam, manifestoda package="my.packageDEBUG" ile oluşturulacaktır.

Bu mümkün mü ve eğer öyleyse, nasıl?

cevap

13

Projeniz için özel bir Oluşturma Öncesi Etkinlik oluşturmanız gerekir.

projeniz sağ tıklayın ve Özellikler seçeneğini seçin ...

Sonra Yapı Olaylar tıklayıp öncesi build olay metin ekleyin:

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

Kopya aşağıdaki PowerShell komut dosyası ve kaydedin sizin çözüm klasöründe olarak Güncelleme-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" 
} 

İyi şanslar!

+1

Teşekkürler. İşe yarıyor! PowerShell'in çalışması için “Set-ExecutionPolicy RemoteSigned” uygulanmasını gerektirdiği belirtilmelidir. – DaveDev

+1

Bunu PowerShell'de yapmam gerekiyordu: "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser" – xleon

+0

Bu powershell'in bir varyasyonunu kullanarak uygulama etiketini (uygulama adı) nasıl değiştirebileceği hakkında herhangi bir fikri olan var mı? –

1

Xamarin'in forumundaki this question belgesine göre, Paketleme Özelliklerini değiştirebilir ve her yapı için farklı AndroidManifest.xml dosyaları belirleyebilirsiniz. droid.csproj dosyasında

her yapı yapılandırma için, şöyle <AndroidManifest> etiketi ekleyin:

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

İşte Xamarin's documentation on it bu.

+1

Android manifest etiketini global/property grubunun dışından kaldırdınız mı? – david

İlgili konular