实际业务场景:
基础库以aar的形式发布到公司Maven仓库,供业务开发同事依赖调用,这样的好处很多可以方便代码权限管理、团队协作开发、代码复用等,但是如果你的基础库使用的是Kotlin编写的,在发布后业务方调用时候会看不到源码,也不能debug调试,给联调工作带来了一些问题
解决方案
- 通过引入子模块的方式,配置一个开关,调试代码时引入子模块中,而发布时依赖aar
- 通过maven库的方式,不管是本地还是远程maven,在发布aar时上传源码(推荐使用)
方案一:引入子模块
- 在local.properties中增加一个变量作为控制开关
isAAR=false // 默认依赖源码,值为false
- 在settings.gradel中include源码module
include 'basicSource'
project(':basicSource').projectDir = new File(settingsDir, '../MoonKit/basicSource')
- 在引入该aar的module通过开关切换
// 编译和发布的配置
if (project.rootProject.file('local.properties').exists()) {
def properties = new Properties()
def inputStream = project.rootProject.file('local.properties').newDataInputStream()
properties.load(inputStream)
inputStream.close()
if (properties.containsKey("isAAR")) {
boolean isAARRun = properties.getProperty("isAAR").toBoolean()
if (isAARRun) {
// 依赖aar
implementation("com.moon.library:module-common:${MoonKit}")
} else {
// 依赖源码
println("----- ${project.name} with project ----")
implementation project(':basicSource')
}
} else {
println("----- ${project.name} with project ----")
implementation project(':basicSource')
}
}
这样通过自定义的开关可以动态切换源码和AAR依赖了,但是
你确定可以拿到源码的权限吗?
给你权限了如果是多工程,版本控制也很麻烦?
这种手动控制是不是还有上线前忘记修改的问题?
方案二:Maven上传源码(推荐)
推荐采用这种方式,优点如下:
- 发布完后不用管事了,
- 业务同学权限也仅仅是debug级别,
- 代码安全得以保障。
- 改动很小
只需要我们修改下发布配置即可具体实现:
apply plugin: 'maven'
repositories {
mavenLocal()
mavenCentral()
}
uploadArchives {
repositories {
mavenDeployer {
def deployTypeUrl
if (project.ext.pomVersion.toLowerCase().contains('snapshot')) {
deployTypeUrl = snapshotUrl
} else {
deployTypeUrl = releaseUrl
}
pom.groupId = "com.moon.library"
pom.artifactId = project.ext.pomArtifactId
pom.version = LocalKit
pom.packaging = "aar"
repository(url: deployTypeUrl) {
authentication(userName: mavenName, password: mavenPassword)
}
}
}
//上传源码task
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
artifacts {
// 将 sourcesJar 看做 artifact,交给 archives 管理
archives sourcesJar
}
doLast {
println "Deployed success => ${project.ext.pomArtifactId}:${project.ext.pomVersion}"
}
}
就是这么简单增加了task,问题解决。
总结
有了源码debug依赖的aar库自然不是问题,以上只是个人实际开发中的一点经验,希望可以帮到遇到相同问题的同学。