diff options
author | Diego Perez <diegoperez@google.com> | 2022-09-16 12:54:38 +0000 |
---|---|---|
committer | Diego Perez <diegoperez@google.com> | 2022-09-22 14:48:05 +0000 |
commit | e400fedafc1a3a9a764de6bf90ba03d9b8306580 (patch) | |
tree | 9476b4a70cf7a8fd128d57bff1e009fbdf494ff7 | |
parent | 90ed561f5e32a626145d64790629fba5fff06374 (diff) | |
download | idea-e400fedafc1a3a9a764de6bf90ba03d9b8306580.tar.gz |
Add support for pinning compileSdk in Gradle tests
This is to support the migration to Android 33 while supporting old AGP
tests that need using 32.
Test: bazel test --config=remote --notest_keep_going //tools/adt/idea/old-agp-tests/...
Bug: N/A
Change-Id: Ic9135212f160bc5616c891194063604e5cdf5e41
15 files changed, 171 insertions, 105 deletions
diff --git a/android-test-framework/testSrc/com/android/tools/idea/testing/AgpIntegrationTests.kt b/android-test-framework/testSrc/com/android/tools/idea/testing/AgpIntegrationTests.kt index 433a4f3ee6b..c7fa5ca2927 100644 --- a/android-test-framework/testSrc/com/android/tools/idea/testing/AgpIntegrationTests.kt +++ b/android-test-framework/testSrc/com/android/tools/idea/testing/AgpIntegrationTests.kt @@ -42,15 +42,20 @@ enum class AgpVersionSoftwareEnvironmentDescriptor( /** * Builder model version to query. */ - val modelVersion: ModelVersion = ModelVersion.V2 + val modelVersion: ModelVersion = ModelVersion.V2, + + /** + * The compileSdk to use in this test. `null` means the project default. + */ +val compileSdk: String? = null ) { - AGP_32("3.3.2", gradleVersion = "5.5", kotlinVersion = "1.4.32", modelVersion = ModelVersion.V1), - AGP_35("3.5.0", gradleVersion = "5.5", kotlinVersion = "1.4.32", modelVersion = ModelVersion.V1), - AGP_40("4.0.0", gradleVersion = "6.7.1", modelVersion = ModelVersion.V1), - AGP_41("4.1.0", gradleVersion = "6.7.1", modelVersion = ModelVersion.V1), - AGP_42("4.2.0", gradleVersion = "6.7.1", modelVersion = ModelVersion.V1), - AGP_70("7.0.0", gradleVersion = "7.0.2", modelVersion = ModelVersion.V1), - AGP_71("7.1.0", gradleVersion = "7.2", modelVersion = ModelVersion.V1), + AGP_32("3.3.2", gradleVersion = "5.5", kotlinVersion = "1.4.32", modelVersion = ModelVersion.V1, compileSdk = "32"), + AGP_35("3.5.0", gradleVersion = "5.5", kotlinVersion = "1.4.32", modelVersion = ModelVersion.V1, compileSdk = "32"), + AGP_40("4.0.0", gradleVersion = "6.7.1", modelVersion = ModelVersion.V1, compileSdk = "32"), + AGP_41("4.1.0", gradleVersion = "6.7.1", modelVersion = ModelVersion.V1, compileSdk = "32"), + AGP_42("4.2.0", gradleVersion = "6.7.1", modelVersion = ModelVersion.V1, compileSdk = "32"), + AGP_70("7.0.0", gradleVersion = "7.0.2", modelVersion = ModelVersion.V1, compileSdk = "32"), + AGP_71("7.1.0", gradleVersion = "7.2", modelVersion = ModelVersion.V1, compileSdk = "32"), AGP_72_V1("7.2.0", gradleVersion = "7.3.3", modelVersion = ModelVersion.V1), AGP_72("7.2.0", gradleVersion = "7.3.3", modelVersion = ModelVersion.V2), AGP_73("7.3.0-beta05", gradleVersion = "7.4", modelVersion = ModelVersion.V2), diff --git a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleProjectRule.kt b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleProjectRule.kt index 599a4e79d63..374f68d64a8 100644 --- a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleProjectRule.kt +++ b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleProjectRule.kt @@ -93,7 +93,7 @@ class AndroidGradleProjectRule(val workspaceRelativeTestDataPath: @SystemIndepen preLoad: ((projectRoot: File) -> Unit)? = null ) { if (preLoad != null) { - val rootFile = delegateTestCase.prepareProjectForImport(projectPath, gradleVersion, agpVersion, kotlinVersion, ndkVersion) + val rootFile = delegateTestCase.prepareProjectForImport(projectPath, gradleVersion, agpVersion, kotlinVersion, ndkVersion, null) preLoad(rootFile) delegateTestCase.importProject() diff --git a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestCase.java b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestCase.java index 5d91519a723..4afb0f36701 100644 --- a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestCase.java +++ b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestCase.java @@ -264,7 +264,7 @@ public abstract class AndroidGradleTestCase extends AndroidTestBase implements G @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, @Nullable String ndkVersion) throws Exception { - prepareProjectForImport(relativePath, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion); + prepareProjectForImport(relativePath, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, null); importProject(); prepareProjectForTest(getProject(), chosenModuleName); @@ -293,18 +293,19 @@ public abstract class AndroidGradleTestCase extends AndroidTestBase implements G @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, @Nullable String ndkVersion, + @Nullable String compileSdkVersion, File... localRepos) throws IOException { - AndroidGradleTests.defaultPatchPreparedProject(projectRoot, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, localRepos); + AndroidGradleTests.defaultPatchPreparedProject(projectRoot, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, compileSdkVersion, localRepos); } @NotNull protected File prepareProjectForImport(@NotNull @SystemIndependent String relativePath) throws IOException { - return prepareProjectForImport(relativePath, null, null, null, null); + return prepareProjectForImport(relativePath, null, null, null, null, null); } @NotNull protected final File prepareProjectForImport(@NotNull @SystemIndependent String relativePath, @NotNull File targetPath) throws IOException { - return prepareProjectForImport(relativePath, targetPath, null, null, null, null); + return prepareProjectForImport(relativePath, targetPath, null, null, null, null, null); } /** @@ -316,13 +317,14 @@ public abstract class AndroidGradleTestCase extends AndroidTestBase implements G @Nullable String gradleVersion, @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, - @Nullable String ndkVersion) throws IOException { + @Nullable String ndkVersion, + @Nullable String compileSdkVersion) throws IOException { File projectSourceRoot = resolveTestDataPath(relativePath); prepareGradleProject( projectSourceRoot, targetPath, - file -> patchPreparedProject(file, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, + file -> patchPreparedProject(file, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, compileSdkVersion, getAdditionalRepos().toArray(new File[0]))); return targetPath; } @@ -332,9 +334,10 @@ public abstract class AndroidGradleTestCase extends AndroidTestBase implements G @Nullable String gradleVersion, @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, - @Nullable String ndkVersion) throws IOException { + @Nullable String ndkVersion, + @Nullable String compileSdk) throws IOException { File projectRoot = new File(toSystemDependentName(getProject().getBasePath())); - return prepareProjectForImport(relativePath, projectRoot, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion); + return prepareProjectForImport(relativePath, projectRoot, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, compileSdk); } @NotNull diff --git a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt index 72ed279727f..06b4f497a21 100644 --- a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt +++ b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt @@ -524,7 +524,9 @@ data class AndroidProjectBuilder( androidLibraryDependencyList(variant) override fun mainArtifact(variant: String): IdeAndroidArtifactCoreImpl = mainArtifactStub(variant) - override fun androidTestArtifact(variant: String, applicationId: String?): IdeAndroidArtifactCoreImpl? = androidTestArtifactStub(variant, applicationId) + override fun androidTestArtifact(variant: String, applicationId: String?): IdeAndroidArtifactCoreImpl? = androidTestArtifactStub( + variant, applicationId) + override fun unitTestArtifact(variant: String): IdeJavaArtifactCoreImpl? = unitTestArtifactStub(variant) override fun testFixturesArtifact(variant: String): IdeAndroidArtifactCoreImpl? = testFixturesArtifactStub(variant) override val variants: List<IdeVariantCoreImpl> = variants() @@ -685,8 +687,8 @@ fun AndroidProjectStubBuilder.buildDebugBuildTypeStub(): IdeBuildTypeContainerIm ), debugSourceProvider, listOfNotNull( - androidTestDebugSourceProvider?.let {IdeSourceProviderContainerImpl(ARTIFACT_NAME_ANDROID_TEST, it)}, - testDebugSourceProvider?.let {IdeSourceProviderContainerImpl(ARTIFACT_NAME_UNIT_TEST, it)} + androidTestDebugSourceProvider?.let { IdeSourceProviderContainerImpl(ARTIFACT_NAME_ANDROID_TEST, it) }, + testDebugSourceProvider?.let { IdeSourceProviderContainerImpl(ARTIFACT_NAME_UNIT_TEST, it) } ) ) } @@ -788,19 +790,19 @@ fun AndroidProjectStubBuilder.buildAndroidTestArtifactStub( ): IdeAndroidArtifactCoreImpl { val dependenciesStub = buildDependenciesStub( dependencies = toIdeModuleDependencies(androidModuleDependencies(variant).orEmpty()) + - listOf( - IdeDependencyCoreImpl( - internedModels.getOrCreate( - IdeModuleLibraryImpl( - buildId = buildId, - projectPath = gradleProjectPath, - variant = variant, - lintJar = null, - sourceSet = IdeModuleWellKnownSourceSet.MAIN - ) - ) - ) - ) + listOf( + IdeDependencyCoreImpl( + internedModels.getOrCreate( + IdeModuleLibraryImpl( + buildId = buildId, + projectPath = gradleProjectPath, + variant = variant, + lintJar = null, + sourceSet = IdeModuleWellKnownSourceSet.MAIN + ) + ) + ) + ) ) val assembleTaskName = "assemble".appendCapitalized(variant).appendCapitalized("androidTest") return IdeAndroidArtifactCoreImpl( @@ -849,19 +851,19 @@ fun AndroidProjectStubBuilder.buildUnitTestArtifactStub( variant: String, dependencies: IdeDependenciesCoreImpl = buildDependenciesStub( dependencies = toIdeModuleDependencies(androidModuleDependencies(variant).orEmpty()) + - listOf( - IdeDependencyCoreImpl( - internedModels.getOrCreate( - IdeModuleLibraryImpl( - buildId = buildId, - projectPath = gradleProjectPath, - variant = variant, - lintJar = null, - sourceSet = IdeModuleWellKnownSourceSet.MAIN - ) - ) - ) - ) + listOf( + IdeDependencyCoreImpl( + internedModels.getOrCreate( + IdeModuleLibraryImpl( + buildId = buildId, + projectPath = gradleProjectPath, + variant = variant, + lintJar = null, + sourceSet = IdeModuleWellKnownSourceSet.MAIN + ) + ) + ) + ) ), mockablePlatformJar: File? = null ): IdeJavaArtifactCoreImpl { @@ -1144,7 +1146,7 @@ fun setupTestProjectFromAndroidModel( if (moduleBuilders.none { it.gradlePath == ":" }) { error( "Each project needs to have ':' module. " + - "Add `JavaModuleModelBuilder.rootModuleBuilder` to add a default one." + "Add `JavaModuleModelBuilder.rootModuleBuilder` to add a default one." ) } if (IdeSdks.getInstance().androidSdkPath === null) { @@ -1333,7 +1335,7 @@ private fun setupTestProjectFromAndroidModelCore( moduleBuilder.agpVersion ?: LatestKnownPluginVersionProvider.INSTANCE.get(), internedModels ) - featureToBase.putAll(androidProject.dynamicFeatures.map {it to gradlePath}) + featureToBase.putAll(androidProject.dynamicFeatures.map { it to gradlePath }) fun IdeAndroidProjectImpl.populateBaseFeature(): IdeAndroidProjectImpl { return if (projectType != IdeAndroidProjectType.PROJECT_TYPE_DYNAMIC_FEATURE) this @@ -1363,6 +1365,7 @@ private fun setupTestProjectFromAndroidModelCore( } } } + is JavaModuleModelBuilder -> createJavaModuleDataNode( parentModuleOrProjectName = projectName, @@ -1391,7 +1394,8 @@ private fun setupTestProjectFromAndroidModelCore( ) ) - setupDataNodesForSelectedVariant(project, toSystemIndependentName(rootProjectBasePath.path), androidModels, projectDataNode, libraryResolver) + setupDataNodesForSelectedVariant(project, toSystemIndependentName(rootProjectBasePath.path), androidModels, projectDataNode, + libraryResolver) mergeContentRoots(projectDataNode) PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue() @@ -1477,13 +1481,13 @@ private fun createAndroidModuleDataNode( ) ) - when(ndkModel) { + when (ndkModel) { is V2NdkModel -> { val selectedAbiName = selectedAbiName - ?: ndkModel.abiByVariantAbi.keys.firstOrNull { it.variant == selectedVariantName }?.abi - ?: error( - "Cannot determine the selected ABI for module '$qualifiedModuleName' with the selected variant '$selectedVariantName'" - ) + ?: ndkModel.abiByVariantAbi.keys.firstOrNull { it.variant == selectedVariantName }?.abi + ?: error( + "Cannot determine the selected ABI for module '$qualifiedModuleName' with the selected variant '$selectedVariantName'" + ) moduleDataNode.addChild( DataNode<NdkModuleModel>( AndroidProjectKeys.NDK_MODEL, @@ -1498,12 +1502,13 @@ private fun createAndroidModuleDataNode( ) ) } + is V1NdkModel -> { val selectedAbiName = selectedAbiName - ?: ndkModel.nativeVariantAbis.firstOrNull { it.variantName == selectedVariantName }?.abi - ?: error( - "Cannot determine the selected ABI for module '$qualifiedModuleName' with the selected variant '$selectedVariantName'" - ) + ?: ndkModel.nativeVariantAbis.firstOrNull { it.variantName == selectedVariantName }?.abi + ?: error( + "Cannot determine the selected ABI for module '$qualifiedModuleName' with the selected variant '$selectedVariantName'" + ) moduleDataNode.addChild( DataNode<NdkModuleModel>( AndroidProjectKeys.NDK_MODEL, @@ -1741,7 +1746,7 @@ private fun mergeContentRoots(projectDataNode: DataNode<ProjectData>) { moduleNodes.forEach { moduleNode -> mergeModuleContentRoots(weightMap, moduleNode.node) - moduleNode.node.findAll(GradleSourceSetData.KEY).forEach { sourceSetNode -> + moduleNode.node.findAll(GradleSourceSetData.KEY).forEach { sourceSetNode -> mergeModuleContentRoots(weightMap, sourceSetNode.node) } } @@ -1844,10 +1849,11 @@ interface IntegrationTestEnvironment { */ fun getBaseTestPath(): @SystemDependent String } + /** * See implementing classes for usage examples. */ -interface GradleIntegrationTest: IntegrationTestEnvironment { +interface GradleIntegrationTest : IntegrationTestEnvironment { /** * The path to a test data directory relative to the workspace or `null` to use the legacy resolution. @@ -1889,7 +1895,8 @@ fun GradleIntegrationTest.prepareGradleProject( gradleVersion = agpVersion.gradleVersion, gradlePluginVersion = agpVersion.agpVersion, kotlinVersion = agpVersion.kotlinVersion, - ndkVersion = ndkVersion + ndkVersion = ndkVersion, + compileSdkVersion = agpVersion.compileSdk, ) } @@ -1907,7 +1914,8 @@ fun IntegrationTestEnvironment.prepareGradleProject( gradleVersion = agpVersion.gradleVersion, gradlePluginVersion = agpVersion.agpVersion, kotlinVersion = agpVersion.kotlinVersion, - ndkVersion = ndkVersion + ndkVersion = ndkVersion, + compileSdkVersion = agpVersion.compileSdk, ) } @@ -1921,7 +1929,8 @@ fun GradleIntegrationTest.prepareGradleProject( gradleVersion: String?, gradlePluginVersion: String?, kotlinVersion: String?, - ndkVersion: String? = null + ndkVersion: String? = null, + compileSdkVersion: String? = null, ): File { val testProjectAbsolutePath: File = resolveTestDataPath(testProjectPath) val additionalRepositories: Collection<File> = getAdditionalRepos() @@ -1933,7 +1942,8 @@ fun GradleIntegrationTest.prepareGradleProject( gradleVersion, gradlePluginVersion, kotlinVersion, - ndkVersion + ndkVersion, + compileSdkVersion ) } @@ -1944,7 +1954,8 @@ private fun IntegrationTestEnvironment.prepareGradleProject( gradleVersion: String?, gradlePluginVersion: String?, kotlinVersion: String?, - ndkVersion: String? + ndkVersion: String?, + compileSdkVersion: String? ): File { val projectPath = nameToPath(name) if (projectPath.exists()) throw IllegalArgumentException("Additional projects cannot be opened under the test name: $name") @@ -1957,6 +1968,7 @@ private fun IntegrationTestEnvironment.prepareGradleProject( projectRoot, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, + compileSdkVersion, *additionalRepositories.toTypedArray() ) }) @@ -2049,8 +2061,8 @@ private fun <T> openPreparedProject( @Suppress("UnstableApiUsage") if (options.disableKtsRelatedIndexing) { - ScriptingSupport.EPN.getPoint(project).unregisterExtensions({_, _ -> false}, false) - ScriptChangeListener.LISTENER.getPoint(project).unregisterExtensions({ _, _ -> false}, false) + ScriptingSupport.EPN.getPoint(project).unregisterExtensions({ _, _ -> false }, false) + ScriptChangeListener.LISTENER.getPoint(project).unregisterExtensions({ _, _ -> false }, false) } project.messageBus.connect(disposable).let { options.subscribe(it) } val outputHandler = options.outputHandler @@ -2084,7 +2096,8 @@ private fun <T> openPreparedProject( try { options.verifyOpened(project) return action(project) - } finally { + } + finally { runInEdtAndWait { PlatformTestUtil.saveProject(project, true) ProjectUtil.closeAndDispose(project) @@ -2187,7 +2200,8 @@ fun Project.requestSyncAndWait() { AndroidGradleTests.syncProject(this, GradleSyncInvoker.Request.testRequest()) if (ApplicationManager.getApplication().isDispatchThread) { AndroidGradleTests.waitForSourceFolderManagerToProcessUpdates(this) - } else { + } + else { runInEdtAndWait { AndroidGradleTests.waitForSourceFolderManagerToProcessUpdates(this) } diff --git a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTests.java b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTests.java index 7c4cccc42c1..d57cc525f33 100644 --- a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTests.java +++ b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTests.java @@ -109,7 +109,9 @@ public class AndroidGradleTests { private static final Pattern MAVEN_CENTRAL_REPOSITORY_PATTERN = Pattern.compile("mavenCentral\\(\\)"); private static final Pattern GRADLE_PLUGIN_PORTAL_REPOSITORY_PATTERN = Pattern.compile("gradlePluginPortal\\(\\)"); private static final Pattern MAVEN_REPOSITORY_PATTERN = Pattern.compile("maven \\{.*http.*\\}"); - /** Property name that allows adding multiple local repositories via JVM properties */ + /** + * Property name that allows adding multiple local repositories via JVM properties + */ private static final String ADDITIONAL_REPOSITORY_PROPERTY = "idea.test.gradle.additional.repositories"; private static final long DEFAULT_TIMEOUT_MILLIS = 1000; private static final String NDK_VERSION_PLACEHOLDER = "// ndkVersion \"{placeholder}\""; @@ -149,11 +151,11 @@ public class AndroidGradleTests { */ @Deprecated public static void updateGradleVersions(@NotNull File folderRootPath) throws IOException { - updateToolingVersionsAndPaths(folderRootPath, null, null, null, null); + updateToolingVersionsAndPaths(folderRootPath, null, null, null, null, null); } public static void updateToolingVersionsAndPaths(@NotNull File folderRootPath) throws IOException { - updateToolingVersionsAndPaths(folderRootPath, null, null, null, null); + updateToolingVersionsAndPaths(folderRootPath, null, null, null, null, null); } public static void updateToolingVersionsAndPaths(@NotNull File path, @@ -161,9 +163,11 @@ public class AndroidGradleTests { @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, @Nullable String ndkVersion, + @Nullable String compileSdkVersion, File... localRepos) throws IOException { - internalUpdateToolingVersionsAndPaths(path, true, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, localRepos); + internalUpdateToolingVersionsAndPaths(path, true, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, compileSdkVersion, + localRepos); } private static void internalUpdateToolingVersionsAndPaths(@NotNull File path, @@ -172,6 +176,7 @@ public class AndroidGradleTests { @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, @Nullable String ndkVersion, + @Nullable String compileSdkVersion, File... localRepos) throws IOException { String toolsBaseVersion; if (gradlePluginVersion != null) { @@ -179,7 +184,8 @@ public class AndroidGradleTests { int firstSeparator = gradlePluginVersion.indexOf('.'); int majorVersion = Integer.parseInt(gradlePluginVersion.substring(0, firstSeparator)) + 23; toolsBaseVersion = majorVersion + gradlePluginVersion.substring(firstSeparator); - } else { + } + else { toolsBaseVersion = Version.ANDROID_TOOLS_BASE_VERSION; } @@ -206,7 +212,8 @@ public class AndroidGradleTests { createGradleWrapper(path, gradleVersion != null ? gradleVersion : GRADLE_LATEST_VERSION); } for (File child : notNullize(path.listFiles())) { - internalUpdateToolingVersionsAndPaths(child, false, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, localRepos); + internalUpdateToolingVersionsAndPaths(child, false, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, + compileSdkVersion, localRepos); } } else if (fileAttributes.isRegularFile()) { @@ -229,8 +236,12 @@ public class AndroidGradleTests { contents = replaceRegexGroup(contents, "om.android.tools.lint:lint-api:(.+)['\"]", toolsBaseVersion); contents = replaceRegexGroup(contents, "om.android.tools.lint:lint-checks:(.+)['\"]", toolsBaseVersion); + + if (compileSdkVersion == null) { + compileSdkVersion = buildEnvironment.getCompileSdkVersion(); + } // App compat version needs to match compile SDK - String appCompatMainVersion = BuildEnvironment.getInstance().getCompileSdkVersion(); + String appCompatMainVersion = compileSdkVersion; // TODO(145548476): convert to androidx try { if (Integer.parseInt(appCompatMainVersion) < 29) { @@ -242,7 +253,7 @@ public class AndroidGradleTests { } contents = updateBuildToolsVersion(contents); - contents = updateCompileSdkVersion(contents); + contents = updateCompileSdkVersion(contents, compileSdkVersion); contents = updateTargetSdkVersion(contents); contents = updateMinSdkVersionOnlyIfGreaterThanExisting(contents, "minSdkVersion[ (](\\d+)"); contents = updateMinSdkVersionOnlyIfGreaterThanExisting(contents, "minSdk *= *(\\d+)"); @@ -266,6 +277,9 @@ public class AndroidGradleTests { if (kotlinVersion == null) { kotlinVersion = KOTLIN_VERSION_FOR_TESTS; } + if (compileSdkVersion == null) { + compileSdkVersion = buildEnvironment.getCompileSdkVersion(); + } String pluginVersion = gradlePluginVersion != null ? gradlePluginVersion : buildEnvironment.getGradlePluginVersion(); contents = replaceRegexGroup(contents, "classpath\\(['\"]com.android.tools.build:gradle:(.+)['\"]", pluginVersion); @@ -282,8 +296,8 @@ public class AndroidGradleTests { contents = replaceRegexGroup(contents, "\\(\"com.android.application\"\\) version \"(.+)\"", pluginVersion); contents = replaceRegexGroup(contents, "\\(\"com.android.library\"\\) version \"(.+)\"", pluginVersion); contents = replaceRegexGroup(contents, "buildToolsVersion\\(\"(.+)\"\\)", buildEnvironment.getBuildToolsVersion()); - contents = replaceRegexGroup(contents, "compileSdkVersion\\((.+)\\)", buildEnvironment.getCompileSdkVersion()); - contents = replaceRegexGroup(contents, "compileSdk *= *(\\d+)", buildEnvironment.getCompileSdkVersion()); + contents = replaceRegexGroup(contents, "compileSdkVersion\\((.+)\\)", compileSdkVersion); + contents = replaceRegexGroup(contents, "compileSdk *= *(\\d+)", compileSdkVersion); contents = replaceRegexGroup(contents, "targetSdkVersion\\((.+)\\)", buildEnvironment.getTargetSdkVersion()); contents = replaceRegexGroup(contents, "targetSdk *= *(\\d+)", buildEnvironment.getTargetSdkVersion()); contents = updateMinSdkVersionOnlyIfGreaterThanExisting(contents, "minSdkVersion[ (](\\d+)"); @@ -307,9 +321,9 @@ public class AndroidGradleTests { } @NotNull - public static String updateCompileSdkVersion(@NotNull String contents) { - contents = replaceRegexGroup(contents, "compileSdkVersion[ (]([0-9]+)", BuildEnvironment.getInstance().getCompileSdkVersion()); - contents = replaceRegexGroup(contents, "compileSdk *[(=]? *([0-9]+)", BuildEnvironment.getInstance().getCompileSdkVersion()); + public static String updateCompileSdkVersion(@NotNull String contents, @NotNull String compileSdkVersion) { + contents = replaceRegexGroup(contents, "compileSdkVersion[ (]([0-9]+)", compileSdkVersion); + contents = replaceRegexGroup(contents, "compileSdk *[(=]? *([0-9]+)", compileSdkVersion); return contents; } @@ -573,7 +587,8 @@ public class AndroidGradleTests { Sdk currentJdk = ideSdks.getJdk(); TestCase.assertNotNull(currentJdk); - TestCase.assertTrue("JDK 8 is required. Found: " + currentJdk.getHomePath(), IdeSdks.getInstance().isJdkCompatible(currentJdk, JDK_1_8)); + TestCase.assertTrue("JDK 8 is required. Found: " + currentJdk.getHomePath(), + IdeSdks.getInstance().isJdkCompatible(currentJdk, JDK_1_8)); // IntelliJ uses project jdk for gradle import by default, see GradleProjectSettings.myGradleJvm // Android Studio overrides GradleInstallationManager.getGradleJdk() using AndroidStudioGradleInstallationManager @@ -675,10 +690,11 @@ public class AndroidGradleTests { @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, @Nullable String ndkVersion, + @Nullable String compileSdkVersion, File... localRepos) throws IOException { preCreateDotGradle(projectRoot); // Update dependencies to latest, and possibly repository URL too if android.mavenRepoUrl is set - updateToolingVersionsAndPaths(projectRoot, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, localRepos); + updateToolingVersionsAndPaths(projectRoot, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion, compileSdkVersion, localRepos); } /** diff --git a/android-uitests/testSrc/com/android/tools/idea/tests/gui/newpsd/PsdGuiTestRule.kt b/android-uitests/testSrc/com/android/tools/idea/tests/gui/newpsd/PsdGuiTestRule.kt index 405a2641fef..195332f4c63 100644 --- a/android-uitests/testSrc/com/android/tools/idea/tests/gui/newpsd/PsdGuiTestRule.kt +++ b/android-uitests/testSrc/com/android/tools/idea/tests/gui/newpsd/PsdGuiTestRule.kt @@ -22,6 +22,6 @@ import java.io.File class PsdGuiTestRule : GuiTestRule() { override fun updateGradleVersions(projectPath: File) { val testRepositoryPath = getMasterProjectDirPath("psdSampleRepo") - AndroidGradleTests.updateToolingVersionsAndPaths(projectPath, null, null, null, null, testRepositoryPath) + AndroidGradleTests.updateToolingVersionsAndPaths(projectPath, null, null, null, null, null, testRepositoryPath) } } diff --git a/android/testSrc/com/android/tools/idea/gradle/project/sync/GradleSyncIntegrationTest.java b/android/testSrc/com/android/tools/idea/gradle/project/sync/GradleSyncIntegrationTest.java index 87792721198..26025b6ffa4 100644 --- a/android/testSrc/com/android/tools/idea/gradle/project/sync/GradleSyncIntegrationTest.java +++ b/android/testSrc/com/android/tools/idea/gradle/project/sync/GradleSyncIntegrationTest.java @@ -329,7 +329,7 @@ public final class GradleSyncIntegrationTest extends GradleSyncIntegrationTestCa GradleSyncMessagesStub syncMessages = GradleSyncMessagesStub.replaceSyncMessagesService(project); // DEPENDENT_MODULES project has two modules, app and lib, app module has dependency on lib module. - prepareProjectForImport(DEPENDENT_MODULES, null, null, null, null); + prepareProjectForImport(DEPENDENT_MODULES, null, null, null, null, null); // Define new buildType qa in app module. // This causes sync issues, because app depends on lib module, but lib module doesn't have buildType qa. File appBuildFile = getBuildFilePath("app"); @@ -747,7 +747,7 @@ public final class GradleSyncIntegrationTest extends GradleSyncIntegrationTestCa } public void testUnresolvedDependency() throws Exception { - prepareProjectForImport(SIMPLE_APPLICATION_UNRESOLVED_DEPENDENCY, null, null, null, null); + prepareProjectForImport(SIMPLE_APPLICATION_UNRESOLVED_DEPENDENCY, null, null, null, null, null); GradleSyncMessagesStub syncMessages = GradleSyncMessagesStub.replaceSyncMessagesService(getProject()); Project project = getProject(); diff --git a/android/testSrc/com/android/tools/idea/gradle/project/sync/perf/GradleSyncPerfTest.java b/android/testSrc/com/android/tools/idea/gradle/project/sync/perf/GradleSyncPerfTest.java index 29992e050f4..83e666bbd51 100644 --- a/android/testSrc/com/android/tools/idea/gradle/project/sync/perf/GradleSyncPerfTest.java +++ b/android/testSrc/com/android/tools/idea/gradle/project/sync/perf/GradleSyncPerfTest.java @@ -117,6 +117,7 @@ public class GradleSyncPerfTest extends AndroidGradleTestCase { @Nullable String gradlePluginVersion, @Nullable String kotlinVersion, @Nullable String ndkVersion, + @Nullable String compileSdkVersion, File... localRepos) throws IOException { // Override settings just for tests (e.g. sdk.dir) diff --git a/android/testSrc/com/android/tools/idea/gradle/structure/model/PsModuleCollectionTest.kt b/android/testSrc/com/android/tools/idea/gradle/structure/model/PsModuleCollectionTest.kt index abc6aa569bd..5249468b273 100644 --- a/android/testSrc/com/android/tools/idea/gradle/structure/model/PsModuleCollectionTest.kt +++ b/android/testSrc/com/android/tools/idea/gradle/structure/model/PsModuleCollectionTest.kt @@ -44,8 +44,9 @@ class PsModuleCollectionTest : DependencyTestCase() { graldePluginVersion: String?, kotlinVersion: String?, ndkVersion: String?, + compileSdk: String?, vararg localRepos: File) { - AndroidGradleTests.defaultPatchPreparedProject(projectRoot, gradleVersion, graldePluginVersion, kotlinVersion, ndkVersion, *localRepos) + AndroidGradleTests.defaultPatchPreparedProject(projectRoot, gradleVersion, graldePluginVersion, kotlinVersion, ndkVersion, compileSdk, *localRepos) synchronizeTempDirVfs(project.baseDir) patchProject?.run { ApplicationManager.getApplication().runWriteAction { diff --git a/compose-designer/testSrc/com/android/tools/idea/compose/gradle/BuildTest.kt b/compose-designer/testSrc/com/android/tools/idea/compose/gradle/BuildTest.kt index 0350389ceb2..eee57d60ba7 100644 --- a/compose-designer/testSrc/com/android/tools/idea/compose/gradle/BuildTest.kt +++ b/compose-designer/testSrc/com/android/tools/idea/compose/gradle/BuildTest.kt @@ -99,7 +99,7 @@ class BuildTest { val simpleComposableAppPath = projectRule.resolveTestDataPath(SIMPLE_COMPOSE_PROJECT_PATH) val destination = File(projectRoot, "SimpleComposeApplication") FileUtil.copyDir(simpleComposableAppPath, destination) - defaultPatchPreparedProject(File(projectRule.project.basePath!!), null, null, DEFAULT_KOTLIN_VERSION, null, *listOf<File>().toTypedArray()) + defaultPatchPreparedProject(File(projectRule.project.basePath!!), null, null, DEFAULT_KOTLIN_VERSION, null, null, *listOf<File>().toTypedArray()) }) val project = projectRule.project val activityFile = VfsUtil.findRelativeFile("SimpleComposeApplication/${SimpleComposeAppPaths.APP_MAIN_ACTIVITY.path}", diff --git a/old-agp-tests/BUILD b/old-agp-tests/BUILD index ba04d77c0ce..0f4007083d6 100644 --- a/old-agp-tests/BUILD +++ b/old-agp-tests/BUILD @@ -26,7 +26,6 @@ iml_module( "//prebuilts/studio/sdk:ndk", "//prebuilts/studio/sdk:platform-tools", "//prebuilts/studio/sdk:platforms/android-28", - "//prebuilts/studio/sdk:platforms/latest", "//prebuilts/studio/sdk:platforms/latest-preview", "//prebuilts/studio/sdk:sources", "//prebuilts/tools/common/m2:org.jetbrains.kotlin.kotlin-gradle-plugin.1.5.21", diff --git a/old-agp-tests/agp_versions.bzl b/old-agp-tests/agp_versions.bzl index 572e5d3a07b..18b98eb6a3e 100644 --- a/old-agp-tests/agp_versions.bzl +++ b/old-agp-tests/agp_versions.bzl @@ -13,7 +13,6 @@ COMMON_DATA = [ "//prebuilts/studio/sdk:licenses", "//prebuilts/studio/sdk:ndk", "//prebuilts/studio/sdk:platform-tools", - "//prebuilts/studio/sdk:platforms/latest", "//prebuilts/studio/sdk:sources", "//tools/adt/idea/android/annotations", "//tools/adt/idea/android/lib:sampleData", @@ -54,19 +53,47 @@ AGP_MAVEN_REPOS = { } AGP_DATA = { - AGP_3_1_4: ["//prebuilts/studio/sdk:build-tools/28.0.3"], - AGP_3_3_2: ["//prebuilts/studio/sdk:build-tools/28.0.3"], + AGP_3_1_4: [ + "//prebuilts/studio/sdk:build-tools/28.0.3", + "//prebuilts/studio/sdk:platforms/android-32", + ], + AGP_3_3_2: [ + "//prebuilts/studio/sdk:build-tools/28.0.3", + "//prebuilts/studio/sdk:platforms/android-32", + ], AGP_3_5: [ "//prebuilts/studio/sdk:build-tools/28.0.3", "//prebuilts/studio/sdk:platforms/android-28", + "//prebuilts/studio/sdk:platforms/android-32", + ], + AGP_4_0: [ + "//prebuilts/studio/sdk:build-tools/29.0.2", + "//prebuilts/studio/sdk:platforms/android-32", + ], + AGP_4_1: [ + "//prebuilts/studio/sdk:build-tools/29.0.2", + "//prebuilts/studio/sdk:platforms/android-32", + ], + AGP_4_2: [ + "//prebuilts/studio/sdk:build-tools/30.0.2", + "//prebuilts/studio/sdk:platforms/android-32", + ], + AGP_7_0: [ + "//prebuilts/studio/sdk:build-tools/30.0.2", + "//prebuilts/studio/sdk:platforms/android-32", + ], + AGP_7_1: [ + "//prebuilts/studio/sdk:build-tools/30.0.3", + "//prebuilts/studio/sdk:platforms/android-32", + ], + AGP_7_2: [ + "//prebuilts/studio/sdk:build-tools/30.0.3", + "//prebuilts/studio/sdk:platforms/latest", + ], + AGP_7_3: [ + "//prebuilts/studio/sdk:build-tools/30.0.3", + "//prebuilts/studio/sdk:platforms/latest", ], - AGP_4_0: ["//prebuilts/studio/sdk:build-tools/29.0.2"], - AGP_4_1: ["//prebuilts/studio/sdk:build-tools/29.0.2"], - AGP_4_2: ["//prebuilts/studio/sdk:build-tools/30.0.2"], - AGP_7_0: ["//prebuilts/studio/sdk:build-tools/30.0.2"], - AGP_7_1: ["//prebuilts/studio/sdk:build-tools/30.0.2"], - AGP_7_2: ["//prebuilts/studio/sdk:build-tools/30.0.2"], - AGP_7_3: ["//prebuilts/studio/sdk:build-tools/30.0.3"], } GRADLE_LATEST = "LATEST" diff --git a/project-system-gradle-upgrade/testSrc/com/android/tools/idea/gradle/project/upgrade/integration/ProjectsUpgradeTestBase.kt b/project-system-gradle-upgrade/testSrc/com/android/tools/idea/gradle/project/upgrade/integration/ProjectsUpgradeTestBase.kt index ff1a3c9b316..8b4b7c029f0 100644 --- a/project-system-gradle-upgrade/testSrc/com/android/tools/idea/gradle/project/upgrade/integration/ProjectsUpgradeTestBase.kt +++ b/project-system-gradle-upgrade/testSrc/com/android/tools/idea/gradle/project/upgrade/integration/ProjectsUpgradeTestBase.kt @@ -139,7 +139,7 @@ open class ProjectsUpgradeTestBase { FileUtils.copyFile(source, target) // Update dependencies to latest, and possibly repository URL too if android.mavenRepoUrl is set AndroidGradleTests.updateToolingVersionsAndPaths(target, testProject.gradleVersion(), testProject.agpVersion(), - testProject.kotlinVersion(), testProject.ndkVersion()) + testProject.kotlinVersion(), testProject.ndkVersion(), null) } } } @@ -157,7 +157,7 @@ open class ProjectsUpgradeTestBase { val baseGradleVersion = OldAgpSuite.GRADLE_VERSION?.takeIf { it != "LATEST" } AndroidGradleTests.defaultPatchPreparedProject( projectRoot, baseGradleVersion, expectedProjectState.agpVersion(), expectedProjectState.kotlinVersion(), - expectedProjectState.ndkVersion()) + expectedProjectState.ndkVersion(), null) // Patch base project with files expected to change. // Note: one could think that we only need to check these files instead of comparing all files recursively // but checking all project files allows us to make sure no unexpected changes were made to any other not listed files. diff --git a/project-system-gradle/testSrc/com/android/tools/idea/projectsystem/gradle/GradleModuleHierarchyProviderTest.kt b/project-system-gradle/testSrc/com/android/tools/idea/projectsystem/gradle/GradleModuleHierarchyProviderTest.kt index 8161077d1df..0876a2496fd 100644 --- a/project-system-gradle/testSrc/com/android/tools/idea/projectsystem/gradle/GradleModuleHierarchyProviderTest.kt +++ b/project-system-gradle/testSrc/com/android/tools/idea/projectsystem/gradle/GradleModuleHierarchyProviderTest.kt @@ -47,7 +47,7 @@ class GradleModuleHierarchyProviderTest : AndroidGradleTestCase() { fun testFirstSyncFailedStructure() { - prepareProjectForImport(TestProjectPaths.SIMPLE_APPLICATION, null, null, null, null) + prepareProjectForImport(TestProjectPaths.SIMPLE_APPLICATION, null, null, null, null, null) val buildFile = @Suppress("DEPRECATION") project.baseDir.findChild("build.gradle")!! runWriteAction { buildFile.setBinaryContent("*** this is an error ***".toByteArray()) diff --git a/uitest-framework/testSrc/com/android/tools/idea/tests/gui/framework/GuiTestRule.java b/uitest-framework/testSrc/com/android/tools/idea/tests/gui/framework/GuiTestRule.java index f45b59464e8..f9ca7d56195 100755 --- a/uitest-framework/testSrc/com/android/tools/idea/tests/gui/framework/GuiTestRule.java +++ b/uitest-framework/testSrc/com/android/tools/idea/tests/gui/framework/GuiTestRule.java @@ -504,7 +504,7 @@ public class GuiTestRule implements TestRule { } protected void updateGradleVersions(@NotNull File projectPath) throws IOException { - AndroidGradleTests.updateToolingVersionsAndPaths(projectPath, null, null, null, null); + AndroidGradleTests.updateToolingVersionsAndPaths(projectPath, null, null, null, null, null); } protected void updateGradleVersions(@NotNull File projectPath, @@ -513,7 +513,7 @@ public class GuiTestRule implements TestRule { @Nullable String kotlinVersion, @Nullable String ndkVersion ) throws IOException { - AndroidGradleTests.updateToolingVersionsAndPaths(projectPath, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion); + AndroidGradleTests.updateToolingVersionsAndPaths(projectPath, gradleVersion, gradlePluginVersion, kotlinVersion, ndkVersion,null); } @NotNull |