解决打包时去掉多余权限功能

在app项目的build.gradle里面(与android同级)

//替换权限
//project.afterEvaluate {
// android.applicationVariants.all { variant ->
// variant.outputs.each { output ->
// output.processResources.doFirst { pm ->
// String manifestPath = output.processResources.manifestFile;
// def manifestContent = file(manifestPath).getText()
// manifestContent = manifestContent.replace('android.permission.READ_SMS','android.permission.INTERNET' )
// manifestContent = manifestContent.replace('android.permission.SEND_SMS','android.permission.INTERNET' )
// file(manifestPath).write(manifestContent)
// }
// }
// }
//}

/**

  • 修改 Android 12 因为 exported 的构建问题
    */

android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def processManifest = output.getProcessManifestProvider().get()
processManifest.doLast { task ->
def outputDir = task.multiApkManifestOutputDirectory
File outputDirectory
if (outputDir instanceof File) {
outputDirectory = outputDir
} else {
outputDirectory = outputDir.get().asFile
}
File manifestOutFile = file("{manifestOutFile} ----------- ")

        if (manifestOutFile.exists() && manifestOutFile.canRead() && manifestOutFile.canWrite()) {
            def manifestFile = manifestOutFile
            ///这里第二个参数是 false ,所以 namespace 是展开的,所以下面不能用 androidSpace,而是用 nameTag
            def xml = new XmlParser(false, false).parse(manifestFile)
            def exportedTag = "android:exported"
            def nameTag = "android:name"
            ///指定 space
            //def androidSpace = new groovy.xml.Namespace('http://schemas.android.com/apk/res/android', 'android')

            def nodes = xml.application[0].'*'.findAll {
                //挑选要修改的节点,没有指定的 exported 的才需要增加
                //如果 exportedTag 拿不到可以尝试 it.attribute(androidSpace.exported)
                (it.name() == 'activity' || it.name() == 'receiver' || it.name() == 'service') && it.attribute(exportedTag) == null

            }
            ///添加 exported,默认 false
            nodes.each {
                def isMain = false
                it.each {
                    if (it.name() == "intent-filter") {
                        it.each {
                            if (it.name() == "action") {
                                //如果 nameTag 拿不到可以尝试 it.attribute(androidSpace.name)
                                if (it.attributes().get(nameTag) == "android.intent.action.MAIN") {
                                    isMain = true
                                    println("......................MAIN FOUND......................")
                                }
                            }
                        }
                    }
                }
                it.attributes().put(exportedTag, "${isMain}")
            }

            PrintWriter pw = new PrintWriter(manifestFile)
            pw.write(groovy.xml.XmlUtil.serialize(xml))
            pw.close()

        }

    }
}

}

你可能感兴趣的:(解决打包时去掉多余权限功能)