当前位置:   article > 正文

解决Kotlin aar看不到源码且不能debug的问题_kotlin编译后看不到源码

kotlin编译后看不到源码

实际业务场景:

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

解决方案

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

方案一:引入子模块

  1. 在local.properties中增加一个变量作为控制开关
isAAR=false // 默认依赖源码,值为false
  • 1
  1. 在settings.gradel中include源码module
include 'basicSource'
project(':basicSource').projectDir = new File(settingsDir, '../MoonKit/basicSource')
  • 1
  • 2
  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')
        }
    }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这样通过自定义的开关可以动态切换源码和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}"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

就是这么简单增加了task,问题解决。

总结

有了源码debug依赖的aar库自然不是问题,以上只是个人实际开发中的一点经验,希望可以帮到遇到相同问题的同学。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/845495
推荐阅读
  

闽ICP备14008679号