From bf3397096165f9b30269b756a9db8c27134bb347 Mon Sep 17 00:00:00 2001 From: shifujun Date: Thu, 28 Oct 2021 12:05:58 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E6=B7=BB=E5=8A=A0AarToJarPlugin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 消除大量重复定义的jarPackage构建脚本。 --- build.gradle | 1 + .../source/sample-host-lib/build.gradle | 25 +------- .../sdk/coding/aar-to-jar-plugin/.gitignore | 1 + .../sdk/coding/aar-to-jar-plugin/build.gradle | 22 +++++++ .../aar_to_jar_plugin/AarToJarPlugin.kt | 62 +++++++++++++++++++ projects/sdk/coding/settings.gradle | 3 +- .../sdk/core/activity-container/build.gradle | 24 +------ projects/sdk/core/build.gradle | 1 + projects/sdk/core/common/build.gradle | 24 +------ projects/sdk/core/loader/build.gradle | 24 +------ projects/sdk/core/runtime/build.gradle | 24 +------ projects/sdk/dynamic/build.gradle | 1 + projects/sdk/dynamic/dynamic-apk/build.gradle | 24 +------ .../build.gradle | 24 +------ .../sdk/dynamic/dynamic-host/build.gradle | 24 +------ .../dynamic/dynamic-loader-impl/build.gradle | 24 +------ .../sdk/dynamic/dynamic-loader/build.gradle | 24 +------ 17 files changed, 100 insertions(+), 232 deletions(-) create mode 100644 projects/sdk/coding/aar-to-jar-plugin/.gitignore create mode 100644 projects/sdk/coding/aar-to-jar-plugin/build.gradle create mode 100644 projects/sdk/coding/aar-to-jar-plugin/src/main/kotlin/com/tencent/shadow/coding/aar_to_jar_plugin/AarToJarPlugin.kt diff --git a/build.gradle b/build.gradle index 1188f497c..7a4b0e2f6 100644 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,7 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:$build_gradle_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.tencent.shadow.coding:aar-to-jar-plugin' } } apply from: 'buildScripts/gradle/common.gradle' diff --git a/projects/sample/source/sample-host-lib/build.gradle b/projects/sample/source/sample-host-lib/build.gradle index b96174de0..95a468c48 100644 --- a/projects/sample/source/sample-host-lib/build.gradle +++ b/projects/sample/source/sample-host-lib/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' android { compileSdkVersion project.COMPILE_SDK_VERSION @@ -23,27 +24,3 @@ android { } } - -//下面的jarPackage和afterEvaluate负责让这个aar再生成一个输出jar包的任务 -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} \ No newline at end of file diff --git a/projects/sdk/coding/aar-to-jar-plugin/.gitignore b/projects/sdk/coding/aar-to-jar-plugin/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/projects/sdk/coding/aar-to-jar-plugin/.gitignore @@ -0,0 +1 @@ +/build diff --git a/projects/sdk/coding/aar-to-jar-plugin/build.gradle b/projects/sdk/coding/aar-to-jar-plugin/build.gradle new file mode 100644 index 000000000..9a48b8de9 --- /dev/null +++ b/projects/sdk/coding/aar-to-jar-plugin/build.gradle @@ -0,0 +1,22 @@ +apply plugin: 'java-gradle-plugin' + +apply plugin: 'kotlin' + +group 'com.tencent.shadow.coding' + +gradlePlugin { + plugins { + shadow { + id = "com.tencent.shadow.internal.aar-to-jar" + implementationClass = "com.tencent.shadow.coding.aar_to_jar_plugin.AarToJarPlugin" + } + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "com.android.tools.build:gradle:$build_gradle_version" + testImplementation 'junit:junit:4.12' + testImplementation gradleTestKit() + +} diff --git a/projects/sdk/coding/aar-to-jar-plugin/src/main/kotlin/com/tencent/shadow/coding/aar_to_jar_plugin/AarToJarPlugin.kt b/projects/sdk/coding/aar-to-jar-plugin/src/main/kotlin/com/tencent/shadow/coding/aar_to_jar_plugin/AarToJarPlugin.kt new file mode 100644 index 000000000..3748ee7ec --- /dev/null +++ b/projects/sdk/coding/aar-to-jar-plugin/src/main/kotlin/com/tencent/shadow/coding/aar_to_jar_plugin/AarToJarPlugin.kt @@ -0,0 +1,62 @@ +/* + * Tencent is pleased to support the open source community by making Tencent Shadow available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.tencent.shadow.coding.aar_to_jar_plugin + +import com.android.build.gradle.BaseExtension +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.tasks.Copy +import java.util.* + +class AarToJarPlugin : Plugin { + + override fun apply(project: Project) { + project.afterEvaluate { + val android = it.extensions.getByName("android") as BaseExtension + android.buildTypes.forEach { buildType -> + createJarPackageTask(project, buildType.name) + } + } + } + + private fun createJarPackageTask(project: Project, buildType: String): Task { + val taskName = "jar${buildType.capitalize(Locale.getDefault())}Package" + return project.tasks.create(taskName, Copy::class.java) { + fun buildDirFile(relativePath: String) = + project.file(project.buildDir.path + relativePath) + + val aarFileName = "${project.name}-${buildType}" + val aarFile = buildDirFile("/outputs/aar/${aarFileName}.aar") + val outputDir = buildDirFile("/outputs/jar") + + it.from(project.zipTree(aarFile)) + it.into(outputDir) + it.include("classes.jar") + it.rename("classes.jar", "${aarFileName}.jar") + it.group = "build" + it.description = "生成jar包" + }.dependsOn( + project.getTasksByName( + "assemble${buildType.capitalize(Locale.getDefault())}", + false + ).first() + ) + } +} \ No newline at end of file diff --git a/projects/sdk/coding/settings.gradle b/projects/sdk/coding/settings.gradle index 96b31da4d..d29b452e1 100644 --- a/projects/sdk/coding/settings.gradle +++ b/projects/sdk/coding/settings.gradle @@ -1,2 +1,3 @@ include 'checks', 'lint' -include 'code-generator' \ No newline at end of file +include 'code-generator' +include 'aar-to-jar-plugin' \ No newline at end of file diff --git a/projects/sdk/core/activity-container/build.gradle b/projects/sdk/core/activity-container/build.gradle index 81ecbd281..5d9b3da7a 100644 --- a/projects/sdk/core/activity-container/build.gradle +++ b/projects/sdk/core/activity-container/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' group 'com.tencent.shadow.core' @@ -33,27 +34,4 @@ dependencies{ implementation 'com.tencent.shadow.coding:lint' } -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} - preBuild.dependsOn(project(":generate-delegate-code").getTasksByName("generateDelegateCode", false).first()) diff --git a/projects/sdk/core/build.gradle b/projects/sdk/core/build.gradle index a32d9e114..48f65da2b 100644 --- a/projects/sdk/core/build.gradle +++ b/projects/sdk/core/build.gradle @@ -16,6 +16,7 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:$build_gradle_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.tencent.shadow.coding:aar-to-jar-plugin' } } apply from: '../../../buildScripts/gradle/common.gradle' diff --git a/projects/sdk/core/common/build.gradle b/projects/sdk/core/common/build.gradle index ff44c5125..d8f10d344 100644 --- a/projects/sdk/core/common/build.gradle +++ b/projects/sdk/core/common/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' group 'com.tencent.shadow.core' @@ -27,26 +28,3 @@ android { dependencies{ implementation 'com.tencent.shadow.coding:lint' } - -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} diff --git a/projects/sdk/core/loader/build.gradle b/projects/sdk/core/loader/build.gradle index 1afdb43cb..eabc4cd49 100644 --- a/projects/sdk/core/loader/build.gradle +++ b/projects/sdk/core/loader/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' apply plugin: 'kotlin-android' @@ -64,27 +65,4 @@ dependencies { implementation 'com.tencent.shadow.coding:lint' } -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} - preBuild.dependsOn(project(":generate-delegate-code").getTasksByName("generateDelegateCode", false).first()) diff --git a/projects/sdk/core/runtime/build.gradle b/projects/sdk/core/runtime/build.gradle index 6291850b8..dab24947c 100644 --- a/projects/sdk/core/runtime/build.gradle +++ b/projects/sdk/core/runtime/build.gradle @@ -9,6 +9,7 @@ */ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' group 'com.tencent.shadow.core' @@ -43,27 +44,4 @@ dependencies{ compileOnly project(':activity-container') } -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} - preBuild.dependsOn(project(":generate-delegate-code").getTasksByName("generateDelegateCode", false).first()) diff --git a/projects/sdk/dynamic/build.gradle b/projects/sdk/dynamic/build.gradle index a32d9e114..48f65da2b 100644 --- a/projects/sdk/dynamic/build.gradle +++ b/projects/sdk/dynamic/build.gradle @@ -16,6 +16,7 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:$build_gradle_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.tencent.shadow.coding:aar-to-jar-plugin' } } apply from: '../../../buildScripts/gradle/common.gradle' diff --git a/projects/sdk/dynamic/dynamic-apk/build.gradle b/projects/sdk/dynamic/dynamic-apk/build.gradle index 1bc4c0fc5..63889b07d 100644 --- a/projects/sdk/dynamic/dynamic-apk/build.gradle +++ b/projects/sdk/dynamic/dynamic-apk/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' group 'com.tencent.shadow.dynamic' @@ -36,26 +37,3 @@ dependencies { implementation 'com.tencent.shadow.core:utils' compileOnly 'com.tencent.shadow.core:common' } - -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} \ No newline at end of file diff --git a/projects/sdk/dynamic/dynamic-host-multi-loader-ext/build.gradle b/projects/sdk/dynamic/dynamic-host-multi-loader-ext/build.gradle index 7009d595c..ce70095a7 100644 --- a/projects/sdk/dynamic/dynamic-host-multi-loader-ext/build.gradle +++ b/projects/sdk/dynamic/dynamic-host-multi-loader-ext/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' group 'com.tencent.shadow.dynamic' @@ -39,26 +40,3 @@ dependencies { compileOnly 'com.tencent.shadow.core:common' api project(':dynamic-host') } - -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} \ No newline at end of file diff --git a/projects/sdk/dynamic/dynamic-host/build.gradle b/projects/sdk/dynamic/dynamic-host/build.gradle index 140f56894..afd6d5347 100644 --- a/projects/sdk/dynamic/dynamic-host/build.gradle +++ b/projects/sdk/dynamic/dynamic-host/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' group 'com.tencent.shadow.dynamic' @@ -37,26 +38,3 @@ dependencies { compileOnly 'com.tencent.shadow.core:common' api project(':dynamic-apk') } - -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} \ No newline at end of file diff --git a/projects/sdk/dynamic/dynamic-loader-impl/build.gradle b/projects/sdk/dynamic/dynamic-loader-impl/build.gradle index 6e5a0271e..80e802728 100644 --- a/projects/sdk/dynamic/dynamic-loader-impl/build.gradle +++ b/projects/sdk/dynamic/dynamic-loader-impl/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' apply plugin: 'kotlin-android' @@ -61,26 +62,3 @@ dependencies { compileOnly project(':dynamic-host') compileOnly project(':dynamic-loader') } - -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -} diff --git a/projects/sdk/dynamic/dynamic-loader/build.gradle b/projects/sdk/dynamic/dynamic-loader/build.gradle index d661c1129..8ba4e81bb 100644 --- a/projects/sdk/dynamic/dynamic-loader/build.gradle +++ b/projects/sdk/dynamic/dynamic-loader/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.tencent.shadow.internal.aar-to-jar' group 'com.tencent.shadow.dynamic' @@ -23,26 +24,3 @@ android { targetCompatibility JavaVersion.VERSION_1_7 } } - -def jarPackage(buildType) { - return tasks.create("jar${buildType.capitalize()}Package", Copy) { - def aarFile = file(project.buildDir.path + "/outputs/aar/${project.name}-${buildType}.aar") - def outputDir = file(project.buildDir.path + "/outputs/jar") - - from zipTree(aarFile) - into outputDir - include 'classes.jar' - rename 'classes.jar', "${project.name}-${buildType}.jar" - group = 'build' - description = '生成jar包' - }.dependsOn(project.getTasksByName("assemble${buildType.capitalize()}", false).first()) -} - -afterEvaluate { - android { - buildTypes.findAll().each { buildType -> - def buildTypeName = buildType.getName() - jarPackage(buildTypeName) - } - } -}