2016-05-21 19 views
5

bir değeri besler:Gradle hatası "tezahür yer tutucu ikamesi gerektiriyor" ama manifestPlaceholders ben build.gradle android uzantısından AndroidManifest.xml dosya içinde ikame gerçekleştirmek çalışıyorum ama bu hatayı alıyorum

AndroidManifest.xml:89:16 Error: 
    Attribute uses-library#com.company.platform.${encoding}@name at AndroidManifest.xml:89:16 requires a placeholder substitution but no value for <encoding> is provided. 
/Users/Company/Desktop/Checkout/android/Project/app/src/main/AndroidManifest.xml:0:0 Error: 
    Validation failed, exiting 
:app:processDebugManifest FAILED 

Bu Bildiri dosyasının snippet'idir:

... 
    </receiver> 
    <uses-library android:name="com.company.platform.${encoding}" /> 
</application> 
... 

Ve bu build.gradle bir Kesik geçerli:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 
    defaultConfig { 
     applicationId "com.company.app" 
     minSdkVersion 23 
     targetSdkVersion 23 
     versionName cityVersion 
     setProperty("archivesBaseName", "City_$versionName") 
     manifestPlaceholders = [encoding: "some value"] 
     manifestPlaceholders = [version: cityVersion] 
    } 

Ben de yani buildTypes içinde

buildTypes { 
    release { 
     minifyEnabled true 
     shrinkResources true 
     manifestPlaceholders = [encoding: deviceEncoding] 
     manifestPlaceholders = [version: cityIDVersion] 
    } 
    debug { 
     manifestPlaceholders = [encoding: deviceEncoding] 
     manifestPlaceholders = [version: cityIDVersion] 
    } 

}

manifestPlaceholders ekleyerek denedim Ama hala aynı hatayı alıyorum.

Bildiri gönderen kişilerde yer aldığında yer tutucu değişikliği gerektiren bir hata neden var?

cevap

18

. Onu değiştiriyorsun. Bunu yapın:

manifestPlaceholders = [encoding: "some value", version: cityVersion] 

manifestPlaceholders ilan ederek iki kez aynı lezzet için/türünü oluşturmak senin bir önceki yerini almaktadır. Bir öncekinin yerini aldıktan sonra, mülk artık mevcut olmadığından yapınız başarısız oldu.

Ben $ {} Benim değeri etrafında sembolleri bırakmıştı
+0

Çok teşekkür ederim! –

+0

doğru cevap benim için – floatingmuseum

1

Uygulama sınıfına applicationId yer tutucusunu eklemeniz gerekir. Bu Gradle 2.2.0-alfa1 güncellendikten sonra, Firebase entegrasyonu ile olur

android { 
    ... 
    defaultConfig { 
     applicationId "com.example.my.app" 
     ... 
    } 
} 

Bkz: Unable to get provider com.google.firebase.provider.FirebaseInitProvider Sadece diziye eklemem gerekiyor

+0

Onun. – Gruntcakes

+0

Ah, gerçekten, üzgünüm ... Bu soruna kendimi kör olarak baktım.Hata mesajını çözdüm, buna sahip değildim, ancak hala Android Studio'dan herhangi bir APK alıyorum değil ... sadece, şimdi de hiçbir hata/uyarılar –

0

: tezahür kitaplıklarınızdaki tanımlanan manifestPlaceholders nedeniyle tezahür birleşme/tezahür enjeksiyon sorunlar yaşamaya devam olanlar için

<meta-data android:name="net.example" android:value="${XXXX}" /> 
+0

Ne demeye çalışıyorsun? Anlamadım ... – Sakiboy

+0

$ {...} ile sarma yapmadan değeri ekledim –

0

, konu geliyor kütüphanelerinizde manifestPlaceholders için bir değer tanımlamanız gerektiği gerçeği. Tüketici uygulamasında gerçek değerinizi enjekte ettiğinizde bu değer geçersiz kılmamaktadır. Bunu aşmak için, kitaplığınızda yalnızca debug yapıları için manifestPlaceholders değerlerini tanımlamanız gerekir. böylece gibi

:

android.buildTypes.debug.manifestPlaceholders = [ 
    authScheme: 'clientAppReplaces', authHost: 'clientAppReplaces' 
] 

Bunu yaparak kütüphanenizi oluşturmak mümkün olacaktır. İstemci uygulamasının manifestPlaceholders için doğru değerleri sağlamasına izin verirken. Kütüphanenizin tüm bu ağır kaldırma işlemlerini yapmasına izin verin. Bu mümkündür çünkü kütüphaneler serbest bırakıldıkça inşa edilirler (aksi belirtilmedikçe).

İstemci uygulaması build.gradle örnek: zaten orada

defaultConfig { 
    applicationId "com.app.manifestPlaceholders" 
    minSdkVersion 16 
    targetSdkVersion 27 
    versionCode project.ext.versionCode 
    versionName project.ext.versionName 

    manifestPlaceholders = [authScheme: 'customSchemeValue', authHost: 'hostValue'] 
} 
İlgili konular