Gradle进程清单与新的Manifest Merger

时间:2014-11-20 14:23:31

标签: android gradle manifest

我一直在使用这段代码来删除我不想要的Manifest文件的权限,但是使用新的Merger这是不可能的,我不知道用gradle来修改它。

applicationVariants.all { variant ->
        variant.processManifest.doLast {
            println("configuring AndroidManifest.xml removing READ_CALL_LOG");

            def manifestFile = new File("${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml")
            def content = manifestFile.getText()
            def updatedContent = content.replaceAll("<android:uses-permission android:name=\"android.permission.READ_CALL_LOG\" />", "")
            manifestFile.write(updatedContent)
        }
        variant.processResources.manifestFile = new File("${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml")

}

我尝试过类似的东西,但它不起作用

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
                def manifestOutFile = output.processManifest.manifestOutputFile
                def newFileContents = manifestOutFile.getText('UTF-8').replace("<android:uses-permission android:name=\"android.permission.READ_CALL_LOG\" />", "")
                manifestOutFile.write(newFileContents, 'UTF-8')
            }
       }

我如何通过新的合并实现相同的目标?

Thansk提前。

2 个答案:

答案 0 :(得分:8)

applicationVariants.all { variant ->
    variant.outputs.each { output ->
           output.processManifest.doLast{
            def manifestOutFile = output.processManifest.manifestOutputFile
            def newFileContents = manifestOutFile.getText('UTF-8').replace("<android:uses-permission android:name=\"android.permission.READ_CALL_LOG\" />", "")
            manifestOutFile.write(newFileContents, 'UTF-8')
        }
   }
}

这可以帮助您轻松。

答案 1 :(得分:0)

要回答我自己的问题,我最终通过将gradle文件中的TargeSdkVersion设置为高于15的版本来解决问题,这就是Android添加“读取呼叫记录”权限的原因。这样就无需处理清单并手动将其删除。