From e95f5f6e8282c0af1e1e658fdd75f99ccb06e8b3 Mon Sep 17 00:00:00 2001 From: muyonggang Date: Thu, 13 Jul 2023 15:17:58 +0800 Subject: [PATCH] java:11 --- PluginDemo/app/build.gradle | 10 +- PluginDemo/app/src/main/AndroidManifest.xml | 6 +- PluginDemo/build.gradle | 8 +- PluginDemo/debug.sh | 1 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- PluginDemo/settings.gradle | 4 + app/build.gradle | 4 +- build.gradle | 7 +- gradle/wrapper/gradle-wrapper.properties | 2 +- virtualapk-gradle-plugin/build.gradle | 6 +- virtualapk-gradle-plugin/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- virtualapk-gradle-plugin/settings.gradle | 1 + .../com.didi.virtualapk/BasePlugin.groovy | 46 ++- .../com.didi.virtualapk/VAHostPlugin.groovy | 67 ++-- .../com.didi.virtualapk/VAPlugin.groovy | 28 +- .../hooker/GradleTaskHooker.groovy | 9 +- .../hooker/MergeAssetsHooker.groovy | 3 +- .../hooker/MergeManifestsHooker.groovy | 319 +++++++++--------- .../hooker/PrepareDependenciesHooker.groovy | 4 +- .../hooker/ProcessResourcesHooker.groovy | 2 +- .../hooker/ProguardHooker.groovy | 4 +- .../hooker/ShrinkResourcesHooker.groovy | 4 +- .../tasks/AssemblePlugin.groovy | 2 +- .../utils/TaskContainerAdaptor.java | 60 ++++ .../utils/VariantConfiguration.java | 43 +++ virtualapk-gradle-plugin/upload.gradle | 71 +--- 27 files changed, 412 insertions(+), 305 deletions(-) create mode 100644 PluginDemo/debug.sh create mode 100644 virtualapk-gradle-plugin/settings.gradle create mode 100644 virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/TaskContainerAdaptor.java create mode 100644 virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/VariantConfiguration.java diff --git a/PluginDemo/app/build.gradle b/PluginDemo/app/build.gradle index 2d9915b..5c90aba 100644 --- a/PluginDemo/app/build.gradle +++ b/PluginDemo/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 + compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.didi.virtualapk.demo" minSdkVersion 15 - targetSdkVersion 15 + targetSdkVersion 25 versionName "1.0.0" versionCode 1 } @@ -45,12 +45,16 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + lintOptions { + abortOnError false + } } dependencies { // the following aars are also compiled in host project, so they will be filterd when build plugin apk. // but, wo can still visit their Class and Resources. - compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.android.support:appcompat-v7:25.4.0' compile 'com.didi.virtualapk:core:0.9.6' } diff --git a/PluginDemo/app/src/main/AndroidManifest.xml b/PluginDemo/app/src/main/AndroidManifest.xml index d305651..57538d8 100644 --- a/PluginDemo/app/src/main/AndroidManifest.xml +++ b/PluginDemo/app/src/main/AndroidManifest.xml @@ -4,9 +4,9 @@ android:versionCode="1" android:versionName="1.0" > - + + + { this.project = project AppPlugin appPlugin = project.plugins.findPlugin(AppPlugin) - Reflect reflect = Reflect.on(appPlugin.variantManager) - VariantFactory variantFactory = Proxy.newProxyInstance(this.class.classLoader, [VariantFactory.class] as Class[], new InvocationHandler() { Object delegate = reflect.get('variantFactory') @@ -69,20 +77,26 @@ public abstract class BasePlugin implements Plugin { project.extensions.create('virtualApk', VAExtention) - taskFactory = new TaskContainerAdaptor(project.tasks) + taskFactory = new TaskFactoryImpl(project.tasks) project.afterEvaluate { if (!checkVariantFactoryInvoked) { throw new RuntimeException('Evaluating VirtualApk\'s configurations has failed!') } - android.applicationVariants.each { ApplicationVariantImpl variant -> + android.applicationVariants.all { variant -> +// if('debug' == variant.buildType.name) { +// com.android.build.gradle.internal.variant.ApplicationVariantData variantData = variant.variantData +//// def scope = variantData.scope +// } if ('release' == variant.buildType.name) { - String variantAssembleTaskName = variant.variantData.scope.getTaskName('assemble', 'Plugin') + com.android.build.gradle.internal.variant.ApplicationVariantData variantData = variant.variantData + String variantAssembleTaskName = variant.getTaskName('assemble', 'Plugin') def final variantPluginTaskName = createPluginTaskName(variantAssembleTaskName) final def configAction = new AssemblePlugin.ConfigAction(project, variant) - taskFactory.create(variantPluginTaskName, AssemblePlugin, configAction) +// taskFactory.create(variantPluginTaskName, AssemblePlugin, configAction) + taskFactory.register(variantPluginTaskName, AssemblePlugin, configAction) taskFactory.named("assemblePlugin", new Action() { @Override @@ -90,6 +104,7 @@ public abstract class BasePlugin implements Plugin { task.dependsOn(variantPluginTaskName) } }) + } } } @@ -109,18 +124,19 @@ public abstract class BasePlugin implements Plugin { def targetTasks = startParameter.taskNames def pluginTasks = ['assemblePlugin'] as List - - appPlugin.variantManager.buildTypes.each { + appPlugin.variantInputModel.buildTypes.each{ +// appPlugin.variantManager.buildTypes.each { def buildType = it.value.buildType if ('release' != buildType.name) { return } - if (appPlugin.variantManager.productFlavors.isEmpty()) { + if (appPlugin.variantInputModel.productFlavors.isEmpty()) { return } - appPlugin.variantManager.productFlavors.each { - String variantName = VariantConfiguration.computeFullName(it.key, buildType, VariantType.DEFAULT, null) + appPlugin.variantInputModel.productFlavors.each { +// String variantName = VariantConfiguration.computeFullName(it.key, buildType, VariantType.DEFAULT, null) + String variantName = "myg"+buildType.name +"-"+it.key def variantPluginTaskName = createPluginTaskName("assemble${variantName.capitalize()}Plugin".toString()) pluginTasks.add(variantPluginTaskName) } diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAHostPlugin.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAHostPlugin.groovy index e67c53c..0f34261 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAHostPlugin.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAHostPlugin.groovy @@ -2,10 +2,10 @@ package com.didi.virtualapk import com.android.build.gradle.api.ApplicationVariant import com.android.build.gradle.internal.api.ApplicationVariantImpl -import com.android.build.gradle.internal.ide.ArtifactDependencyGraph +//import com.android.build.gradle.internal.ide.ArtifactDependencyGraph import com.android.build.gradle.internal.pipeline.TransformTask import com.android.build.gradle.internal.publishing.AndroidArtifacts -import com.android.build.gradle.internal.transforms.ProGuardTransform +//import com.android.build.gradle.internal.transforms.ProGuardTransform import com.android.build.gradle.tasks.ProcessAndroidResources import com.didi.virtualapk.utils.FileUtil import com.didi.virtualapk.utils.Log @@ -85,24 +85,24 @@ public class VAHostPlugin implements Plugin { FileUtil.saveFile(vaHostDir, "versions", { List deps = new ArrayList() - Log.i TAG, "Used compileClasspath: ${applicationVariant.name}" - Set compileArtifacts = ArtifactDependencyGraph.getAllArtifacts( - applicationVariant.variantData.scope, AndroidArtifacts.ConsumedConfigType.COMPILE_CLASSPATH, null) - - compileArtifacts.each { ArtifactDependencyGraph.HashableResolvedArtifactResult artifact -> - ComponentIdentifier id = artifact.id.componentIdentifier - if (id instanceof ProjectComponentIdentifier) { - deps.add("${id.projectPath.replace(':', '')}:${ArtifactDependencyGraph.getVariant(artifact)}:unspecified ${artifact.file.length()}") - - } else if (id instanceof ModuleComponentIdentifier) { - deps.add("${id.group}:${id.module}:${id.version} ${artifact.file.length()}") - - } else { - deps.add("${artifact.id.displayName.replace(':', '')}:unspecified:unspecified ${artifact.file.length()}") - } - } - - Collections.sort(deps) +// Log.i TAG, "Used compileClasspath: ${applicationVariant.name}" +// Set compileArtifacts = ArtifactDependencyGraph.getAllArtifacts( +// applicationVariant.variantData.scope, AndroidArtifacts.ConsumedConfigType.COMPILE_CLASSPATH, null) +// +// compileArtifacts.each { ArtifactDependencyGraph.HashableResolvedArtifactResult artifact -> +// ComponentIdentifier id = artifact.id.componentIdentifier +// if (id instanceof ProjectComponentIdentifier) { +// deps.add("${id.projectPath.replace(':', '')}:${ArtifactDependencyGraph.getVariant(artifact)}:unspecified ${artifact.file.length()}") +// +// } else if (id instanceof ModuleComponentIdentifier) { +// deps.add("${id.group}:${id.module}:${id.version} ${artifact.file.length()}") +// +// } else { +// deps.add("${artifact.id.displayName.replace(':', '')}:unspecified:unspecified ${artifact.file.length()}") +// } +// } + +// Collections.sort(deps) return deps }) } @@ -130,19 +130,20 @@ public class VAHostPlugin implements Plugin { */ def backupProguardMapping(ApplicationVariant applicationVariant) { - if (applicationVariant.buildType.minifyEnabled) { - TransformTask proguardTask = project.tasks["transformClassesAndResourcesWithProguardFor${applicationVariant.name.capitalize()}"] - - ProGuardTransform proguardTransform = proguardTask.transform - File mappingFile = proguardTransform.mappingFile - - proguardTask.doLast { - project.copy { - from mappingFile - into vaHostDir - } - } - } + // gradle升级后这个task找不到 +// if (applicationVariant.buildType.minifyEnabled) { +// TransformTask proguardTask = project.tasks["transformClassesAndResourcesWithProguardFor${applicationVariant.name.capitalize()}"] +// +// ProGuardTransform proguardTransform = proguardTask.transform +// File mappingFile = proguardTransform.mappingFile +// +// proguardTask.doLast { +// project.copy { +// from mappingFile +// into vaHostDir +// } +// } +// } } diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy index 7075013..814ec6d 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy @@ -230,20 +230,20 @@ class VAPlugin extends BasePlugin { @Override void registerTaskHookers() { - android.applicationVariants.all { ApplicationVariantImpl appVariant -> - if (!appVariant.buildType.name.equalsIgnoreCase("release")) { - return - } - - registerTaskHooker(instantiator.newInstance(PrepareDependenciesHooker, project, appVariant)) - registerTaskHooker(instantiator.newInstance(MergeAssetsHooker, project, appVariant)) - registerTaskHooker(instantiator.newInstance(MergeManifestsHooker, project, appVariant)) - registerTaskHooker(instantiator.newInstance(MergeJniLibsHooker, project, appVariant)) -// registerTaskHooker(instantiator.newInstance(ShrinkResourcesHooker, project, appVariant)) - registerTaskHooker(instantiator.newInstance(ProcessResourcesHooker, project, appVariant)) - registerTaskHooker(instantiator.newInstance(ProguardHooker, project, appVariant)) - registerTaskHooker(instantiator.newInstance(DxTaskHooker, project, appVariant)) - } +// android.applicationVariants.all { ApplicationVariantImpl appVariant -> +// if (!appVariant.buildType.name.equalsIgnoreCase("release")) { +// return +// } +// +// registerTaskHooker(instantiator.newInstance(PrepareDependenciesHooker, project, appVariant)) +// registerTaskHooker(instantiator.newInstance(MergeAssetsHooker, project, appVariant)) +//// registerTaskHooker(instantiator.newInstance(MergeManifestsHooker, project, appVariant)) +// registerTaskHooker(instantiator.newInstance(MergeJniLibsHooker, project, appVariant)) +//// registerTaskHooker(instantiator.newInstance(ShrinkResourcesHooker, project, appVariant)) +// registerTaskHooker(instantiator.newInstance(ProcessResourcesHooker, project, appVariant)) +// registerTaskHooker(instantiator.newInstance(ProguardHooker, project, appVariant)) +// registerTaskHooker(instantiator.newInstance(DxTaskHooker, project, appVariant)) +// } } } } diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/GradleTaskHooker.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/GradleTaskHooker.groovy index 756f79e..3af8279 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/GradleTaskHooker.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/GradleTaskHooker.groovy @@ -1,7 +1,8 @@ package com.didi.virtualapk.hooker +import com.android.build.api.variant.impl.ApplicationVariantImpl import com.android.build.gradle.api.ApkVariant -import com.android.build.gradle.internal.api.ApplicationVariantImpl +//import com.android.build.gradle.internal.api.ApplicationVariantImpl import com.android.build.gradle.internal.scope.VariantScope import com.android.build.gradle.internal.variant.BaseVariantData import com.didi.virtualapk.VAExtention @@ -45,11 +46,13 @@ public abstract class GradleTaskHooker { } public BaseVariantData getVariantData() { - return ((ApplicationVariantImpl) this.apkVariant).variantData + return ((ApplicationVariantImpl) this.apkVariant) + .variantData } public VariantScope getScope() { - return variantData.scope +// return variantData.scope + return ((ApplicationVariantImpl)this.apkVariant).variantScope } public VAExtention getVirtualApk() { diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeAssetsHooker.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeAssetsHooker.groovy index 8b4ef5f..c49dd54 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeAssetsHooker.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeAssetsHooker.groovy @@ -2,7 +2,8 @@ package com.didi.virtualapk.hooker import com.android.build.gradle.api.ApkVariant import com.android.build.gradle.tasks.MergeSourceSetFolders -import com.android.ide.common.res2.AssetSet +//import com.android.ide.common.res2.AssetSet +import com.android.ide.common.resources.AssetSet import com.didi.virtualapk.collector.dependence.AarDependenceInfo import com.didi.virtualapk.utils.Log import com.didi.virtualapk.utils.Reflect diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeManifestsHooker.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeManifestsHooker.groovy index bcf30e5..d58fc55 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeManifestsHooker.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/MergeManifestsHooker.groovy @@ -1,159 +1,160 @@ -package com.didi.virtualapk.hooker - -import com.android.build.gradle.api.ApkVariant -import com.android.build.gradle.internal.scope.TaskOutputHolder -import com.android.build.gradle.tasks.MergeManifests -import com.didi.virtualapk.collector.dependence.DependenceInfo -import com.didi.virtualapk.utils.Log -import com.didi.virtualapk.utils.Reflect -import groovy.xml.QName -import groovy.xml.XmlUtil -import org.gradle.api.Project -import org.gradle.api.artifacts.ArtifactCollection -import org.gradle.api.artifacts.result.ResolvedArtifactResult -import org.gradle.api.file.FileCollection -import org.gradle.api.internal.file.AbstractFileCollection -import org.gradle.api.tasks.TaskDependency - -import java.util.function.Consumer -import java.util.function.Predicate - -/** - * Filter the stripped ManifestDependency in the ManifestDependency list of MergeManifests task - * - * @author zhengtao - */ -class MergeManifestsHooker extends GradleTaskHooker { - - public static final String ANDROID_NAMESPACE = 'http://schemas.android.com/apk/res/android' - - public MergeManifestsHooker(Project project, ApkVariant apkVariant) { - super(project, apkVariant) - } - - @Override - String getTaskName() { - return scope.getTaskName('process', 'Manifest') - } - - @Override - void beforeTaskExecute(MergeManifests task) { - - def stripAarNames = vaContext.stripDependencies. - findAll { - it.dependenceType == DependenceInfo.DependenceType.AAR - }. - collect { DependenceInfo dep -> - "${dep.group}:${dep.artifact}:${dep.version}" - } as Set - - Reflect reflect = Reflect.on(task) - ArtifactCollection manifests = new FixedArtifactCollection(this, reflect.get('manifests'), stripAarNames) - reflect.set('manifests', manifests) - } - - /** - * Filter specific attributes from element after MergeManifests task executed - */ - @Override - void afterTaskExecute(MergeManifests task) { - variantData.outputScope.getOutputs(TaskOutputHolder.TaskOutputType.MERGED_MANIFESTS).each { - rewrite(it.outputFile) - } - } - - void rewrite(File xml) { - if (xml?.exists()) { - final Node manifest = new XmlParser().parse(xml) - - - manifest.application.each { application -> - [ 'icon', 'label', 'allowBackup', 'supportsRtl' ].each { - application.attributes().remove(new QName(MergeManifestsHooker.ANDROID_NAMESPACE, it)) - } - } - - xml.withPrintWriter('utf-8', { pw -> - XmlUtil.serialize(manifest, pw) - }) - } - } - - private static class FixedArtifactCollection implements ArtifactCollection { - - private MergeManifestsHooker hooker - private ArtifactCollection origin - def stripAarNames - - FixedArtifactCollection(MergeManifestsHooker hooker, ArtifactCollection origin, stripAarNames) { - this.hooker = hooker - this.origin = origin - this.stripAarNames = stripAarNames - } - - @Override - FileCollection getArtifactFiles() { - Set set = getArtifacts().collect { ResolvedArtifactResult result -> - result.file - } as Set - FileCollection fileCollection = origin.getArtifactFiles() - - return new AbstractFileCollection() { - @Override - String getDisplayName() { - return fileCollection.getDisplayName() - } - - @Override - TaskDependency getBuildDependencies() { - return fileCollection.getBuildDependencies() - } - - @Override - Set getFiles() { - Set files = new LinkedHashSet(fileCollection.getFiles()) - files.retainAll(set) - return files - } - } - } - - @Override - Set getArtifacts() { - Set set = origin.getArtifacts() - set.removeIf(new Predicate() { - @Override - boolean test(ResolvedArtifactResult result) { - boolean ret = stripAarNames.contains("${result.id.componentIdentifier.displayName}") - if (ret) { - Log.i 'MergeManifestsHooker', "Stripped manifest of artifact: ${result} -> ${result.file}" - } - return ret - } - }) - - hooker.mark() - return set - } - - @Override - Collection getFailures() { - return origin.getFailures() - } - - @Override - Iterator iterator() { - return getArtifacts().iterator() - } - - @Override - void forEach(Consumer action) { - getArtifacts().forEach(action) - } - - @Override - Spliterator spliterator() { - return getArtifacts().spliterator() - } - } -} \ No newline at end of file +//package com.didi.virtualapk.hooker +// +//import com.android.build.gradle.api.ApkVariant +////import com.android.build.gradle.internal.scope.TaskOutputHolder +////import com.android.build.gradle.tasks.MergeManifests +//import com.didi.virtualapk.collector.dependence.DependenceInfo +//import com.didi.virtualapk.utils.Log +//import com.didi.virtualapk.utils.Reflect +//import groovy.xml.QName +//import groovy.xml.XmlUtil +//import org.gradle.api.Project +//import org.gradle.api.artifacts.ArtifactCollection +//import org.gradle.api.artifacts.result.ResolvedArtifactResult +//import org.gradle.api.file.FileCollection +//import org.gradle.api.internal.file.AbstractFileCollection +//import org.gradle.api.tasks.TaskDependency +// +//import java.util.function.Consumer +//import java.util.function.Predicate +// +///** +// * Filter the stripped ManifestDependency in the ManifestDependency list of MergeManifests task +// * +// * @author zhengtao +// */ +//class MergeManifestsHooker extends GradleTaskHooker { +// +// public static final String ANDROID_NAMESPACE = 'http://schemas.android.com/apk/res/android' +// +// public MergeManifestsHooker(Project project, ApkVariant apkVariant) { +// super(project, apkVariant) +// } +// +// @Override +// String getTaskName() { +// return scope.getTaskName('process', 'Manifest') +// } +// +// @Override +// void beforeTaskExecute(MergeManifests task) { +// +// def stripAarNames = vaContext.stripDependencies. +// findAll { +// it.dependenceType == DependenceInfo.DependenceType.AAR +// }. +// collect { DependenceInfo dep -> +// "${dep.group}:${dep.artifact}:${dep.version}" +// } as Set +// +// Reflect reflect = Reflect.on(task) +// ArtifactCollection manifests = new FixedArtifactCollection(this, reflect.get('manifests'), stripAarNames) +// reflect.set('manifests', manifests) +// } +// +// /** +// * Filter specific attributes from element after MergeManifests task executed +// */ +// @Override +// void afterTaskExecute(MergeManifests task) { +// variantData.outputScope.getOutputs(TaskOutputHolder.TaskOutputType.MERGED_MANIFESTS).each { +// rewrite(it.outputFile) +// } +// } +// +// void rewrite(File xml) { +// if (xml?.exists()) { +// final Node manifest = new XmlParser().parse(xml) +// +// +// manifest.application.each { application -> +// [ 'icon', 'label', 'allowBackup', 'supportsRtl' ].each { +// application.attributes().remove(new QName(MergeManifestsHooker.ANDROID_NAMESPACE, it)) +// } +// } +// +// xml.withPrintWriter('utf-8', { pw -> +// XmlUtil.serialize(manifest, pw) +// }) +// } +// } +// +// private static class FixedArtifactCollection implements ArtifactCollection { +// +// private MergeManifestsHooker hooker +// private ArtifactCollection origin +// def stripAarNames +// +// FixedArtifactCollection(MergeManifestsHooker hooker, ArtifactCollection origin, stripAarNames) { +// this.hooker = hooker +// this.origin = origin +// this.stripAarNames = stripAarNames +// } +// +// @Override +// FileCollection getArtifactFiles() { +// Set set = getArtifacts().collect { ResolvedArtifactResult result -> +// result.file +// } as Set +// FileCollection fileCollection = origin.getArtifactFiles() +// +// return new AbstractFileCollection() { +// @Override +// String getDisplayName() { +// return fileCollection.getDisplayName() +// } +// +// // TODO gradle 升级之后,这里的方法变为final了,所以不能override +//// @Override +//// TaskDependency getBuildDependencies() { +//// return fileCollection.getBuildDependencies() +//// } +// +// @Override +// Set getFiles() { +// Set files = new LinkedHashSet(fileCollection.getFiles()) +// files.retainAll(set) +// return files +// } +// } +// } +// +// @Override +// Set getArtifacts() { +// Set set = origin.getArtifacts() +// set.removeIf(new Predicate() { +// @Override +// boolean test(ResolvedArtifactResult result) { +// boolean ret = stripAarNames.contains("${result.id.componentIdentifier.displayName}") +// if (ret) { +// Log.i 'MergeManifestsHooker', "Stripped manifest of artifact: ${result} -> ${result.file}" +// } +// return ret +// } +// }) +// +// hooker.mark() +// return set +// } +// +// @Override +// Collection getFailures() { +// return origin.getFailures() +// } +// +// @Override +// Iterator iterator() { +// return getArtifacts().iterator() +// } +// +// @Override +// void forEach(Consumer action) { +// getArtifacts().forEach(action) +// } +// +// @Override +// Spliterator spliterator() { +// return getArtifacts().spliterator() +// } +// } +//} \ No newline at end of file diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/PrepareDependenciesHooker.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/PrepareDependenciesHooker.groovy index 557ca39..53ee2f7 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/PrepareDependenciesHooker.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/PrepareDependenciesHooker.groovy @@ -1,7 +1,9 @@ package com.didi.virtualapk.hooker import com.android.build.gradle.api.ApkVariant -import com.android.build.gradle.internal.ide.ArtifactDependencyGraph +import com.android.build.gradle.internal.ide.dependencies.ArtifactDependencyGraph + +//import com.android.build.gradle.internal.ide.ArtifactDependencyGraph import com.android.build.gradle.internal.tasks.AppPreBuildTask import com.android.builder.model.Dependencies import com.android.builder.model.SyncIssue diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProcessResourcesHooker.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProcessResourcesHooker.groovy index cec55ca..cd8e771 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProcessResourcesHooker.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProcessResourcesHooker.groovy @@ -3,7 +3,7 @@ package com.didi.virtualapk.hooker import com.android.build.gradle.AndroidConfig import com.android.build.gradle.AppExtension import com.android.build.gradle.api.ApkVariant -import com.android.build.gradle.internal.scope.TaskOutputHolder +//import com.android.build.gradle.internal.scope.TaskOutputHolder import com.android.build.gradle.tasks.ProcessAndroidResources import com.android.sdklib.BuildToolInfo import com.didi.virtualapk.aapt.Aapt diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProguardHooker.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProguardHooker.groovy index d6df4f3..546a699 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProguardHooker.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ProguardHooker.groovy @@ -2,7 +2,7 @@ package com.didi.virtualapk.hooker import com.android.build.gradle.api.ApkVariant import com.android.build.gradle.internal.pipeline.TransformTask -import com.android.build.gradle.internal.transforms.ProGuardTransform +//import com.android.build.gradle.internal.transforms.ProGuardTransform import com.didi.virtualapk.collector.dependence.AarDependenceInfo import org.gradle.api.InvalidUserDataException import org.gradle.api.Project @@ -39,7 +39,7 @@ class ProguardHooker extends GradleTaskHooker { @Override void beforeTaskExecute(TransformTask task) { - def proguardTransform = task.transform as ProGuardTransform +// def proguardTransform = task.transform as ProGuardTransform File applyMappingFile; diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ShrinkResourcesHooker.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ShrinkResourcesHooker.groovy index 29f67b3..64c3332 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ShrinkResourcesHooker.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/ShrinkResourcesHooker.groovy @@ -4,7 +4,7 @@ import com.android.build.api.transform.TransformException import com.android.build.api.transform.TransformInvocation import com.android.build.gradle.api.ApkVariant import com.android.build.gradle.internal.pipeline.TransformTask -import com.android.build.gradle.internal.transforms.ShrinkResourcesTransform +//import com.android.build.gradle.internal.transforms.ShrinkResourcesTransform import com.didi.virtualapk.transform.TransformWrapper import com.didi.virtualapk.utils.Log import com.didi.virtualapk.utils.Reflect @@ -23,7 +23,7 @@ class ShrinkResourcesHooker extends GradleTaskHooker { @Override void beforeTaskExecute(TransformTask task) { - def shrinkResourcesTransform = task.transform as ShrinkResourcesTransform +// def shrinkResourcesTransform = task.transform as ShrinkResourcesTransform Reflect.on(task).set('transform', new TransformWrapper(shrinkResourcesTransform) { @Override void transform(TransformInvocation invocation) throws TransformException, InterruptedException, IOException { diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy index d1b97e5..b0cd3a7 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy @@ -4,13 +4,13 @@ import com.android.build.gradle.api.ApkVariant import com.android.build.gradle.internal.api.ApplicationVariantImpl import com.didi.virtualapk.VAExtention import com.didi.virtualapk.utils.Log -import com.sun.istack.internal.NotNull import org.gradle.api.Action import org.gradle.api.DefaultTask import org.gradle.api.Project import org.gradle.api.tasks.Input import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction +import org.jetbrains.annotations.NotNull /** * Gradle task for assemble plugin apk diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/TaskContainerAdaptor.java b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/TaskContainerAdaptor.java new file mode 100644 index 0000000..cdacc8e --- /dev/null +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/TaskContainerAdaptor.java @@ -0,0 +1,60 @@ +package com.didi.virtualapk.utils; + +import com.android.annotations.Nullable; + +import org.gradle.api.Action; +import org.gradle.api.Task; +import org.gradle.api.internal.project.taskfactory.TaskFactory; +import org.gradle.api.tasks.TaskContainer; + +///** +// * Created by muyonggang on 2023/7/13 +// * +// * @author muyonggang@bytedance.com +// */ +// +//public class TaskContainerAdaptor implements TaskFactory { +// +// private final TaskContainer tasks; +// +// public TaskContainerAdaptor(TaskContainer tasks) { +// this.tasks = tasks; +// } +// +// @Override +// public boolean containsKey(String name) { +// return tasks.findByName(name) != null; +// } +// +// @Override +// public void create(String name) { +// tasks.create(name); +// } +// +// @Override +// public void create(String name, Action configAction) { +// tasks.create(name, configAction); +// } +// +// @Override +// public void create(String name, Class type) { +// tasks.create(name, type); +// } +// +// @Override +// public void create(String name, Class type, +// Action configAction) { +// tasks.create(name, type, configAction); +// } +// +// @Override +// public void named(String name, Action configAction) { +// configAction.execute(tasks.findByName(name)); +// } +// +// @Nullable +// @Override +// public Task named(String name) { +// return tasks.getByName(name); +// } +//} diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/VariantConfiguration.java b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/VariantConfiguration.java new file mode 100644 index 0000000..64108f5 --- /dev/null +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/VariantConfiguration.java @@ -0,0 +1,43 @@ +package com.didi.virtualapk.utils; + +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; +import com.android.builder.core.VariantType; +import com.android.builder.model.BuildType; +import com.android.utils.StringHelper; + +/** + * Created by muyonggang on 2023/7/12 + */ +public class VariantConfiguration { + + +// // copy from agp 3.0.0 +// @NonNull +// public static String computeFullName( +// @NonNull String flavorName, +// @NonNull B buildType, +// @NonNull VariantType type, +// @Nullable VariantType testedType) { +// StringBuilder sb = new StringBuilder(); +// +// if (!flavorName.isEmpty()) { +// sb.append(flavorName); +// sb.append(StringHelper.capitalize(buildType.getName())); +// } else { +// sb.append(buildType.getName()); +// } +// +// if (type == VariantType.FEATURE) { +// sb.append("Feature"); +// } +// +// if (type.isForTesting()) { +// if (testedType == VariantType.FEATURE) { +// sb.append("Feature"); +// } +// sb.append(type.getSuffix()); +// } +// return sb.toString(); +// } +} diff --git a/virtualapk-gradle-plugin/upload.gradle b/virtualapk-gradle-plugin/upload.gradle index 0611452..9e8829f 100644 --- a/virtualapk-gradle-plugin/upload.gradle +++ b/virtualapk-gradle-plugin/upload.gradle @@ -1,49 +1,9 @@ -apply plugin: 'com.github.dcendents.android-maven' -apply plugin: 'com.jfrog.bintray' - - -def siteUrl = 'https://github.com/didi/VirtualAPK' // 项目的主页 -def gitUrl = 'https://github.com/didi/VirtualAPK' // Git仓库的url +apply plugin: 'maven-publish' group = GROUP_ID archivesBaseName = 'gradle' version = VERSION -install { - repositories.mavenInstaller { - // This generates POM.xml with proper parameters - pom { - artifactId = ARTIFACT_ID - - project { - packaging 'aar' - // Add your description here - name 'A powerful but lightweight plugin framework for Android' //项目描述 - url siteUrl - // Set your license - licenses { - license { - name 'Apache License 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0' - } - } - developers { - developer { - id 'zhengtao' //填写的一些基本信息 - name 'DiDi' - email 'zhengtao620@gmail.com' - } - } - scm { - connection gitUrl - developerConnection gitUrl - url siteUrl - } - } - } - } -} - task sourcesJar(type: Jar) { from sourceSets.main.allJava classifier = 'sources' @@ -56,20 +16,21 @@ artifacts { //archives javadocJar archives sourcesJar } +// https://docs.gradle.org/current/userguide/dependency_management_for_java_projects.html#sec:publishing_artifacts_tutorial +publishing { + publications { + maven(MavenPublication) { + groupId = group + artifactId = ARTIFACT_ID + version(version) -Properties properties = new Properties() -properties.load(project.rootProject.file('local.properties').newDataInputStream()) -bintray { - user = properties.getProperty("bintray.user") - key = properties.getProperty("bintray.apikey") - configurations = ['archives'] - pkg { - repo = "maven" - name = "${GROUP_ID}:${ARTIFACT_ID}" //发布到JCenter上的项目名字 - websiteUrl = siteUrl - vcsUrl = gitUrl - licenses = ["Apache-2.0"] - publish = true + from components.java + } + } + repositories { + maven { + name = 'myRepo' + url = layout.buildDirectory.dir("repo") + } } - } \ No newline at end of file