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()
    }
}

執行完上面代碼,你需要刪除的資源就可以刪除了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章