Android Gradle 本地化部署 maven

Posted 牧秦丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Gradle 本地化部署 maven相关的知识,希望对你有一定的参考价值。

Android Gradle 本地化部署 maven


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 脚本如下:

        

        我们可以看出,有如下步骤:
- 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 即可:

        

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

        

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

5、多 Module 部署

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

        

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

        

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

        ModuleA 的 build.gradle 如下:

        

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

6、参考

以上是关于Android Gradle 本地化部署 maven的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 本地化部署 maven

如何通过Gradle将所有依赖项复制到Maven存储库?

如何使用 Gradle 1.12 版发布(部署)本地(.war .jar)文件到 Artifactory?

android studio怎样配置gradle本地路径

如何使用Gradle中的不同资源文件夹为每个flavor创建两个应用程序?

Android Gradle 插件TestOptions 配置 ② ( TestOptions#animationsDisabled 属性配置 | Android 工程本地化测试与设备化测试 )