in analyzer/src/main/java/com/android/tools/sizereduction/analyzer/model/GroovyGradleParser.java [284:377]
private void checkDslPropertyAssignment(
String property, String value, String parent, String parentParent, int lineNumber) {
String buildType =
"buildTypes".equals(parentParent) ? parent : ProguardConfig.DEFAULT_CONFIG_NAME;
ProguardConfig.Builder proguardConfig =
proguardConfigs.containsKey(buildType)
? proguardConfigs.get(buildType)
: ProguardConfig.builder();
switch (property) {
case "minSdkVersion":
int curMinSdkVersion = getSdkVersion(value, defaultMinSdkVersion);
minSdkVersion =
(minSdkVersion > 0 && minSdkVersion < curMinSdkVersion)
? minSdkVersion
: curMinSdkVersion;
break;
case "targetSdkVersion":
int curTargetSdkVersion = getSdkVersion(value, defaultTargetSdkVersion);
targetSdkVersion =
(targetSdkVersion > 0 && targetSdkVersion < curTargetSdkVersion)
? targetSdkVersion
: curTargetSdkVersion;
break;
case "minifyEnabled":
proguardConfig.setMinifyEnabled(value.equals("true"));
proguardConfigs.put(buildType, proguardConfig);
break;
case "proguardFiles":
proguardConfig.setHasProguardRules(true);
proguardConfigs.put(buildType, proguardConfig);
break;
case "useProguard":
// useProguard may use proguard or r8, but this effectively controls whether
// obfuscation is enabled for this project.
proguardConfig.setObfuscationEnabled(value.equals("true"));
proguardConfigs.put(buildType, proguardConfig);
break;
case "enableSplit":
if (parentParent.equals("bundle")) {
switch (parent) {
case "abi": // 3.2 and above.
bundleConfigBuilder.setAbiSplitEnabled(value.equals("true"));
bundleConfigLocationBuilder.setAbiSplitLineNumber(lineNumber);
break;
case "density":
bundleConfigBuilder.setDensitySplitEnabled(value.equals("true"));
bundleConfigLocationBuilder.setDensitySplitLineNumber(lineNumber);
break;
case "language":
bundleConfigBuilder.setLanguageSplitEnabled(value.equals("true"));
bundleConfigLocationBuilder.setLanguageSplitLineNumber(lineNumber);
break;
default:
// ignore other proprties
break;
}
}
break;
case "classpath":
if (parent.equals("dependencies") && parentParent.equals("buildscript")) {
if (isStringLiteral(value)) {
String classPath = getStringLiteralValue(value);
if (classPath.startsWith("com.android.tools.build:gradle:")) {
String version = classPath.substring("com.android.tools.build:gradle:".length());
gradleContextBuilder.setAndroidPluginVersion(AndroidPluginVersion.create(version));
}
}
}
break;
case "wearApp":
if (parent.equals("dependencies")) {
gradleContextBuilder.setEmbedsWearApk(true);
}
break;
case "implementation":
case "api":
case "compile":
if (parent.equals("dependencies")) {
if (isStringLiteral(value)) {
List<String> dependency = Splitter.on(':').splitToList(getStringLiteralValue(value));
if (isValidDependencyString(dependency)) {
addDependencyToGradleContext(
/* group= */ dependency.get(0),
/* name= */ dependency.get(1),
/* version= */ dependency.get(2));
}
}
}
break;
default:
// there are many other valid properties, but we do not care to store them yet.
break;
}
}