如何简单地将最终构建 AAR 复制到目标目录并重命名?

spa*_*ygw 1 gradle

我是一个 gradle 白痴,但即使在阅读了 90 分钟的 gradle 文档和堆栈之后,我仍然无法让它工作。

我有一个构建调试或发布 AAR 文件的 gradle 文件,我只需要将最终构建复制到目标目录。

这是我的 build.gradle

gradle.startParameter.showStacktrace = org.gradle.api.logging.configuration.ShowStacktrace.ALWAYS

buildscript {
    repositories {
        maven { url "https://maven.google.com" }
        maven { url "https://jitpack.io" }
        jcenter()
        google()
    }   

    dependencies {
        classpath "com.android.tools.build:gradle:4.1.0"
        classpath 'com.google.gms:google-services:4.3.4'
    }   
}   

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
        google()
        jcenter()
    }   
    tasks.withType(JavaCompile) {
        //options.compilerArgs << "-Xlint:deprecation"
    }   
}   


apply plugin: 'com.android.library'


android {
    compileSdkVersion 29


    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "foo"
        }   
    }   

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

    setProperty("archivesBaseName", "foo");

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

            ndk {
                //abiFilters 'armeabi-v7a', 'arm64-v8a'
                abiFilters 'arm64-v8a'
            }
        }

        debug {
            jniDebuggable true


            ndk {
                //abiFilters 'armeabi-v7a', 'arm64-v8a'
                abiFilters 'arm64-v8a'
            }
        }
    }

    externalNativeBuild {
        ndkBuild {
            path 'jni/Android.mk'
        }
    }
}

dependencies {
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
}


// make the pre[Release|Debug]Build tasks depend on zipGui task
tasks.whenTaskAdded { Task theTask ->
    //
    // Do something for each task as its added. For example:
    // print theTask.name
    //
}
afterEvaluate
{
    //
    // Do something after all the tasks have been added
    //

    // Get the start parameter. We use this to decide if its a debug/release build
    String taskReqStr = gradle.getStartParameter().getTaskRequests().toString();

    if(taskReqStr.contains("assembleDebug"))
    {
        // do debug things here
        println ""
        println ""
        println "BUILDING FOR **DEBUG**"
        println ""

        tasks.preDebugBuild.dependsOn doPackCert
        tasks.doLast copyAAR
    }
    else
    {
        // do release things here
        println ""
        println ""
        println "> Build :BUILDING FOR **RELEASE**"
        println ""

        tasks.preReleaseBuild.dependsOn doPackCert
    }
}

task doPackCert(type: Copy) {

    from("$projectDir/../../../../install")
    into("$projectDir/res/raw/")
    include 'ca.pem'

    doFirst {
        println "==================== copying CA cert into assets"
    }

}

task copyAAR {
    copy {
        from 'build/outputs/aar'
        into '../../../lib/'
        include '*.aar'
        //rename { String fileName ->
          //  fileName.replace("foo-debug.aar", "foo.aar")
        //}
        //rename { String fileName ->
          //  fileName.replace("foo-release.aar", "foo.aar")
        //}
    }

}


build.finalizedBy(copyAAR)
Run Code Online (Sandbox Code Playgroud)

Lak*_*ndu 5

构建.gradle

apply plugin: 'com.android.library'

android {
    defaultConfig { ... }
    buildTypes { release { ... } debug { ... } }
    externalNativeBuild { ... }
}

dependencies { ... }

task copyAARDebug(type: Copy) {
    // build/outputs/aar
    from    ( [buildDir.absolutePath, 'outputs', 'aar'].join(File.separator) )

    // mylibrary-debug.aar
    include ( "${project.name}-debug.aar" )

    // <root_project_dir>/destination_dir/debug
    into    ( [rootDir.absolutePath, 'destination_dir', 'debug'].join(File.separator) )

    // <root_project_dir>/destination_dir/debug/renamed.aar
    rename  ("${project.name}-debug.aar", 'renamed.aar')
}

task copyAARRelease(type: Copy) {
    // build/outputs/aar
    from    ( [buildDir.absolutePath, 'outputs', 'aar'].join(File.separator) )

    // mylibrary-release.aar
    include ( "${project.name}-release.aar" )

    // <root_project_dir>/destination_dir/release
    into    ( [rootDir.absolutePath, 'destination_dir', 'release'].join(File.separator) )

    // <root_project_dir>/destination_dir/renamed/renamed.aar
    rename  ("${project.name}-release.aar", 'renamed.aar')
}

afterEvaluate {
    assembleDebug.finalizedBy('copyAARDebug')
    assembleRelease.finalizedBy('copyAARRelease')
}
Run Code Online (Sandbox Code Playgroud)

复制的文件