2012-12-18 14 views
15

Korzystam z nowej wersji systemu Android.Wyłączenie Manifest Merger w systemie Android Gradle Build

Projekt składa się z dwóch projektów biblioteki Android i jednego głównego projektu.

Użycie kompilacji ant musi zostać włączone w pliku project.properties. Ale w przypadku korzystania z systemu gradle build domyślne połączenie jest domyślnie włączone. Jak mogę wyłączyć oczywistą fuzję?

+0

Chciałbym wiedzieć, dlaczego chcesz go wyłączyć? Nie planujemy go włączyć (w tej chwili), ale chcemy wspierać wszystkie przypadki użycia. –

+0

@Xav: Zbudowaliśmy nasz projekt do tej pory z mrówką i nie dbaliśmy o AndroidManifest.xml w naszych projektach bibliotecznych. Mieliśmy małe problemy z migracją do gradle z powodu oczywistych błędów fuzji. – endian

+1

@Xav: Pragnę też, abym mógł wyłączyć scalanie. Faktyczne połączenie wydaje się nadawać priorytet manifestowi w głównym. Mam wartości, tj. "Ikonę" w moim smaku, która musi przesłonić główną, ale fuzja wyrzuca te wartości. –

Odpowiedz

10

Edycja: jest to rzeczywiście możliwe, choć pośrednio, wychodząc z 0,3

Co trzeba zrobić, to wyłączyć zadanie processManifest tak, że nie działa i powiedzieć processResources gdzie manifest do wykorzystania jest:

android.applicationVariants.all { variant -> 
    variant.processResources.manifestFile = file('src/main/AndroidManifest.xml') 
    variant.processManifest.enabled=false 
} 

Należy pamiętać, że jeśli dostosowujesz nazwę pakietu aplikacji za pomocą DSL, powinieneś zachować domyślny manifest nietknięty w domyślnej lokalizacji, aby zapewnić spójną nazwę pakietu dla klas R, a następnie mieć ręcznie połączone manifesty w innym miejscu. i wskaż każdemu z nich odmienne zadanie processResources. .

+3

Otrzymuję komunikat "Nie można znaleźć właściwości" buildVariants "na [email protected]", gdy próbuję tego. – Dylan

+3

+1 to już nie obowiązuje dla wtyczki 0.5+, a dokumentacja nie pomaga zrozumieć, jak wykluczyć manifest z niektórych bibliotek. –

+2

Poniżej znajdują się zaktualizowane odpowiedzi dla 0.5. +/0.6. + – urish

2

Do 0,5 + plugin trzeba zmienić od each do all tak:

android.buildVariants.all { variant -> 
    variant.processResources.manifestFile = file('src/main/AndroidManifest.xml') 
    variant.processManifest.enabled=false 
} 
5

Do 0,6 + plugin trzeba także zmienić buildVariants do applicationVariants.

android.applicationVariants.all { variant -> 
    variant.processResources.manifestFile = file('src/main/AndroidManifest.xml') 
    variant.processManifest.enabled=false 
} 
+0

W jakim pliku ta zmiana jest wymagana? –

+1

wklejając go w 'build.gradle' aplikacji otrzymuję komunikat o błędzie: Błąd: (92, 0) Nie można znaleźć właściwości 'processResources' na com.and[email protected]68ff5866. Open File

2

Nie wygląda na to, że te rozwiązania działają dla wtyczki 1.0:

Could not find property 'processResources' on com.and[email protected]774f1d0b.

Ktoś ma aktualizację? Naszym problemem jest bezpański aktywność pokazuje się w końcowej apk z recyclerview-v7: 21.0.3:

<activity 
    android:label="RecyclerViewTestActivity" 
    android:name="android.support.v7.widget.TestActivity"/> 

Aktualizacja: To wygląda jak manifest łączenie może być skonfigurowany (patrz http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger). W tym konkretnym przypadku, działanie testowe pochodzące z biblioteki recyclerview-v7 może zostać usunięty z:

<activity 
    android:name="android.support.v7.widget.TestActivity" 
    android:label="RecyclerViewTestActivity" 
    tools:node="remove"/> 

Dzięki Filip.

+0

Problem z moją aplikacją polega na tym, że wygenerowany apk ma uprawnienie Read_Contacts, ale nie deklaruję go w manifeście. Nie wiesz, jak rozwiązać ten problem. –

+0

@ShajeelAfzal sprawdź 'build/outputs/logs/manifest-merger-debug-report.txt', aby zobaczyć, skąd pochodzi każdy bit z' build/intermediates/manifestests/full/debug/AndroidManifest.xml'. (Może nie być dostępny lub może być w różnych plikach w starszych wersjach, używam wersji 2.0.0.) – TWiStErRob

8

To może pomóc.

android.applicationVariants.all{ variant -> 
     variant.outputs.each { output -> 
     output.processResources.manifestFile = file('AndroidManifest.xml') 
     output.processManifest.enabled=false 
     } 
    } 
+0

Działa z wtyczką 2.10. Ścieżka do pliku manifestu powinna mieć postać 'src/main/AndroidManifest.xml' –

Powiązane problemy