Android 利用Gradle脚本删除jar包,资源和AndroidManifest.xml文件中的配置

今天有一个渠道有一个特别的要求,先接入他们的母包SDK,母包SDK调通登录以后,把母包的一些jar包,assets下的资源和文件,还有在AndroidManifest.xml中配置的activity,service,meta-data等全部删除.

于是就使用Gradle脚本命令在打包的时候执行删除命令,具体代码如下:

然后就是在build.gradle中最下面开始写命令执行删除任务:

1.首先定义一个变量,也就是一个开关,方便我们平时测试,然后就是一些删除代码

//应渠道要求删除assets文件下渠道的资源,多余jar包,AndroidManifest中application节点下的全部配置文件
project.afterEvaluate {
    //执行删除命令的开关
    def isParentApk = false
    if (isParentApk) {
        //遍历删除assets/sdk 文件夹和子文件
        deleteFile(project.file("src/main/assets/sdk"))
        //删除assets文件夹下渠道要求删除的母包资源
        deleteExists(project.file("src/main/assets/poolsdk.xml"))
        deleteExists(project.file("src/main/assets/sdk.zip"))
        deleteExists(project.file("src/main/assets/sdkconf.ini"))

        //删除libs下渠道要求删除的母包资源
        deleteExists(project.file("libs/alipaySdk-20161222.jar"))
        deleteExists(project.file("libs/applog-release.jar"))
        deleteExists(project.file("libs/GDTActionSDK.min.1.3.0.jar"))
        deleteExists(project.file("libs/HuoshuSDK.jar"))
        deleteExists(project.file("libs/libammsdk.jar"))
        deleteExists(project.file("libs/PlayMad-Conversion-Tracking-SDK.jar"))
        deleteExists(project.file("libs/support-v4.jar"))
        deleteExists(project.file("libs/trackingIOsdk.jar"))
        //删除AndroidManifest.xml 文件中的所有Activity,service等配置
        def xmlFile = project.file("src/main/AndroidManifest.xml")
        def manifest = new XmlParser().parse(xmlFile)
        def nodes = manifest.application[0].'*'.findAll {
            //选择要删除的节点
            (it.name() == 'meta-data' || it.name() == 'activity' || it.name() == 'service' || it.name() == 'receiver' || it.name() == 'uses-library')
        }
        for (int i = 0; i < nodes.size(); i++) {
            Node parentNode = nodes[i]
            manifest.children().each {
                it.remove(parentNode)
            }
        }
        def writer = new PrintWriter(xmlFile, "UTF8")
        writer.write('<?xml version="1.0" encoding="UTF-8"?>\n')
        new XmlNodePrinter(writer).print(manifest)
    }
}

def deleteExists(File file) {
    if (file != null && file.exists())
        file.delete()
}

def deleteFile(File file) {
    if (file.isDirectory()) {
        File[] files = file.listFiles()
        for (int i = 0; i < files.length; i++) {
            deleteFile(files[i])
        }
        file.delete()
    } else if (file.exists()) {
        file.delete()
    }
}

执行完上面代码,你需要删除的资源就可以删除了

猜你喜欢

转载自blog.csdn.net/zhao8856234/article/details/100083531#comments_28217232
今日推荐