Pon*_*rai 6 android gradle android-gradle-plugin android-gradle-3.0
之前我曾经使用过android gradle插件v2.2.2,现在我正在迁移到3.0。下面的代码将我所有的变体发布(uploadArchives任务)到maven,而2.14.1没有任何问题。但是,一旦我升级到3.0,什么都没有发布。如果删除prodcutFlavors,它将发布该库的发行版本以正确进行Maven处理。我想念什么吗?3.0中有变化吗?
我已经阅读到默认情况下,现在将发布所有变体,并且不再需要publishNonDefault。删除publishNonDefault后,它也不起作用。
我正在使用带有插件3.0的Gradle 4.1和带有插件2.2.2的Gradle 2.14.1
apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 26
defaultConfig {
minSdkVersion 17
targetSdkVersion 26
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
publishNonDefault true
flavorDimensions "app"
productFlavors{
apple{
}
orange{
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
pom.version = "1.3.7"
pom.artifactId = "android"
pom.groupId = "com.example"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正面临类似的问题。尽管我不使用productFlavors,但我希望mavenDeployer发布三种配置(对应于我的三种构建类型“ debug”,“ release”和“ staging”)。但是,它不再这样做了,它仅向Maven发布AAR以用于“发行”配置。
在Android Plugin for Gradle 3.0.1之前,以下mavenDeployer代码确实发布了所有三个AAR文件:
uploadArchives {
repositories.mavenDeployer {
repository(url:"file://" + "${project.buildDir}/maven/releases")
pom.groupId = "com.example"
pom.artifactId = "sdk"
pom.version = sdkName
}
}
Run Code Online (Sandbox Code Playgroud)
上面的Gradle代码用于生成发布到Maven的以下3个文件:
sdk/build/maven/releases/com/locuslabs/sdk/develop/sdk-develop-debug.aar
sdk/build/maven/releases/com/locuslabs/sdk/develop/sdk-develop-staging.aar
sdk/build/maven/releases/com/locuslabs/sdk/develop/sdk-develop-release.aar
Run Code Online (Sandbox Code Playgroud)
但是,升级到Gradle 3.0.1的Android插件后,它只会产生:
sdk/build/maven/releases/com/locuslabs/sdk/develop/sdk-develop.aar
Run Code Online (Sandbox Code Playgroud)
请注意,-release即使我很确定它是发行版,文件名甚至都没有后缀。
到目前为止,最接近解决方案的是有关将AAR文件发布到Maven的新方法的文档:android-maven-publish。
背景调查:
从Android库:maven vs maven-publish gradle项目中,我了解到有两种Gradle机制可以发布到Gradle。另外,还有一些非官方的Android实现。
Maven插件:每个项目有多个工件
我认为您正在使用的是旧版本,因为您已经指定了Maven插件,apply plugin: 'maven'在此进行了说明。要获得多个AAR文件输出,大概“您需要为要发布的每个工件声明一个过滤器”。但是缺点是“您需要生成多个POM”(每个项目有多个工件)。
Maven Publishing(新):发布多个模块
Maven插件的明显替代品是Maven Publishing(新版),它似乎具有发布多个工件的能力,如发布多个模块中所述。基本上,您似乎只需要在代码publications块中进行多个方法调用(很抱歉,如果我使用了错误的Gradle / Groovy语法,这是我永远都不会创建的令人困惑的语言)。
publishing {
publications {
impl(MavenPublication) { // for first variant?
groupId 'org.gradle.sample.impl'
artifactId 'project2-impl'
version '2.3'
from components.java
}
api(MavenPublication) { // for second variant?
groupId 'org.gradle.sample'
artifactId 'project2-api'
version '2'
artifact apiJar
}
}
}
task apiJar(type: Jar) {
baseName "publishing-api"
from sourceSets.main.output
exclude '**/impl/**'
}
Run Code Online (Sandbox Code Playgroud)
如果还不够复杂,请参阅Android Libraries:maven vs maven-publish gradle project,“上述两个官方插件并不完全支持Android,因此有两个社区端口。”
Gradle Android Maven插件(非官方)
Gradle Android Maven插件中的文档没有解释我们如何输出多个AAR。
android-maven-publish(非官方)
如上所述,android-maven-publish上的文档看上去最有前途,因为它提供了“发布自定义变体”的示例,这意味着它将解决您发布所有风味变体的问题。这是android-maven-publish中的示例:
publishing {
publications {
android.libraryVariants.all { variant ->
"maven${variant.name.capitalize()}Aar"(MavenPublication) {
from components.findByName("android${variant.name.capitalize()}")
groupId 'digital.wup.test-publish'
artifactId 'test-publish'
version "1.0.0-${variant.name}"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2484 次 |
| 最近记录: |