Android library 导出jar包

1.gradle task

Groovy 复制代码
// ===== 导出 Fat JAR =====
tasks.register('exportFatJar', Jar) {
    archiveFileName = "oplib.jar"
    file("release/oplib.jar").delete()
    destinationDirectory = file("release/")

    // 1. 打包自己写的 class
    from('build/intermediates/javac/release/classes/')

    // 2. 打包依赖 jar
    /*from {
        configurations.releaseRuntimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }*/
    // 2. 指定要打包的依赖 JAR
    from {
        files(
                'libs/converter-gson-2.5.0.jar',
                //'libs/glide-3.8.0.jar',
                'libs/picasso-2.5.2.jar',
//                'libs/room-runtime-2.0.0.jar',
//                'libs/room-common-2.0.0.jar',
//                'libs/collection-1.0.0.jar',
                'libs/gson-2.8.2.jar',
                'libs/okhttp-3.12.0.jar',
                'libs/okio-1.15.0.jar',
                'libs/retrofit-2.5.0.jar'
        ).collect { zipTree(it) }
    }

    // 3. 包含资源
    from('src/main/resources/')

    // 4. 排除不必要文件
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA'
    exclude '**/R.class', '**/R$*.class', '**/BuildConfig.class'
    exclude 'module-info.class'
    exclude '**/*.kotlin_metadata'
    exclude '**/*.kotlin_module'
    exclude 'META-INF/**'
}

2.自动执行

Groovy 复制代码
android{ 
   // --- 关键:配置自动执行 ---
// 当你在 Android Studio 点击 Build 或执行 assembleRelease 时,会自动触发
    tasks.whenTaskAdded { task ->
        // 挂载到 bundleReleaseAar(打包 AAR 的核心任务)
        if (task.name == 'bundleReleaseAar') {
            task.finalizedBy exportFatJar
        }
        // 或者挂载到总编译任务
        if (task.name == 'assembleRelease') {
            task.finalizedBy exportFatJar
        }
    }
}