2012-12-18 63 views
15

我正在使用新的gradle android buildsystem。在Android Gradle Build中禁用Manifest Merger

該項目由兩個android庫項目和一個主項目組成。

使用ant build時,必須在project.properties中啓用清單合併。但是,在使用gradle構建系統時,默認情況下啓用清單合併。我如何禁用清單合併?

+0

我很想知道爲什麼要禁用它?我們不打算啓用它(目前),但我們希望支持所有用例。 –

+0

@Xav:我們用ant建立了我們的項目,並沒有在我們的庫項目中關注AndroidManifest.xml。因此,由於明顯的合併錯誤,我們在遷移到Gradle時遇到了一些問題。 – endian

+1

@Xav:我也希望我可以禁用合併。清單合併似乎將主要清單優先考慮。我有價值觀,即我的風格中的「圖標」需要重寫主要,但合併是扔掉這些值。 –

回答

10

編輯:其實這是可能的,雖然間接地與0.3

開始,你需要做的是禁用processManifest任務是什麼,以便它不運行,並告訴processResources在清單以使用爲:

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

請注意,如果您要通過DSL自定義應用程序包名稱,則應該在默認位置保持默認清單不變,以便爲R類提供一致的包名稱,然後將手動合併的清單放在其他地方並將每個變體processResources任務指向它們。 。

+3

當我嘗試這樣做時,我收到了「[email protected]」找不到屬性'buildVariants'。 – Dylan

+3

+1這不再適用於0.5+插件,並且文檔無助於理解如何排除某些庫的清單。 –

+2

請參閱下面的0.5。+/0.6。+ – urish

2

爲0.5 +插件,你必須改變從eachall這樣的:

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

爲0.6 +插件,你也必須改變從buildVariantsapplicationVariants

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

更新的答案在哪些文件中需要此更改? –

+1

通過將其粘貼到應用程序的'build.gradle'中,我得到錯誤:錯誤:(92,0)無法在com.and[email protected]68ff5866上找到屬性'processResources'。 Open File

2

看起來這些解決方案並不適用於1.0插件:

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

任何人有更新?我們的問題是表示從recyclerview-V7最終的apk了流浪活動:21.0.3:

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

更新:看起來可以配置清單合併(見http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger)。

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

感謝Filip:在這種特定的情況下,從recyclerview-V7庫傳來的測試活動可以被刪除。

+0

問題與我的應用程序是生成的apk具有Read_Contacts權限,但我沒有在清單中聲明它。不知道如何解決這個問題。 –

+0

@ShajeelAfzal檢查'build/outputs/logs/manifest-merger-debug-report.txt'以查看'build/intermediates/manifests/full/debug/AndroidManifest.xml'中的每一位來自哪裏。 (可能無法使用,或者使用舊版本的不同文件;我使用的是2.0.0。) – TWiStErRob

8

這可能有所幫助。

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

它適用於2.10插件。 清單文件路徑應該是'src/main/AndroidManifest.xml' –

相關問題