Bu sayfada manifest birleştirmenin işleyiş şekli ve birleştirme işlemini nasıl uygulayabileceğiniz açıklanmaktadır. tercihlerini birleştirme çakışmalarını çözme. Uygulamaya giriş için daha fazla bilgi için uygulama manifestine genel bakış.
Birden fazla manifest dosyasını birleştirme
APK veya Android App Bundle dosyanız yalnızca bir tane içerebilir
AndroidManifest.xml
dosyası içeriyor, ancak Android Studio projeniz şunları içerebilir:
ana kaynak grubu, derleme varyantları ve içe aktarılanlar tarafından sağlanan birkaç manifest dosyası
kitaplıklar. Uygulamanızı oluştururken Gradle derlemesi
tüm manifest dosyalarını paketlenen tek bir manifest dosyasında
uygulamanıza.
Manifest birleştirme aracı, aşağıdaki adımları uygulayarak her bir dosyadaki tüm XML öğelerini birleştirir: tanımladığınız birleştirme tercihlerine uyma ve buluşsal yöntemleri birleştirme özellikleri kullanır.
İpucu: Birleştirilmiş Manifest'i kullanın. görünümünü incelemenizi öneririz. hatalar.
Öncelikleri birleştir
Birleştirme aracı, tüm manifest dosyalarını tek bir dosyada birleştirir öncelik sırasına göre sırayla güncelleyin. Örneğin yeni web sitesi üç manifest dosyası varsa, en düşük öncelikli manifest; sonraki en yüksek öncelikli manifeste gönderilir ve bu rapor, en yüksek öncelikli manifest'ini kullanabilirsiniz.
Her bir manifest dosyasıyla birleştirilebilecek üç temel manifest dosyası türü vardır diğer öncelikleri ve birleştirme öncelikleri aşağıdaki gibidir (önce en yüksek öncelikli):
- için manifest dosyası olarak
derleme varyantı
Varyantınız için birden fazla kaynak grubunuz varsa bunların manifest öncelikleri aşağıdaki gibidir:
- Varyant manifestini oluşturun (ör.
src/demoDebug/
) - Derleme türü manifesti (ör.
src/debug/
) - Ürün aroma manifesti (ör.
src/demo/
)Aroma boyutları kullanıyorsanız manifest önceliklerinin her boyutun tablodaki sıralamaya
flavorDimensions
mülkü (birinci en yüksek önceliğe sahiptir).
- Varyant manifestini oluşturun (ör.
- Uygulama modülü için ana manifest dosyası
- Dahil edilen bir kitaplıktaki manifest dosyası
Birden fazla kitaplığınız varsa manifest öncelikleri eşleşir göründükleri sıraya sokmaktır.
dependencies
blok.
Örneğin, bir kitaplık manifesti ana manifestte birleştirilir, ardından ana manifesto manifest dosyası, derleme varyantı manifestinde birleştirilir. Bunların aynı açıklandığı gibi, tüm kaynak kümeleri için öncelikleri birleştirme Kaynak kümeleriyle derleyin.
Önemli:
build.gradle
dosyası,
birleştirilmiş manifest dosyası olabilir. Örneğin,
build.gradle
satıcısından minSdk
veya
build.gradle.kts
dosyası,
<uses-sdk>
manifest öğesi. Karışıklık olmaması için
<uses-sdk>
öğesi seçin ve bu özellikleri yalnızca
build.gradle
dosya Daha fazla bilgi için bkz.
Derlemenizi yapılandırın.
Çakışma buluşsal yöntemleri birleştirme
Birleştirme aracı, bir manifestteki her XML öğesini mantıksal olarak başka bir manifest'te karşılık gelen öğe oluşturabilirsiniz. Eşleştirme hakkında ayrıntılı bilgi için nasıl çalışırsa sonraki bölümde yer alan birleştirme önceliklerine bakın.
Düşük öncelikli manifestteki bir öğe, daha yüksek öncelikli manifeste eklenir ve daha sonra, birleştirilmiş manifeste eklenir. Ancak, eşleşen bir öğe varsa birleştirme aracı, belirli bir öğeyi her birindeki tüm özellikleri aynı öğeye taşır. Araç, hem manifest'ler, farklı değerlerle aynı özelliği, ardından bir birleştirme ve çakışma meydana gelir.
Tablo 1'de, birleşme aracının birleştirmeye çalıştığı durumlarda ortaya çıkabilecek aynı öğede toplar.
Yüksek öncelikli özellik | Düşük öncelikli özellik | Özelliğin birleştirilmiş sonucu |
---|---|---|
Değerli değil | Değerli değil | Değer yok (varsayılan değeri kullan) |
B Değeri | B Değeri | |
A Değeri | Değerli değil | A Değeri |
A Değeri | A Değeri | |
B Değeri | Çakışma hatası - birleştirme kuralı işaretçisine ihtiyacınız olacaktır. |
Ancak, birleştirme aracının farklı davrandığı birkaç durum vardır. için şu adımları izleyin:
<manifest>
öğesindeki özellikler hiçbir zaman birleştirilmez birlikte; yalnızca en yüksek öncelikli manifestteki özellikler kullanılır.- Şuradaki
android:required
özelliği:<uses-feature>
ve<uses-library>
öğede VEYA birleştirme işlemi yapılır. Uyuşmazlık varsa"true"
ve bir manifestin gerektirdiği özellik veya kitaplık her zaman dahil edilir. - Şuradaki özellikler:
<uses-sdk>
öğesi, her zaman aşağıdaki durumlar haricinde yüksek öncelikli manifest:- Düşük öncelikli manifestte
minSdk
değeri olduğunda daha yüksekse bir hata alırsınız.overrideLibrary
birleştirme kuralı. - Düşük öncelikli manifestte
targetSdkVersion
olduğunda küçük bir değerse, birleştirme aracı manifestodan çıkarılır ve ayrıca sistem izinlerini de ekler. içe aktarılan kitaplığın normal şekilde çalışmaya devam etmesini sağlamak için düzgün şekilde çalışır (daha yüksek Android sürümünün yüklü olduğu izin kısıtlamalarının artırılmasına yol açabilir. Bu konuda daha fazla bilgi için daha fazla bilgi için dolaylı sistem hakkında izinleriyle ilgili daha fazla bilgi edinin.
- Düşük öncelikli manifestte
<intent-filter>
öğesi hiçbir zaman şunlarla eşleşmez: manifestolarını ekleyebilirsiniz. Her biri benzersiz olarak ele alınır ve birleştirilmiş manifestteki ortak üst öğeye eklendi.
Özellikler arasındaki diğer tüm çakışmalar için hata mesajı alırsınız. birleştirme aracına özel bir özellik ekleyerek manifest dosyasına gönderebilirsiniz. Aşağıdaki bölümde birleştirme kuralı işaretçileri hakkında daha fazla bilgi edinin.
Varsayılan özellik değerlerine güvenmeyin. Çünkü tüm
benzersiz özelliklerin aynı öğede birleştirilmesi,
daha yüksek öncelikli manifest dosyası aslında
belirtmeden bir özelliğin varsayılan değerini belirleyebilir. Örneğin,
öncelik manifest'inde android:launchMode
bildirilmiyor
özelliğiyle, bu durumda varsayılan "standard"
değerini kullanır; ancak
düşük öncelikli manifesto bu özelliği farklı bir değerle tanımlar.
değeri, varsayılan değeri geçersiz kılan birleştirilmiş manifeste uygulanır. Siz
her bir özelliği istediğiniz gibi açık bir şekilde tanımlamanız gerekir. Varsayılan değerler
manifest referansı.
Kural işaretçilerini birleştirme
Birleştirme kuralı işaretçisi, tercihinizi ifade etmek için kullanabileceğiniz bir XML özelliğidir. birleştirme çakışmalarını giderme veya istenmeyen öğe ve özellikleri kaldırma hakkında bilgi edinin. İşaretçiyi bir öğenin tamamına veya yalnızca belirli bir öğeye uygulayabilirsiniz özellikleridir.
Birleştirme aracı, iki manifest dosyasını birleştirirken bu işaretçileri daha yüksek öncelikli manifest dosyanız.
Tüm işaretçiler Android tools
ad alanına ait olduğundan önce aşağıdakileri belirtmeniz gerekir:
bu ad alanını, aşağıda gösterildiği gibi <manifest>
öğesinde belirtirsiniz:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp" xmlns:tools="http://schemas.android.com/tools">
Düğüm işaretçileri
Bir birleştirme kuralını bir XML öğesinin tamamına (belirli bir öğedeki tüm özelliklere) manifest öğesine ve tüm alt etiketlerine) aşağıdaki komutu kullanın: özellikler:
tools:node="merge"
- Aşağıdaki durumlarda bu etiketteki tüm özellikleri ve iç içe yerleştirilmiş tüm öğeleri birleştir
birleştirme kullanılarak çakışma olmaması
çatışma bulguları. Bu, öğeler için varsayılan davranıştır.
Düşük öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:windowSoftInputMode="stateUnchanged"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Yüksek öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait" tools:node="merge"> </activity>
Birleştirilmiş manifest sonucu:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait" android:windowSoftInputMode="stateUnchanged"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
tools:node="merge-only-attributes"
- Yalnızca bu etiketteki özellikleri birleştir; iç içe yerleştirilmiş öğeleri birleştirmeyin.
Düşük öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:windowSoftInputMode="stateUnchanged"> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Yüksek öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait" tools:node="merge-only-attributes"> </activity>
Birleştirilmiş manifest sonucu:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait" android:windowSoftInputMode="stateUnchanged"> </activity>
tools:node="remove"
- Bu öğeyi birleştirilmiş manifest'ten kaldırın. Kullanıldığı durum
Birleştirilmiş manifest'inizde ihtiyacınız olmayan bir öğe bulduğunuzda
, kontrolünüz dışında düşük öncelikli bir manifest dosyası tarafından sağlandı
(içe aktarılan bir kitaplık gibi).
Düşük öncelikli manifest:
<activity-alias android:name="com.example.alias"> <meta-data android:name="cow" android:value="@string/moo"/> <meta-data android:name="duck" android:value="@string/quack"/> </activity-alias>
Yüksek öncelikli manifest:
<activity-alias android:name="com.example.alias"> <meta-data android:name="cow" tools:node="remove"/> </activity-alias>
Birleştirilmiş manifest sonucu:
<activity-alias android:name="com.example.alias"> <meta-data android:name="duck" android:value="@string/quack"/> </activity-alias>
tools:node="removeAll"
tools:node="remove"
ile benzer, ancak tümünü kaldırır bu öğe türüyle eşleşen öğeler (aynı üst öğe içinde).Düşük öncelikli manifest:
<activity-alias android:name="com.example.alias"> <meta-data android:name="cow" android:value="@string/moo"/> <meta-data android:name="duck" android:value="@string/quack"/> </activity-alias>
Yüksek öncelikli manifest:
<activity-alias android:name="com.example.alias"> <meta-data tools:node="removeAll"/> </activity-alias>
Birleştirilmiş manifest sonucu:
<activity-alias android:name="com.example.alias"> </activity-alias>
tools:node="replace"
- Düşük öncelikli öğeyi tamamen değiştirin. Yani,
düşük öncelikli manifest'te eşleşen bir öğedir, bunu yoksayın ve
tam olarak bu manifestte göründüğü şekilde ekleyin.
Düşük öncelikli manifest:
<activity-alias android:name="com.example.alias"> <meta-data android:name="cow" android:value="@string/moo"/> <meta-data android:name="duck" android:value="@string/quack"/> </activity-alias>
Yüksek öncelikli manifest:
<activity-alias android:name="com.example.alias" tools:node="replace"> <meta-data android:name="fox" android:value="@string/dingeringeding"/> </activity-alias>
Birleştirilmiş manifest sonucu:
<activity-alias android:name="com.example.alias"> <meta-data android:name="fox" android:value="@string/dingeringeding"/> </activity-alias>
tools:node="strict"
- Bu öğe daha düşük öncelikli olduğunda herhangi bir zamanda derleme hatası oluştur
manifest dosyası, daha yüksek öncelikli manifestteki öğeyle tam olarak eşleşmiyor (
diğer birleştirme kuralı işaretçileri tarafından çözüldüğünü gösterir). Bu, birleştirme çakışması buluşsal yöntemlerini geçersiz kılar. Örneğin,
Örneğin, düşük öncelikli manifest'te ekstra bir özellik varsa
başarısız olur (varsayılan davranış ise fazladan özelliği
(birleştirilmiş manifesto) ekleyebilirsiniz.
Düşük öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:windowSoftInputMode="stateUnchanged"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Yüksek öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait" tools:node="strict"> </activity>
Bu durum, manifest birleştirme hatasına neden olur. İki manifest öğesi yüksek düzey modunda hiç farklılık gösteremez. Diğer birleştirme kuralı işaretçilerini uygulamanız gerekir ortadan kaldırır. (
tools:node="strict"
olmadan, bu aşağıdaki örnekte gösterildiği gibi, iki dosya hatasız olarak birleştirilebilir:tools:node="merge"
) dokunun.
Özellik işaretçileri
Bunun yerine, birleştirme kuralını bir öğedeki belirli özelliklere uygulamak için manifest etiketi için aşağıdaki kodu kullanın: özellikleri hakkında daha fazla bilgi edinin. Her özellik bir veya daha fazla özellik adını kabul eder ( özellik ad alanı) kaldırın.
tools:remove="attr, ..."
- Belirtilen özellikleri, birleştirilmiş manifest'ten kaldırın.
Düşük öncelikli manifest dosyası bunları içerdiğinde kullanılır
varsa ve bunların birleştirilmiş
manifest'ini kullanabilirsiniz.
Düşük öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:windowSoftInputMode="stateUnchanged">
Yüksek öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait" tools:remove="android:windowSoftInputMode">
Birleştirilmiş manifest sonucu:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait">
tools:replace="attr, ..."
- Düşük öncelikli manifestte belirtilen özellikleri
bu manifestteki diğer
dosyaları içeriyor. Diğer bir deyişle,
yüksek öncelikli manifestin değerlerine.
Düşük öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:theme="@oldtheme" android:exported="false" android:windowSoftInputMode="stateUnchanged">
Yüksek öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:theme="@newtheme" android:exported="true" android:screenOrientation="portrait" tools:replace="android:theme,android:exported">
Birleştirilmiş manifest sonucu:
<activity android:name="com.example.ActivityOne" android:theme="@newtheme" android:exported="true" android:screenOrientation="portrait" android:windowSoftInputMode="stateUnchanged">
tools:strict="attr, ..."
- Bu özellikler
düşük öncelikli manifest, yüksek öncelikli özelliklerle tam olarak eşleşmiyor
manifest'ini kullanabilirsiniz. Aşağıdakiler hariç tüm özellikler için varsayılan davranış budur:
birleştirme çatışması buluşsal yöntemlerinde açıklandığı gibi özel davranışlara sahip olan kişiler.
Düşük öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:screenOrientation="landscape"> </activity>
Yüksek öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:screenOrientation="portrait" tools:strict="android:screenOrientation"> </activity>
Bu durum, manifest birleştirme hatasına neden olur. Diğer birleştirme kuralını uygulamanız gerekiyor işaretleyici olarak işaretleyin. Bu, varsayılan davranış olduğu için aynı sonuç,
tools:strict="screenOrientation"
Ayrıca, aşağıdaki örnekte gösterildiği gibi bir öğeye birden çok işaretçi de uygulayabilirsiniz:
Düşük öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:theme="@oldtheme" android:exported="false" android:allowTaskReparenting="true" android:windowSoftInputMode="stateUnchanged">
Yüksek öncelikli manifest:
<activity android:name="com.example.ActivityOne" android:theme="@newtheme" android:exported="true" android:screenOrientation="portrait" tools:replace="android:theme,android:exported" tools:remove="android:windowSoftInputMode">
Birleştirilmiş manifest sonucu:
<activity android:name="com.example.ActivityOne" android:theme="@newtheme" android:exported="true" android:allowTaskReparenting="true" android:screenOrientation="portrait">
İşaretçi seçici
Birleştirme kuralı işaretçilerini yalnızca belirli bir
içe aktarılmış kitaplık varsa, tools:selector
özelliğini
kitaplık paketinin adını yazın.
Örneğin, aşağıdaki manifestte remove
birleştirme kuralı, yalnızca düşük öncelikli manifest dosyası dizinden alındığında uygulanır.
com.example.lib1
kitaplığı:
<permission android:name="permissionOne" tools:node="remove" tools:selector="com.example.lib1">
Düşük öncelikli manifest başka bir kaynaktan geliyorsa
remove
birleştirme kuralı yoksayıldı.
Not: Bunu özellik işaretçilerinden biriyle kullanırsanız daha sonra, işaretçide belirtilen tüm özellikler için geçerli olur.
<uses-sdk> öğesini geçersiz kıl içe aktarılan kitaplıklar için
Varsayılan olarak, minSdk
değerine sahip bir kitaplığı içe aktarırken
ana manifest dosyasından daha yüksek olursa bir hata oluşur ve
kitaplığı içe aktarılamıyor.
Birleştirme aracının bu çakışmayı yok saymasını ve
uygulamanızın minSdk
değerini korurken kitaplığı içe aktarın
değeri için <uses-sdk>
etiketine overrideLibrary
özelliğini ekleyin.
Özellik değeri bir veya daha fazla kitaplık paketi adı olabilir
(virgülle ayırarak)
manifest dosyasındaki minSdk
.
Örneğin, uygulamanızın ana manifest'inde overrideLibrary
uygulanıyorsa
aşağıdaki gibidir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app" xmlns:tools="http://schemas.android.com/tools"> <uses-sdk tools:overrideLibrary="com.example.lib1, com.example.lib2"/> ...
Ardından aşağıdaki manifest ile ilgili herhangi bir hata olmadan birleştirilebilir:
<uses-sdk>
etiketini ekler ve birleştirilmiş manifest
Uygulama manifest'inden minSdk="2"
.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lib1"> <uses-sdk android:minSdk="4" /> ...
Dolaylı sistem izinleri
Eskiden uygulamalar tarafından ücretsiz olarak erişilebilen bazı Android API'leri şurada sistem izinleriyle kısıtlandı: Android'in son sürümleri.
Bu özelliklere erişmek isteyen uygulamaların bozulmaması için
API'ler gibi, Android'in son sürümleri uygulamaların bu API'lere erişmeye devam etmesini sağlamaktadır.
targetSdkVersion
daha düşük bir değere ayarlanırsa izin olmadan
bu sürüm, kısıtlamanın eklendiği sürümden daha eski olabilir. Bu davranış
Uygulamaya, API'lere erişime izin vermek için örtülü bir izin verir. Birleştirilen
farklı değerlere sahip manifestler
targetSdkVersion
etkilenebilir.
Düşük öncelikli manifest dosyasında daha düşük bir
targetSdkVersion
komutu, örtülü izin verir.
ve daha yüksek öncelikli manifest, aynı örtülü
izin (targetSdkVersion
değerine eşit veya daha yüksek olduğu için)
kısıtlamanın eklendiği sürümden farklıysa) birleştirme
sistem iznini, birleştirilmiş manifeste açıkça ekler.
Örneğin, uygulamanız targetSdkVersion
değerini 4 veya daha yüksek bir değere ayarlar ve bir
targetSdkVersion
kitaplığı 3 veya daha düşük bir değere ayarlandığında, birleştirme aracı
WRITE_EXTERNAL_STORAGE
için izin verin.
Tablo 2'de olası tüm izinler listelenmiştir. şu bilgileri de ekleyebilirsiniz:
Düşük öncelikli manifest beyanları | İzinler, birleştirilmiş manifeste eklendi |
---|---|
targetSdkVersion , 3 veya daha küçük |
WRITE_EXTERNAL_STORAGE , READ_PHONE_STATE |
targetSdkVersion , 15 veya daha düşük bir değer ve READ_CONTACTS kullanıyor |
READ_CALL_LOG |
targetSdkVersion , 15 veya daha düşük bir değer ve WRITE_CONTACTS kullanıyor |
WRITE_CALL_LOG |
Birleştirilmiş manifest'i inceleme ve çakışmaları bulma
Uygulamanızı oluşturmadan önce bile, birleştirdiğiniz uygulamalarınızın önizlemesini görebilirsiniz. nasıl görüneceğini kontrol edebilirsiniz. Önizlemeyi görmek için şunları yapın:
- Android Studio'da
AndroidManifest.xml
dosyanızı açın. - Düzenleyicinin alt kısmındaki Birleştirilmiş manifest sekmesini tıklayın.
Birleştirilmiş manifest görünümü, birleştirilmiş manifestin sonuçlarını sol tarafta gösterir ve sağda gösterildiği gibi, birleştirilmiş her manifest dosyasıyla ilgili bilgiler Şekil 2.
Düşük öncelikli manifest dosyalarından birleştirilen öğeler farklı renklerle vurgulanır. Her rengin anahtarı Manifest Kaynakları altında belirtilir.
Derlemenin parçası olan ancak öğelere katkıda bulunmayan manifest dosyaları veya özellikleri, Diğer Manifest Dosyaları altında listelenir.
Bir öğenin nereden geldiğiyle ilgili bilgileri görmek için sol tarafta öğeyi tıklayın bölmesinde yer alır. Ayrıntılar, Birleştirme Günlüğü altında görünür.
Herhangi bir çakışma oluşursa Birleştirme Hataları bölümünde görünür. kullanarak çakışmayı nasıl çözeceğinize dair bir öneriyle birleştirme kuralı işaretçileri hakkında daha fazla bilgi edinin.
Hatalar ayrıca Olay Günlüğü penceresinde de yazdırılır. Görüntülemek için Görünüm > Araç Pencereleri > Olay Günlüğü'ne gidin.
Birleştirilen karar ağacının tam günlüğünü görmek için
adlı, modülünüzün build/outputs/logs/
dizinindeki günlük dosyasını
manifest-merger-buildVariant-report.txt
.
Politikaları birleştir
Manifest birleştirme aracı, tek bir manifestteki her XML öğesini mantıksal olarak eşleştirebilir
dosyasını başka bir dosyadaki karşılık gelen öğeye bağlayabilirsiniz. Birleştirme her öğeyle eşleşir
benzersiz bir özellik değeri (ör. android:name
) veya eşleşme anahtarı kullanarak
Etiketin kendisinin doğal benzersizliği (örneğin,
<supports-screen>
öğesi).
İki manifestte aynı XML öğesi varsa araç, üç birleştirme politikasından birini kullanarak bu iki öğeyi birleştirir:
- Birleştir
- Çakışmayan tüm özellikleri aynı etikette birleştir ve birleştir alt öğeleri ilgili birleştirme politikalarına göre belirler. Herhangi bir birleştirme kuralı işaretçileriyle birleştirin.
- Yalnızca alt öğeleri birleştir
- Özellikleri birleştirmeyin veya birleştirmeyin (yalnızca sağlanan özellikleri tutun). en yüksek öncelikli manifest dosyasına göre) ve birleştirebilir, alt öğeleri birleştirme politikalarına göre değiştirir.
- Keep
- Öğeyi olduğu gibi bırakıp birleştirilmiş dosya. Bu, yalnızca birkaç tane itirazın kabul edilebilir olduğu durumlarda kullanılır tanımlamalarıdır.
Tablo 3'te her bir öğe türü, kullanılan birleştirme politikasının türü ve anahtarı:
Element | Politikayı birleştir | Eşleşme anahtarı |
---|---|---|
<action>
|
Birleştir | android:name özelliği
|
<activity>
|
Birleştir | android:name özelliği
|
<application>
|
Birleştir | Her <manifest> için yalnızca bir tane var.
|
<category>
|
Birleştir | android:name özelliği
|
<data>
|
Birleştir | Her <intent-filter> için yalnızca bir tane var.
|
<grant-uri-permission>
|
Birleştir | Her <provider> için yalnızca bir tane var.
|
<instrumentation>
|
Birleştir | android:name özelliği
|
<intent-filter>
|
Keep | Eşleşme yok; üst öğe içinde birkaç beyana izin verilir. |
<manifest>
|
Yalnızca alt öğeleri birleştir | Dosya başına yalnızca bir tane vardır. |
<meta-data>
|
Birleştir | android:name özelliği
|
<path-permission>
|
Birleştir | Her <provider> için yalnızca bir tane var.
|
<permission-group>
|
Birleştir | android:name özelliği
|
<permission>
|
Birleştir | android:name özelliği
|
<permission-tree>
|
Birleştir | android:name özelliği
|
<provider>
|
Birleştir | android:name özelliği
|
<receiver>
|
Birleştir | android:name özelliği
|
<screen>
|
Birleştir | android:screenSize özelliği
|
<service>
|
Birleştir | android:name özelliği
|
<supports-gl-texture>
|
Birleştir | android:name özelliği
|
<supports-screen>
|
Birleştir | Her <manifest> için yalnızca bir tane var.
|
<uses-configuration>
|
Birleştir | Her <manifest> için yalnızca bir tane var.
|
<uses-feature>
|
Birleştir | android:name özelliği (mevcut değilse
android:glEsVersion özelliği)
|
<uses-library>
|
Birleştir | android:name özelliği
|
<uses-permission>
|
Birleştir | android:name özelliği
|
<uses-sdk>
|
Birleştir | Her <manifest> için yalnızca bir tane var.
|
Özel öğeler | Birleştir | Eşleşme yok; bunlar birleştirme aracı tarafından bilinmez ve her zaman dahil edilir. |
Derleme değişkenlerini manifest dosyasına girme
AndroidManifest.xml
dosyanıza
build.gradle
dosyanızda tanımlı olarak varsa, bunu
manifestPlaceholders
mülkü. Bu özellik, anahtar/değer çiftlerinin bir haritasını alır.
burada gösterildiği gibi:
Eski
android { defaultConfig { manifestPlaceholders = [hostName:"www.example.com"] } ... }
Kotlin
android { defaultConfig { manifestPlaceholders["hostName"] = "www.example.com" } ... }
Daha sonra, yer tutuculardan birini manifest dosyasına bir özellik değeri:
<intent-filter ... >
<data android:scheme="https" android:host="${hostName}" ... />
...
</intent-filter>
Derleme araçları varsayılan olarak, uygulamanızın
uygulama kimliği
değerini ${applicationId}
yer tutucusuna ekleyin. Değer her zaman son
Geçerli derlemenin uygulama kimliği:
değişikliklerinin nasıl yapılacağını öğrenebilirsiniz.
Bu, tanımlayıcılar için benzersiz bir ad alanı kullanmak istediğinizde yararlı olur
(ör. amaç işlemi) ekleyebilirsiniz.
Örneğin, build.gradle
dosyanız aşağıdaki gibi görünüyorsa:
Eski
android { defaultConfig { applicationId "com.example.myapp" } flavorDimensions "type" productFlavors { free { applicationIdSuffix ".free" dimension "type" } pro { applicationIdSuffix ".pro" dimension "type" } } }
Kotlin
android { defaultConfig { applicationId = "com.example.myapp" } flavorDimensions += "type" productFlavors { create("free") { applicationIdSuffix = ".free" dimension = "type" } create("pro") { applicationIdSuffix = ".pro" dimension = "type" } } }
Ardından uygulama kimliğini manifest dosyanıza şu şekilde ekleyebilirsiniz:
<intent-filter ... >
<action android:name="${applicationId}.TRANSMOGRIFY" />
...
</intent-filter>
"Ücretsiz" ifadesini derlediğinizde ortaya çıkan manifest sonucu, ürün aroması şöyle olur:
<intent-filter ... >
<action android:name="com.example.myapp.free.TRANSMOGRIFY" />
...
</intent-filter>
Daha fazla bilgi için Uygulama kimliğini ayarlayın.