Skip to content

Commit

Permalink
fix get applying variant scope
Browse files Browse the repository at this point in the history
  • Loading branch information
yangzhiqian committed Nov 3, 2020
1 parent 4282e0f commit 64f8733
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.ss.android.ugc.bytex.gradletoolkit

import com.android.build.gradle.internal.VariantManager
import com.android.build.gradle.internal.scope.VariantScope
import com.android.builder.model.Version
import com.android.repository.Revision
import org.gradle.api.Project

/**
* Created by yangzhiqian on 2020/11/2<br/>
*/
//todo:fix me
val revision = Revision.parseRevision(Version.ANDROID_GRADLE_PLUGIN_VERSION)
fun Project.findVariantScope(variantName: String): VariantScope? {
return findVariantManager().findVariantScope(variantName)
}


fun Project.findVariantManager(): VariantManager {
return if (revision.major > 3 || revision.minor >= 6) {
findVariantManager36()
} else {
findVariantManager35()
}
}

private fun Project.findVariantManager35(): VariantManager {
return project.plugins.findPlugin(com.android.build.gradle.AppPlugin::class.java)!!.variantManager
}

private fun Project.findVariantManager36(): VariantManager {
// return (project.plugins.findPlugin("com.android.internal.application") as com.android.build.gradle.internal.plugins.BasePlugin).variantManager
return project.plugins.findPlugin("com.android.internal.application")!!.let {
it.javaClass.getMethod("getVariantManager").invoke(it) as VariantManager
}
}

fun VariantManager.findVariantScope(variantName: String): VariantScope? {
return if (revision.major < 4) {
findVariantScope3X(variantName)
} else if (revision.minor == 0) {
findVariantScope40(variantName)
} else {
findVariantScope41(variantName)
}
}

private fun VariantManager.findVariantScope3X(variantName: String): VariantScope? {
return variantScopes.firstOrNull { it.fullVariantName == variantName }
}

private fun VariantManager.findVariantScope40(variantName: String): VariantScope? {
// return variantScopes.firstOrNull { it.name == variantName }
return variantScopes.firstOrNull { it::class.java.getMethod("getName").invoke(it) == variantName }
}


private fun VariantManager.findVariantScope41(variantName: String): VariantScope? {
// for (info in getMainComponents()) {
// if (info.properties.name == variantName) {
// return info.properties.variantScope
// }
// }
// return null
for (info in this.javaClass.getMethod("getMainComponents").invoke(this) as List<Any>) {
val properties = info.javaClass.getMethod("getProperties").invoke(info)
if (properties.javaClass.getMethod("getName").invoke(properties) == variantName) {
return properties.javaClass.getMethod("getVariantScope").invoke(properties) as VariantScope
}
}
return null
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
class ProguardConfigurationResolverFactory {
public static ProguardConfigurationResolver createProguardConfigurationResolver(Project project, String variantName) {
Revision revision = Revision.parseRevision(Version.ANDROID_GRADLE_PLUGIN_VERSION);
if (revision.getMajor() >= 3 && revision.getMinor() >= 6) {
if (revision.getMajor() > 3 || revision.getMinor() >= 6) {
return new ProguardConfigurableTaskResolver(project, variantName);
} else {
return new ProguardConfigurableTransformResolver(project, variantName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.android.build.api.transform.TransformException;
import com.android.build.api.transform.TransformInvocation;
import com.android.build.api.variant.VariantInfo;
import com.android.build.gradle.AppPlugin;
import com.android.build.gradle.internal.scope.VariantScope;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
Expand All @@ -20,6 +19,7 @@
import com.ss.android.ugc.bytex.common.log.Timer;
import com.ss.android.ugc.bytex.common.log.html.HtmlReporter;
import com.ss.android.ugc.bytex.gradletoolkit.TransformInvocationKt;
import com.ss.android.ugc.bytex.gradletoolkit.VariantScopeKt;
import com.ss.android.ugc.bytex.transformer.TransformContext;
import com.ss.android.ugc.bytex.transformer.TransformOptions;

Expand Down Expand Up @@ -63,7 +63,7 @@ public final boolean applyToVariant(VariantInfo variant) {

@Nullable
private VariantScope getApplyingVariantScope() {
return context.project.getPlugins().findPlugin(AppPlugin.class).getVariantManager().getVariantScopes().stream().filter(scope -> scope.getFullVariantName().equals(applyingVariantName)).findFirst().orElse(null);
return applyingVariantName == null ? null : VariantScopeKt.findVariantScope(context.project, applyingVariantName);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,7 @@ default Set<? super QualifiedContent.Scope> getScopes(@Nullable VariantScope var
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
if (variantScope.getType().isAar()) {
return TransformManager.SCOPE_FULL_LIBRARY_WITH_LOCAL_JARS;
} else if (variantScope.consumesFeatureJars() && consumesFeatureJars()) {
if (variantScope.consumesFeatureJars() && consumesFeatureJars()) {
return TransformManager.SCOPE_FULL_WITH_FEATURES;
} else {
return TransformManager.SCOPE_FULL_PROJECT;
Expand Down

0 comments on commit 64f8733

Please sign in to comment.