Android Gradle 本地化部署 maven

作者: 牧秦丶 | 来源:发表于2017-11-03 09:50 被阅读113次

    1、Gradle 脚本

            在 Android Studio 中,我们经常引用 aar 文件及 maven 库中的资源。一般来说,我们通过 compile 'package:library_name:version' 的方式来引用 maven 库中的包。而通过 compile(name: 'xxx', ext: 'aar') 的方法引用本地生成或其他项目生成的 aar 包(详细请见)。

    2、Gradle 引用方式

            上面说的本地直接引用 aar 文件的方式有一些问题,比如:

    • 资源文件预览等等会有一些 Bug;
    • 新生成 aar 后,在多个项目之间共享时,频繁的拷贝同步会很麻烦。

            所以我们尝试在本地部署我们的项目,然后在其他项目中直接可以引用了。首先,我们知道,在 Build 脚本运行 compile package:library_name:version 时,会去下面一些目录寻找:

            如果你额外在 build.gradle 中自定义配置了本地目录的话,还会去这个目录下面查找,比如在 build.gradle 中配置了:

             额外查找目录

        那么查询的目录会多加四个:

    • file:/PROJECT_PATH/commonlibs/library_name.jar
    • file:/PROJECT_PATH/commonlibs/library_name-version.jar
    • file:/PROJECT_PATH/MODULE_NAME/libs/library_name.jar
    • file:/PROJECT_PATH/MODULE_NAME/libs/library_name-version.jar

    当在这些目录都找不到依赖后,会运行出错,组建失败。

    找不到库出错

    3、本地部署 aar

            在知道了 Gradle 的引用查找原则之后,我们就可以将自己的项目按需部署到本地了。我们一般配置在 ANDROID_HOME/extras/android/m2repository 这个目录中,这样,其他所有工程都可以很方便的访问到,同步更新也只更新一个地方即可。

            首先,我们在系统环境变量中设置 ANDROID_HOME——指向 Android SDK 的安装目录,确保本地部署时能找到相应的目录。

            然后,为所需部署的 Module 编写 build.gradle 脚本如下:

             部署 Gradle 脚本编写

            我们可以看出,有如下步骤:

    • apply plugin: 'maven':引用 maven 插件进行部署;
    • 增加 uploadArchives Task,用于部署 Module;
    • mavenDeployer 中编写相应的配置,包括部署路径、version、groupId、artifactId 等等;

            我们可以看到,我们将部署目标路径设为:file://localhost/ANDROID_HOME/extras/android/m2repository/,这样部署后,相应的 aar、pos、jar 等等文件都会在这个目录中找到。

    4、执行部署

            执行部署非常简单,我们可以在命令行执行 gradle uploadArchives 这个任务。或者另一种办法是在 Gradle Projects 窗口找到这个 Module 对应的部署 Task,双击执行这个 Task 即可:

             部署 Task

            在执行完成后,我们在相应的目标目录可以找到部署的文件:

             部署结果

            部署完成后,我们在其他工程中,直接 compile 'package:library_name:version'就可以引用了。Gradle 会自动查找到这个依赖以及相应的库文件,引入到工程中进行组建。

    5、多 Module 部署

            在比较大的项目中,我们经常会在一个 Project 中拥有多个 Module,而这些 Module 中又有相互引用的情况。比如:

             多 Module 示例

            比如这个例子中,project 下有两个 Module,而 ModuleB 又在项目内引用了 ModuleA,这时候,在部署 ModuleB 的时候,为 ModuleB 生成的 pom 文件会有问题:

            [站外图片上传中...(image-49af3f-1509673794164)]

            我们可以看出,ModuleB 的 pom 中声明引用了 ModuleA,但是 Module A 对应的 groupIdversion 都不对,这样,在第三方引用 ModuleB 的时候,会出现依赖错误。这个时候,解决办法是在 ModuleA 的 build.gradle 中加入 project.groupproject.version ,这样在生成 ModuleB 的 pom 的时候,会自动填入这两个值。

            ModuleA 的 build.gradle 如下:

             project.group 和 project.version

            如果填写了 project.groupproject.version 后,就没必要在 mavenDeployer 中填写 pom.groupIdpom.version 了,Gradle 会自动使用 project.groupproject.version 填入。这样,为 ModuleA 和 ModuleB 部署,都不会出现问题了。

    6、参考

    相关文章

      网友评论

        本文标题:Android Gradle 本地化部署 maven

        本文链接:https://www.haomeiwen.com/subject/wggzpxtx.html