Skip to content

Commit e775f8d

Browse files
committed
Update for AGP 9.0
1 parent 3415ad4 commit e775f8d

12 files changed

Lines changed: 410 additions & 307 deletions

build.gradle.kts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
task("clean", type = Delete::class) {
2-
delete(buildDir)
1+
tasks.register<Delete>("clean") {
2+
delete(rootProject.layout.buildDirectory)
33
}
44

55
subprojects {
66
group = "dev.rikka.tools.autoresconfig"
7-
version = "1.2.1"
7+
version = "1.3.0"
88

99
plugins.withId("java") {
1010
println("- Configuring `java`")
1111

1212
extensions.configure<JavaPluginExtension> {
13-
sourceCompatibility = JavaVersion.VERSION_11
14-
targetCompatibility = JavaVersion.VERSION_11
13+
sourceCompatibility = JavaVersion.VERSION_17
14+
targetCompatibility = JavaVersion.VERSION_17
1515
}
1616
tasks.register("sourcesJar", type = Jar::class) {
1717
archiveClassifier.set("sources")
@@ -61,7 +61,8 @@ subprojects {
6161
mavenLocal()
6262
maven {
6363
name = "ossrh"
64-
url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2")
64+
url =
65+
uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2")
6566
credentials(PasswordCredentials::class.java)
6667
}
6768
}
@@ -75,7 +76,8 @@ subprojects {
7576
if (findProperty("signing.gnupg.keyName") != null) {
7677
useGpgCmd()
7778

78-
val signingTasks = sign(extensions.getByType<PublishingExtension>().publications)
79+
val signingTasks =
80+
sign(extensions.getByType<PublishingExtension>().publications)
7981
tasks.withType(AbstractPublishToMaven::class) {
8082
dependsOn(signingTasks)
8183
}
@@ -85,3 +87,7 @@ subprojects {
8587
}
8688
}
8789
}
90+
tasks.named<UpdateDaemonJvm>("updateDaemonJvm") {
91+
languageVersion = JavaLanguageVersion.of(21)
92+
vendor = JvmVendorSpec.ADOPTIUM
93+
}
Lines changed: 86 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
package dev.rikka.tools.autoresconfig;
22

3-
import com.android.build.gradle.AppExtension;
4-
import com.android.build.gradle.api.ApplicationVariant;
5-
import com.android.builder.core.AbstractProductFlavor;
3+
import com.android.build.api.dsl.ApplicationExtension;
4+
import com.android.build.api.variant.AndroidComponentsExtension;
5+
import com.android.build.api.variant.ApplicationAndroidComponentsExtension;
6+
import com.android.build.api.variant.ApplicationVariant;
7+
68
import org.gradle.api.GradleException;
79
import org.gradle.api.Plugin;
810
import org.gradle.api.Project;
11+
import org.gradle.api.file.Directory;
912
import org.gradle.api.logging.Logger;
1013
import org.gradle.api.logging.Logging;
11-
import org.gradle.api.tasks.SourceTask;
1214

1315
import java.io.File;
1416
import java.io.IOException;
1517
import java.nio.file.Files;
1618
import java.util.*;
17-
import java.util.stream.Collectors;
1819

1920
@SuppressWarnings("unused")
2021
public class AutoResConfigPlugin implements Plugin<Project> {
@@ -34,7 +35,7 @@ private void collectModifiers(File dir, Collection<String> output) throws IOExce
3435
return;
3536
}
3637

37-
logger.debug("AutoResConfig: Collect modifiers from " + dir);
38+
logger.debug("AutoResConfig: Collect modifiers from {}", dir);
3839

3940
try (var stream = Files.list(dir.toPath())) {
4041
output.addAll(stream
@@ -54,19 +55,22 @@ private void collectModifiers(File dir, Collection<String> output) throws IOExce
5455
.map(java.nio.file.Path::getFileName)
5556
.map(path -> path.toFile().getName().substring("values-".length()))
5657
.filter(s -> s.split("-").length <= 3)
57-
.collect(Collectors.toList()));
58+
.toList());
5859
}
5960
}
6061

61-
private Collection<String> collectModifiers(@SuppressWarnings("deprecation") ApplicationVariant variant) {
62+
private Collection<String> collectModifiers(ApplicationVariant variant) {
6263
var set = new HashSet<String>();
6364
set.add("en");
6465

65-
Set<File> resDirs = new HashSet<>();
66-
variant.getSourceSets().forEach(sourceProvider -> resDirs.addAll(sourceProvider.getResDirectories()));
66+
Set<Directory> resDirs = new HashSet<>();
67+
var res = variant.getSources().getRes();
68+
if (res != null) {
69+
res.getStatic().get().forEach(resDirs::addAll);
70+
}
6771

68-
for (File dir : resDirs) {
69-
Set<String> modifiers = modifierCache.get(dir.getAbsolutePath());
72+
for (var dir : resDirs) {
73+
Set<String> modifiers = modifierCache.get(dir.getAsFile().getAbsolutePath());
7074
if (modifiers != null) {
7175
set.addAll(modifiers);
7276
}
@@ -77,20 +81,6 @@ private Collection<String> collectModifiers(@SuppressWarnings("deprecation") App
7781
return list;
7882
}
7983

80-
private boolean updateResConfig(@SuppressWarnings("deprecation") ApplicationVariant variant, Collection<String> modifiers) {
81-
var mergedFlavor = variant.getMergedFlavor();
82-
83-
//noinspection deprecation
84-
if (mergedFlavor instanceof AbstractProductFlavor) {
85-
//noinspection deprecation
86-
var flavor = (AbstractProductFlavor) mergedFlavor;
87-
flavor.addResourceConfigurations(modifiers);
88-
return true;
89-
} else {
90-
return false;
91-
}
92-
}
93-
9484
private Collection<String> convertModifiersToLocales(Collection<String> modifiers) {
9585
var locales = new ArrayList<String>();
9686

@@ -135,7 +125,7 @@ private Collection<String> convertLocalesToDisplayLocales(Collection<String> loc
135125

136126
@Override
137127
public void apply(Project project) {
138-
var appExtension = project.getExtensions().findByType(AppExtension.class);
128+
var appExtension = project.getExtensions().findByType(ApplicationExtension.class);
139129
if (appExtension == null) throw new GradleException("Android application extension not found");
140130

141131
var extension = project.getExtensions().create(
@@ -145,11 +135,10 @@ public void apply(Project project) {
145135
modifierCache.clear();
146136

147137
appExtension.getSourceSets().all(sourceSet -> {
148-
Set<String> mainModifiers = null;
149-
150-
logger.info("AutoResConfig: Collect locale modifiers for " + sourceSet.getName());
138+
logger.info("AutoResConfig: Collect locale modifiers for {}", sourceSet.getName());
151139

152-
for (File dir : sourceSet.getRes().getSrcDirs()) {
140+
for (var path : sourceSet.getRes().getDirectories()) {
141+
var dir = project.getLayout().getProjectDirectory().dir(path).getAsFile();
153142
var absolutePath = dir.getAbsolutePath();
154143

155144
var set = modifierCache.get(absolutePath);
@@ -163,91 +152,95 @@ public void apply(Project project) {
163152
try {
164153
collectModifiers(dir, set);
165154
} catch (IOException e) {
166-
logger.error("AutoResConfig: Failed to collect modifiers from " + dir, e);
167-
}
168-
169-
if (sourceSet.getName().equals("main")) {
170-
mainModifiers = set;
171-
}
172-
}
173-
174-
if (sourceSet.getName().equals("main")) {
175-
if (mainModifiers != null) {
176-
var list = new ArrayList<>(mainModifiers);
177-
list.sort(String.CASE_INSENSITIVE_ORDER);
178-
179-
appExtension.getDefaultConfig().resConfigs(list);
180-
logger.info("AutoResConfig: Update default resConfig " + mainModifiers);
181-
} else {
182-
logger.warn("AutoResConfig: mainModifiers is null");
155+
logger.error("AutoResConfig: Failed to collect modifiers from {}", dir, e);
183156
}
184157
}
185158
});
186159

187-
appExtension.getApplicationVariants().all(variant -> {
188-
var variantName = variant.getName();
189-
var variantNameCapitalized = Util.capitalize(variantName);
160+
var androidComponents = project.getExtensions().findByType(AndroidComponentsExtension.class);
161+
if (androidComponents instanceof ApplicationAndroidComponentsExtension componentsExtension) {
162+
componentsExtension.onVariants(androidComponents.selector().all(), variant -> {
163+
var variantName = variant.getName();
164+
var variantNameCapitalized = Util.capitalize(variantName);
190165

191-
logger.info("AutoResConfig: Variant " + variantName);
192-
logger.info("AutoResConfig: " + extension);
166+
logger.info("AutoResConfig: Variant {}", variantName);
167+
logger.info("AutoResConfig: {}", extension);
193168

194-
var modifiers = collectModifiers(variant);
169+
var modifiers = collectModifiers(variant);
195170

196-
if (updateResConfig(variant, modifiers)) {
197-
logger.info("AutoResConfig: Update resConfig " + modifiers);
198-
} else {
199-
logger.error("AutoResConfig: Failed to update resConfig");
200-
}
171+
variant.getAndroidResources()
172+
.getLocaleFilters()
173+
.addAll(modifiers);
201174

202-
var locales = convertModifiersToLocales(modifiers);
203-
var displayLocales = convertLocalesToDisplayLocales(locales);
204-
logger.info("AutoResConfig: Locales " + locales);
205-
logger.info("AutoResConfig: Display locales " + displayLocales);
175+
var locales = convertModifiersToLocales(modifiers);
176+
var displayLocales = convertLocalesToDisplayLocales(locales);
177+
logger.info("AutoResConfig: Locales {}", locales);
178+
logger.info("AutoResConfig: Display locales {}", displayLocales);
206179

207-
if (extension.getGenerateClass().get()) {
208-
var javaSourceDir = new File(project.getBuildDir(),
209-
String.format("generated/auto_res_config/%s/java", variantName));
180+
if (extension.getGenerateClass().get()) {
181+
var javaSourceDir = project.getLayout().getBuildDirectory()
182+
.dir(String.format("generated/auto_res_config/%s/java", variantName));
210183

211-
var taskName = String.format("generate%sAutoResConfigSource", variantNameCapitalized);
184+
var taskName = String.format("generate%sAutoResConfigSource", variantNameCapitalized);
212185

213-
var generateJavaTask = project.getTasks().register(taskName,
214-
GenerateJavaTask.class, extension, javaSourceDir, locales, displayLocales);
186+
var task = project.getTasks().register(taskName,
187+
GenerateJavaTask.class, t -> {
188+
t.getExtension().set(extension);
189+
t.getOutputDir().set(javaSourceDir);
190+
t.getLocales().set(locales);
191+
t.getDisplayLocales().set(displayLocales);
192+
});
215193

216-
variant.registerJavaGeneratingTask(generateJavaTask, javaSourceDir);
194+
var java = variant.getSources().getJava();
195+
if (java != null) {
196+
java.addGeneratedSourceDirectory(task, GenerateJavaTask::getOutputDir);
197+
}
217198

218-
logger.info("AutoResConfig: register " + taskName + " " + javaSourceDir);
219-
}
199+
logger.info("AutoResConfig: register {} {}", taskName, javaSourceDir);
200+
}
220201

221-
if (extension.getGenerateRes().get()) {
222-
var resDir = new File(project.getBuildDir(),
223-
String.format("generated/auto_res_config/%s/res", variantName));
202+
if (extension.getGenerateRes().get()) {
203+
var resDir = project.getLayout().getBuildDirectory()
204+
.dir(String.format("generated/auto_res_config/%s/res", variantName));
224205

225-
var taskName = String.format("generate%sAutoResConfigRes", variantNameCapitalized);
206+
var taskName = String.format("generate%sAutoResConfigRes", variantNameCapitalized);
226207

227-
var generateResTask = project.getTasks().register(taskName,
228-
GenerateResTask.class, extension, resDir, locales, displayLocales);
208+
var task = project.getTasks().register(taskName, GenerateResTask.class, t -> {
209+
t.getExtension().set(extension);
210+
t.getOutputDir().set(resDir);
211+
t.getLocales().set(locales);
212+
t.getDisplayLocales().set(displayLocales);
213+
});
229214

230-
variant.registerGeneratedResFolders(
231-
project.files(resDir).builtBy(generateResTask));
215+
var res = variant.getSources().getRes();
216+
if (res != null) {
217+
res.addGeneratedSourceDirectory(task, GenerateResTask::getOutputDir);
218+
}
232219

233-
logger.info("AutoResConfig: register " + taskName + " " + resDir);
234-
}
220+
logger.info("AutoResConfig: register {} {}", taskName, resDir);
221+
}
235222

236-
if (extension.getGenerateLocaleConfig().get()) {
237-
var resDir = new File(project.getBuildDir(),
238-
String.format("generated/auto_res_config/%s/res", variantName));
223+
if (extension.getGenerateLocaleConfig().get()) {
224+
var resDir = project.getLayout().getBuildDirectory()
225+
.dir(String.format("generated/auto_res_config/%s/res", variantName));
239226

240-
var taskName = String.format("generate%sAutoResConfigLocaleConfigRes", variantNameCapitalized);
227+
var taskName = String.format("generate%sAutoResConfigLocaleConfigRes", variantNameCapitalized);
241228

242-
var generateResTask = project.getTasks().register(taskName,
243-
GenerateLocaleConfigResTask.class, resDir, locales, displayLocales);
229+
var task = project.getTasks().register(taskName, GenerateLocaleConfigResTask.class, t -> {
230+
t.getOutputDir().set(resDir);
231+
t.getLocales().set(locales);
232+
t.getDisplayLocales().set(displayLocales);
233+
});
244234

245-
variant.registerGeneratedResFolders(
246-
project.files(resDir).builtBy(generateResTask));
235+
var res = variant.getSources().getRes();
236+
if (res != null) {
237+
res.addGeneratedSourceDirectory(task, GenerateLocaleConfigResTask::getOutputDir);
238+
}
247239

248-
logger.info("AutoResConfig: register " + taskName + " " + resDir);
249-
}
250-
});
240+
logger.info("AutoResConfig: register {} {}", taskName, resDir);
241+
}
242+
});
243+
}
251244

252245
}
253246
}

0 commit comments

Comments
 (0)