android app构建时排除指定类

背景:因为某些需求,需要将android appA打包为aar供其他工程使用,但是有些class有冲突,只能将appA中的类排除。

具体做法:

在build.gradle中排除指定的类,

bash 复制代码
// build.gradle顶部引入import java.text.SimpleDateFormat

// 创建一个时间格式化器
def dateFormat = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss')

afterEvaluate {
    // 找到负责打包 AAR 的任务
    tasks.matching { it.name == 'compileReleaseJavaWithJavac' }.configureEach { bundleAarTask ->
        def arrFile = 'build/outputs/aar/sdk_module_a-release.aar'
        if (!file(arrFile).exists()) {
            println "${dateFormat.format(new Date())} - 12file of sdk_module_a does not exist."
        } else {
            println "${dateFormat.format(new Date())} - 12file of sdk_module_a does exist."
        }

        // 在打包 AAR 前执行删除类文件的任务
        println "${dateFormat.format(new Date())} - 18compileReleaseJavaWithJavac delete class."

        // 打印日志,表明即将开始打包 AAR
        bundleAarTask.doFirst {
            println "${dateFormat.format(new Date())} - 18Starting to compileReleaseJavaWithJavac..."
        }

        bundleAarTask.doLast {
            println "${dateFormat.format(new Date())} - 18last to compileReleaseJavaWithJavac..."
            def baseDir = 'build/intermediates/javac/release/classes/com/x/y/navi'
            def classesToDelete = [
                    "$baseDir/NaviCsv.class",
                    "$baseDir/NaviCsv\$1.class",
                    "$baseDir/NaviCsv\$Zxc.class"
            ]

            classesToDelete.each { classFile ->
                if (file(classFile).exists()) {
                    println "${dateFormat.format(new Date())} - 18-02 ${classFile} exist"
                } else {
                    println "${dateFormat.format(new Date())} - 18-02 ${classFile} file not exist"
                }
            }

            // 删除操作
            delete classesToDelete

            classesToDelete.each { classFile ->
                if (file(classFile).exists()) {
                    println "${dateFormat.format(new Date())} - 18-03Failed to delete ${classFile}"
                } else {
                    println "${dateFormat.format(new Date())} - 18-03delete ${classFile} file ok"
                }
            }
        }
    }
}

执行对应的构建命令

bash 复制代码
./gradlew :sdk_module_a:assembleRelease
相关推荐
WHOAMI_老猫1 小时前
XSS-LABS靶场通关讲解
前端·xss
要加油哦~1 小时前
前端 | 向后端传数据,判断问题所在的调试过程
前端·javascript·vue.js
中工钱袋3 小时前
Vue 中地址栏参数与 HTTP 请求参数的同步问题
前端·vue.js·http
zzlyx993 小时前
设备管理系统功能与.NET+VUE(IVIEW)技术实现
前端·vue.js·view design
秋月华星5 小时前
【flutter】TextField输入框工具栏文本为英文解决(不用安装插件版本
前端·javascript·flutter
千里码aicood6 小时前
[含文档+PPT+源码等]精品基于Python实现的校园小助手小程序的设计与实现
开发语言·前端·python
青红光硫化黑6 小时前
React基础之React.memo
前端·javascript·react.js
大麦大麦6 小时前
深入剖析 Sass:从基础到进阶的 CSS 预处理器应用指南
开发语言·前端·css·面试·rust·uni-app·sass
m0_616188498 小时前
Vue3 中 Computed 用法
前端·javascript·vue.js
六个点8 小时前
图片懒加载与预加载的实现
前端·javascript·面试