解决Kotlin aar看不到源码且不能debug的问题

实际业务场景:

基础库以aar的形式发布到公司Maven仓库,供业务开发同事依赖调用,这样的好处很多可以方便代码权限管理、团队协作开发、代码复用等,但是如果你的基础库使用的是Kotlin编写的,在发布后业务方调用时候会看不到源码,也不能debug调试,给联调工作带来了一些问题

解决方案

  1. 通过引入子模块的方式,配置一个开关,调试代码时引入子模块中,而发布时依赖aar
  2. 通过maven库的方式,不管是本地还是远程maven,在发布aar时上传源码(推荐使用)

方案一:引入子模块

  1. 在local.properties中增加一个变量作为控制开关
isAAR=false // 默认依赖源码,值为false
  1. 在settings.gradel中include源码module
include 'basicSource'
project(':basicSource').projectDir = new File(settingsDir, '../MoonKit/basicSource')
  1. 在引入该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上传源码(推荐)

推荐采用这种方式,优点如下:

  1. 发布完后不用管事了,
  2. 业务同学权限也仅仅是debug级别,
  3. 代码安全得以保障。
  4. 改动很小

只需要我们修改下发布配置即可具体实现:

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库自然不是问题,以上只是个人实际开发中的一点经验,希望可以帮到遇到相同问题的同学。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值