将android library发布到本地供调用

194 阅读1分钟

1 背景是项目接入了

implementation 'io.github.jeremyliao:live-event-bus-x:1.8.0'

且项目是在complieSdk 34的条件下 image.png

直接报以下错误:

image.png

点开LiveEventBus相关源码看

image.png 这里没有适配广播注册在安卓13以上。由于liveeventbus已经没维护了,也不再更新了,所以我们自己把源码下载下来集成到项目中,自己去适配。

2 去github把源代码下载下来,把它放在项目中专门放第三方库源码的文件夹下

image.png

找到源码报错的地方,适配一下。

image.png

下一步将我们的第三库源码打包给我们主app模块使用就行,这就需要用到publish命令和插件

image.png

重点来看下publish.gradle

//应用maven-publish插件,用于将项目发布到Maven仓库
apply plugin: 'maven-publish'

//创建一个名为 androidSourcesJar的任务,用于将项目的Java/Kotlin源码打包成JAR文件
project.tasks.create(name: "androidSourcesJar", type: Jar) {
    //这里当执行publish后jar包里还没源码时候,先依赖和处理项目编译的问题
    //表示生成的JAR文件会带有-source后缀,如liveevent_local-1.0.0-sources.jar
    //通常用于在Maven仓库中提供源码包
    archiveClassifier.set('sources')
    from project.android.sourceSets.main.java.srcDirs
}
//禁用动态依赖的缓存
configurations.all {
    // Check for updates every build
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
//发布配置(核心部分)
publishing {
    def projectName = project.name
    publications {
        "$projectName"(MavenPublication) {
            artifact androidSourcesJar //包含源码的JAR包
            //groupId,artifactId,version是Maven坐标,用于唯一标识构件
            groupId = "com.example.liveEventBus"
            artifactId = "liveevent_local"
            version = "1.0.0"
            //在项目配置完成后,将release版AAR文件作为主构件
            //确保在项目配置完成后获取bundleReleaseAar任务生成的AAR文件
            afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
            //生成POM依赖信息
            pom.withXml {
                //遍历依赖并生成标准的Maven<dependency>节点。
                def dependenciesNode = asNode().appendNode('dependencies')
                //处理api配置的依赖(公开依赖)
                configurations.api.allDependencies.each {
                    if (it.group != null && (it.name != null || "unspecified" == it.name) && it.version != null) {

                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                    }
                }
                //处理implementation配置的依赖(私有依赖)
                configurations.implementation.allDependencies.each {
                    if (it.group != null && (it.name != null || "unspecified" == it.name) && it.version != null) {

                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                    }
                }
            }
            //手动将项目的api和implementation依赖写入POM文件。
        }
    }
    //将构件发布到本地目录repo,路径通常是项目根目录下的repo文件夹。
    repositories {
        maven {
            url uri("${rootProject.projectDir}/repo")
        }
    }
}

执行命令

image.png

就会在我们项目指定的目录repo生成aar。

image.png

这样我们可以在项目中依赖它了

image.png

image.png

这样以后我们通过这种方式适配安卓14,15,16等都可以了。