就在前几天,Android studio 更新到了
4.2
(瞄的 我也不知道到底几点几,2020.3.1),伴随着正式的JDK 11环境以及 Gradle 7.0,迎来了一系列的 gradle 编译问题,当然,这里主要讨论 maven 发布相关的变更与适配。
这里直接抛出主要问题:以前的 maven plugin 已经被废弃,带来的是 maven-publish plugin 。从代码层面讲就是:
apply plugin: 'maven'
变成了:
apply plugin: 'maven-publish'
同时,相关脚本也进行了变更,直接贴上最新的脚本代码:
afterEvaluate { publishing { publications { release(MavenPublication) { from components.release groupId = MAVEN_GROUP_ID artifactId = MAVEN_ARTIFACTID version = MAVEN_VERSION repositories { maven { allowInsecureProtocol true name = "nexus" url = MAVEN_RELEASE_URL credentials { username = MAVEN_USERNAME password = MAVEN_PASSWORD }
这里大写的属性均为 gradle.properties 中定义的与 maven 发布相关的变量,通过命名应该很容易知道。
主要说两点:
-
对于非 https 的仓库地址,需要使用
allowInsecureProtocol
字段,包括引用该仓库的地方 - 对于需要上传的 maven 仓库,需要显式指定 name,因为在编译后,会生成相关任务,比如这样:
另外,对于 release(MavenPublication) 节点中
from components.
release
字段,是有含义的~ 官网描述如下:
换成中文说就是:一个 module 的不同变种。
而对于 Android 来说,一般情况下有两种 lib,一种是 比如 gradle 插件的 Jar lib,另一种为 资源库类型的 AAR lib,这里分开说明。
- Jar lib
纯 jar 包,也就是 gradle 配置为:
apply
plugin
:
'java-library'
类型的 module,直接按照官方的例子进行配置:
from components.java
- AAR lib
对于 Android 特有的lib,即 gradle 配置为:
apply
plugin
:
'com.android.library'
类型的 module,则需要根据 module 中的buildTypes 进行配置,比如:
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' debug { minifyEnabled false