今天有一個渠道有一個特別的要求,先接入他們的母包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() } }
執行完上面代碼,你需要刪除的資源就可以刪除了