今天有一个渠道有一个特别的要求,先接入他们的母包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() } }
执行完上面代码,你需要删除的资源就可以删除了