我正在使用新的gradle android buildsystem。在Android Gradle Build中禁用Manifest Merger
該項目由兩個android庫項目和一個主項目組成。
使用ant build時,必須在project.properties中啓用清單合併。但是,在使用gradle構建系統時,默認情況下啓用清單合併。我如何禁用清單合併?
我正在使用新的gradle android buildsystem。在Android Gradle Build中禁用Manifest Merger
該項目由兩個android庫項目和一個主項目組成。
使用ant build時,必須在project.properties中啓用清單合併。但是,在使用gradle構建系統時,默認情況下啓用清單合併。我如何禁用清單合併?
編輯:其實這是可能的,雖然間接地與0.3
開始,你需要做的是禁用processManifest任務是什麼,以便它不運行,並告訴processResources在清單以使用爲:
android.applicationVariants.all { variant ->
variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
variant.processManifest.enabled=false
}
請注意,如果您要通過DSL自定義應用程序包名稱,則應該在默認位置保持默認清單不變,以便爲R類提供一致的包名稱,然後將手動合併的清單放在其他地方並將每個變體processResources任務指向它們。 。
爲0.5 +插件,你必須改變從each
到all
這樣的:
android.buildVariants.all { variant ->
variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
variant.processManifest.enabled=false
}
爲0.6 +插件,你也必須改變從buildVariants
到applicationVariants
:
android.applicationVariants.all { variant ->
variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
variant.processManifest.enabled=false
}
更新的答案在哪些文件中需要此更改? –
通過將其粘貼到應用程序的'build.gradle'中,我得到錯誤:錯誤:(92,0)無法在com.and[email protected]68ff5866上找到屬性'processResources'。 Open File –
看起來這些解決方案並不適用於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庫傳來的測試活動可以被刪除。
問題與我的應用程序是生成的apk具有Read_Contacts權限,但我沒有在清單中聲明它。不知道如何解決這個問題。 –
@ShajeelAfzal檢查'build/outputs/logs/manifest-merger-debug-report.txt'以查看'build/intermediates/manifests/full/debug/AndroidManifest.xml'中的每一位來自哪裏。 (可能無法使用,或者使用舊版本的不同文件;我使用的是2.0.0。) – TWiStErRob
這可能有所幫助。
android.applicationVariants.all{ variant ->
variant.outputs.each { output ->
output.processResources.manifestFile = file('AndroidManifest.xml')
output.processManifest.enabled=false
}
}
它適用於2.10插件。 清單文件路徑應該是'src/main/AndroidManifest.xml' –
我很想知道爲什麼要禁用它?我們不打算啓用它(目前),但我們希望支持所有用例。 –
@Xav:我們用ant建立了我們的項目,並沒有在我們的庫項目中關注AndroidManifest.xml。因此,由於明顯的合併錯誤,我們在遷移到Gradle時遇到了一些問題。 – endian
@Xav:我也希望我可以禁用合併。清單合併似乎將主要清單優先考慮。我有價值觀,即我的風格中的「圖標」需要重寫主要,但合併是扔掉這些值。 –