就在前几天,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 } }
那么就有两种选择:
from components.release 或 from components.debug
即会上传不同版本的 aar 文件,这里还可以添加 Android 的风味,即:productFlavors,不进行赘述,详见官方文档:
https://developer.android.com/studio/build/build-variants?hl=zh-cn
关于一些报错:
- Plugin with id ‘your_plugin’ not found.
这种一般为上传到 maven 的库没有内容,大概率是 component 配置错误。
- Don’t know how to compute maven coordinate for artifact ‘Gradle API’ with component identifier of type ‘class org.gradle.internal.component.local.model.OpaqueComponentIdentifier’.
对于一些 java 的库,不要直接将 apply plugin: 'java-library'
改为 apply plugin: 'com.android.library'
。不然,你就会遇到这种错误。解决办法:没研究。
- Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository ‘maven(http://maven.aliyun.com/nexus/content/groups/public/)’ to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.0.2/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details.
就是需要在非 https 的 maven 仓库中指定 allowInsecureProtocol
比如:
maven { allowInsecureProtocol true url MAVEN_RELEASE_URL }
大概就这些内容吧,遇到问题先看官方文档:
参考: 好像参考就是上面的文档,其他都没能真正解决我的一些问题,大多写的很复杂,而我的需求其实很简单。
其他文章推荐:Android AGP 7.0 适配,开始强制 JDK 11
本站由以下主机服务商提供服务支持:
0条评论