1 背景是项目接入了
implementation 'io.github.jeremyliao:live-event-bus-x:1.8.0'
且项目是在complieSdk 34的条件下
直接报以下错误:
点开LiveEventBus相关源码看
这里没有适配广播注册在安卓13以上。由于liveeventbus已经没维护了,也不再更新了,所以我们自己把源码下载下来集成到项目中,自己去适配。
2 去github把源代码下载下来,把它放在项目中专门放第三方库源码的文件夹下
找到源码报错的地方,适配一下。
下一步将我们的第三库源码打包给我们主app模块使用就行,这就需要用到publish命令和插件
重点来看下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")
}
}
}
执行命令
就会在我们项目指定的目录repo生成aar。
这样我们可以在项目中依赖它了
这样以后我们通过这种方式适配安卓14,15,16等都可以了。