5

, ben ürün tatlar kurdunuz:Android, Gradle, ürün lezzetleri ve <code>build.gradle</code> yılında tezahür

productFlavors 
{ 
    AlternateFlavour 
    { 
     applicationId "com.myapp.alternateflavour" 
    } 
} 

Sonra sourceSets bölümünde, ben bu tatlar için farklı bir kaynak, varlık ve tezahür dizinleri kullanın:

Şimdiye kadar tamam OK. Bu bildirim olarak

kısmen otomatik olarak bir tat, tarafından kullanılan, sahip aşağıdaki gibidir:
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myapp.myapp" 
    android:versionCode="1010001" 
    android:versionName="V1.1.0.1" > 

ancak kök projesinde orijinal manifest

olup:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myapp.myapp" 
    android:versionCode="1010000" 
    android:versionName="V1.1.0.DEBUG" > 

Error: 
    Attribute [email protected] value=(1010001) from AndroidManifest.xml:4:5-28 
    is also present at AndroidManifest.xml:4:5-28 value=(1010000). 
Attributes of <manifest> elements are not merged. 

Neden merg çalışıyor: Bu Gradle başarısız olmasına neden olur Ben orijinal manifest ile e, ben belirttiğim zaman başka bir yerde görünmelidir?

Ve bunu nasıl durdurabilirim?

Bazılarının neden bu şekilde yaptığımı veya gerçekten de önerilen aroma proje yapısını kullanmadığımı sorgulayacağını umuyorum. Eh, Gradle dışında kullanmak için normal bir manifestoya ihtiyacım var. Eclipse'den dağıtmak için (her seferinde bir şey lütfen!) ve ayrıca oluşturma işlemiyle enjekte edilecek sürümlere de ihtiyacım var.

cevap

0

Ben @CommonsWare Yanıtlarında söylediklerini göz önünde tutarak olacağım ama şöyle şimdi, ben bu çözdüğümü:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.myapp.myapp" 
    tools:replace="android:versionName,android:versionCode" 
    android:versionCode="1010001" 
    android:versionName="V1.1.0.1" > 

Not iki tools parçacıkları. Anahtar Maps API versionName

  • versionCode
    • : Tam Gradle hatası üç sorunlara atıfta çünkü

      Başlangıçta bu konuda biliyordum ama bunu çalışırken ertelendi Tümü otomatik olarak eklenen

      . Bununla birlikte, sadece sonuncusunun önerisi olarak tools:replace profesörlüdür, bu yüzden manifest özniteliklerinde işe yaramayacağı izlenimi edinilmiştir. Aslında öyle.

  • 4

    Başka bir yerde görünmesi gerektiğini belirttiğimde neden orijinal bildirimle birleşmeye çalışıyor?

    bildiriminin bildiriminin başka bir yerde olduğunu söylediniz. tezahür birleşme süreci tüm ilgili manifestoyu birleştirir:

    • main
    • inşa tip
    • Ürünün tadı (ler)
    • kütüphaneler main yılında

    tezahür daima önemlidir.

    Bunu nasıl durdurabilirim?

    main'daki bildirimler her zaman alakalı olmadıkça yapmazsınız.

    iyi çözüm, genel olarak, tüm manifestolarına gelen versionCode ve versionName kurtulmak ve tam programlanabilir denetime sahip build.gradle, bunları elde etmektir.

    sonraki en iyi çözüm burada gösterilmiyor ürün lezzet içine main manifestin dışarı versionCode ve versionName taşımaktır. AFAIK'in sadece bir ürün aroması yaratabileceğinin anlamını taşıyan AFAIK'in tek bir ürün çeşnisi yarattığını hiç görmedim. (AFAIK'in aroma içermeyen tatları vardır). Ürün aromaları genellikle 2+ (örneğin, Oynatım Hizmetlerini kullanan google aroması ve olmayan standalone çeşidi) gruplarında gelir. main'daki değerler gerçekten AlternateFlavour aroması içinse, oradaki mainversion... öğelerinizi taşıyın.

    Bunun ötesinde, istediğinizi almak için doğru yönergelere koyabileceğinizi görmek için the documentation on the manifest merger process incelemeye davetlisiniz.

    +0

    Her şeyden önce, burada bir sürü lezzet var - sadece verilen örneği basit tutmaya çalıştım. IDE dağıtımı tarafından kullanılan özellik olduğundan, orijinal manifestten öznitelikleri kaldırmayla alamıyorum (AFAIK). Ancak, öznitelik olmadan üçüncü bir tane oluşturabilirim ve Gradle'ın bunu varsayılan olarak kullanması gerekir. Aşırı görünüyor! –

    +0

    @RobPridham: "IDE dağıtımı tarafından kullanılan budur" - Android Studio'yu kullanıyorsanız, Varyantları Oluştur aracı, IDE tarafından kullanılanı denetler. – CommonsWare

    +0

    Gerçekten. Ne yazık ki - maalesef - hala bu geliştirme için Eclipse & ADT kullanarak, çeşitli iyi (zamanla daha az iyi) nedenlerden dolayı. –

    İlgili konular