当前位置: 首页>移动开发>正文

gradle 使用maven setting文件 gradle指定maven私库

gradle管理子模块,上传本地maven库

为什么要这样做:

  • AndroidStudio中项目引用了多个模块(module),编译的时候都会把每个模块的代码重新编译一遍,非常耗时,尤其是这些模块的代码基本不怎么改动
  • 为了减少不必要的编译时间,把模块现编译好,主工程模块(:app)直接调用编译好的模块

前提准备:

  • 在project的build.gradle(和setting.gradlle平级,最外层的build.gradle)先定义本地maven仓库的位置
buildscript {
    repositories {
        //其他配置语句
        ...

        maven {url 'file://' + "$rootDir" + '/mavenLocalDir'}
    }
}

ext {

    //其他配置语句
    ...

    MAVEN_LOCAL_PATH='file://' + "$rootDir" + '/mavenLocalDir'
}
  • 最终mavenLocalDir在如下的位置(由于文件过多,以下只显示部分重要文件及目录信息)
localhost:myAndroidProject yfjin$ tree
.
├── app
│   └── build.gradle
├── build.gradle
├── mavenLocalDir
├── module1
│   └── build.gradle
├── module2
│   └── build.gradle
└── setting.gradle

Step1 配置模块build.gradle:

  • 进入module1(或module2)的build.gradle,添加maven插件和uploadArchives函数
apply plugin: 'com.android.library'
apply plugin: 'maven'

android {
  ...
}

dependencies {
  ...
  //注意:如果module调用其他库,请使用compileOnly(provided),且在主工程implementation(api或compile)
  //模块默认打包是不会把引用库打入aar中的
  //example:   compileOnly "com.android.support:appcompat-v7:27.0.2"
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "${rootProject.ext.MAVEN_LOCAL_PATH}")
            pom.project {
                name 'module1'
                groupId 'locallib'
                artifactId 'module1'
                version '1.0.2.233'
                packaging 'aar'
            }
        }
    }

}
  • 运行uploadArchives这个task即把编译好的模块上传到了mavenLocalDir目录下。成功后mavenLocalDir会产生一堆文件。
如何运行:
  • method1.可以进入moduel1的目录,使用用命令行 ../gradlew uploadArchives
  • method2.如果不想用命令行,可以在androidstudio UI界面,展开最右侧的gradle选卡标签,找到module1下的upload中uploadArchives这个task,双击一下就会自动运行了

Step2 主工程引用编译好的模块:

  • 进入项目的build.gradle(:app模块下的build.gradle)
dependencies{

    //com.android.support:appcompat-v7的版本号建议子模块和主项目相同,你可以把版本号当做变量配置在最外层的build.gradle中,参考教程的ext下的MAVEN_LOCAL_PATH调用

    implementation "com.android.support:appcompat-v7:27.0.2"

    //如下替换moduel1
//    compile project(path: ':module1')

    implementation 'locallib:module1:1.0.2.233@aar'
}

注意事项:

  • 每次修改模块代码,记得更新一下模块版本,并重新上传(运行一下uploadArchives这个task)
  • 当然,如果不想改版本,你可以把mavenLocalDir下的相关模块文件删干净,然后再上传。
  • 如果子模块有调用其他模块,记得在主工程引用。运用compileOnly(provided),和implementation(api或compile)



https://www.xamrdz.com/mobile/47c1963759.html

相关文章: