如何从Gradle 7设置AAR输出的名称

niwlg2el  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(196)

这是一个在SO上讨论得很热烈的问题,但我在搜索了几个小时后还是找不到最新的解决方案。可惜我不能在任何地方添加评论。
我使用gradle-android-git-version插件在build.gradle中设置versionName和versionCode。现在我想将构建输出文件的名称从my-sdk-release.aar更改为my-sdk-release-versionName.aar或类似名称。
但是,由于未找到属性,因此提出的任何解决方案都不起作用。关于这个问题的文档似乎也已经过时了,OutputFile早就被弃用了。
使用newest one可以找到:

afterEvaluate {
    android.libraryVariants.all { variant ->
        variant.variantData.outputFactory.apkDataList.each { apkData ->
            if (apkData.outputFileName.endsWith('.aar')) {
                apkData.outputFileName = "${project.name}-${buildType.name}-anything-you-want.aar"
            }
        }
    }
}

在Gradle 7.3.3上显示错误No such property: outputFactory for class: com.android.build.gradle.internal.variant.LibraryVariantData
我的build.gradle如下:

plugins {
    id 'com.android.library'
    id 'org.jetbrains.kotlin.android'
    id 'com.gladed.androidgitversion' version '0.4.14'
}

android {
    compileSdk 33

    defaultConfig {
        minSdk 24
        targetSdk 33
        versionName androidGitVersion.name()
        versionCode androidGitVersion.code()

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    kotlinOptions {
        freeCompilerArgs += [
                '-opt-in=kotlin.RequiresOptIn',
                '-Xexplicit-api=strict'
        ]
    }

    afterEvaluate {
        android.libraryVariants.all { variant ->
            variant.variantData.outputFactory.apkDataList.each { apkData ->
                if (apkData.outputFileName.endsWith('.aar')) {
                    apkData.outputFileName = "${project.name}-${buildType.name}-anything-you-want.aar"
                }
            }
        }
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.9.0'
    implementation 'no.nordicsemi.android:ble-ktx:2.5.1'
    implementation 'no.nordicsemi.android.support.v18:scanner:1.5.1'
    implementation 'commons-codec:commons-codec:1.13'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.2'
    testImplementation 'junit:junit:4.13.2'
}

我做错了什么?

3hvapo4f

3hvapo4f1#

apkDataList,顾名思义,很可能使用building apk。

android {
    compileSdk 33

    defaultConfig {
        minSdk 24
        targetSdk 33
        versionName androidGitVersion.name()
        versionCode androidGitVersion.code()

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    /* your options... */

    android.libraryVariants.all { variant ->
        variant.outputs.all { file ->
            if (file.outputFileName.endsWith('.aar')) {
                file.outputFileName = "${project.name}-${variant.buildType.name}-${android.defaultConfig.versionName}.aar"
            }
        }
    }
}

相关问题