@@ -43,16 +43,19 @@ class UpdateDependencyCommand extends PackageLoopingCommand {
4343 argParser.addOption (_androidDependency,
4444 help: 'An Android dependency to update.' ,
4545 allowed: < String > [
46- _AndroidDepdencyType .gradle,
47- _AndroidDepdencyType .compileSdk,
48- _AndroidDepdencyType .compileSdkForExamples,
46+ _AndroidDependencyType .gradle,
47+ _AndroidDependencyType .androidGradlePlugin,
48+ _AndroidDependencyType .compileSdk,
49+ _AndroidDependencyType .compileSdkForExamples,
4950 ],
5051 allowedHelp: < String , String > {
51- _AndroidDepdencyType .gradle:
52+ _AndroidDependencyType .gradle:
5253 'Updates Gradle version used in plugin example apps.' ,
53- _AndroidDepdencyType .compileSdk:
54+ _AndroidDependencyType .androidGradlePlugin:
55+ 'Updates AGP version used in plugin example apps.' ,
56+ _AndroidDependencyType .compileSdk:
5457 'Updates compileSdk version used to compile plugins.' ,
55- _AndroidDepdencyType .compileSdkForExamples:
58+ _AndroidDependencyType .compileSdkForExamples:
5659 'Updates compileSdk version used to compile plugin examples.' ,
5760 });
5861 argParser.addOption (
@@ -137,22 +140,25 @@ ${response.httpResponse.body}
137140 if (version == null ) {
138141 printError ('A version must be provided to update this dependency.' );
139142 throw ToolExit (_exitNoTargetVersion);
140- } else if (_targetAndroidDependency == _AndroidDepdencyType .gradle) {
141- final RegExp validGradleVersionPattern =
143+ } else if (_targetAndroidDependency == _AndroidDependencyType .gradle ||
144+ _targetAndroidDependency ==
145+ _AndroidDependencyType .androidGradlePlugin) {
146+ final RegExp validGradleAGPVersionPattern =
142147 RegExp (r'^\d{1,2}\.\d{1,2}(?:\.\d)?$' );
143- final bool isValidGradleVersion =
144- validGradleVersionPattern .stringMatch (version) == version;
145- if (! isValidGradleVersion ) {
148+ final bool isValidGradleAGPVersion =
149+ validGradleAGPVersionPattern .stringMatch (version) == version;
150+ if (! isValidGradleAGPVersion ) {
146151 printError ('''
147152A version with a valid format (maximum 2-3 numbers separated by 1-2 periods) must be provided.
148153 1. The first number must have one or two digits
149154 2. The second number must have one or two digits
150155 3. If present, the third number must have a single digit''' );
151156 throw ToolExit (_exitInvalidTargetVersion);
152157 }
153- } else if (_targetAndroidDependency == _AndroidDepdencyType .compileSdk ||
158+ } else if (_targetAndroidDependency ==
159+ _AndroidDependencyType .compileSdk ||
154160 _targetAndroidDependency ==
155- _AndroidDepdencyType .compileSdkForExamples) {
161+ _AndroidDependencyType .compileSdkForExamples) {
156162 final RegExp validSdkVersion = RegExp (r'^\d{1,2}$' );
157163 final bool isValidSdkVersion =
158164 validSdkVersion.stringMatch (version) == version;
@@ -254,11 +260,13 @@ A version with a valid format (maximum 2-3 numbers separated by 1-2 periods) mus
254260 /// an Android dependency.
255261 Future <PackageResult > _runForAndroidDependency (
256262 RepositoryPackage package) async {
257- if (_targetAndroidDependency == _AndroidDepdencyType .compileSdk) {
263+ if (_targetAndroidDependency == _AndroidDependencyType .compileSdk) {
258264 return _runForCompileSdkVersion (package);
259- } else if (_targetAndroidDependency == _AndroidDepdencyType .gradle ||
265+ } else if (_targetAndroidDependency == _AndroidDependencyType .gradle ||
260266 _targetAndroidDependency ==
261- _AndroidDepdencyType .compileSdkForExamples) {
267+ _AndroidDependencyType .compileSdkForExamples ||
268+ _targetAndroidDependency ==
269+ _AndroidDependencyType .androidGradlePlugin) {
262270 return _runForAndroidDependencyOnExamples (package);
263271 }
264272
@@ -283,7 +291,7 @@ A version with a valid format (maximum 2-3 numbers separated by 1-2 periods) mus
283291 final RegExp dependencyVersionPattern;
284292 final String newDependencyVersionEntry;
285293
286- if (_targetAndroidDependency == _AndroidDepdencyType .gradle) {
294+ if (_targetAndroidDependency == _AndroidDependencyType .gradle) {
287295 if (androidDirectory
288296 .childDirectory ('gradle' )
289297 .childDirectory ('wrapper' )
@@ -311,12 +319,22 @@ A version with a valid format (maximum 2-3 numbers separated by 1-2 periods) mus
311319 newDependencyVersionEntry =
312320 'distributionUrl=https\\ ://services.gradle.org/distributions/gradle-$_targetVersion -all.zip' ;
313321 } else if (_targetAndroidDependency ==
314- _AndroidDepdencyType .compileSdkForExamples) {
322+ _AndroidDependencyType .compileSdkForExamples) {
315323 filesToUpdate.add (
316324 androidDirectory.childDirectory ('app' ).childFile ('build.gradle' ));
317325 dependencyVersionPattern = RegExp (
318326 r'(compileSdk|compileSdkVersion) (\d{1,2}|flutter.compileSdkVersion)' );
319327 newDependencyVersionEntry = 'compileSdk $_targetVersion ' ;
328+ } else if (_targetAndroidDependency ==
329+ _AndroidDependencyType .androidGradlePlugin) {
330+ if (androidDirectory.childFile ('settings.gradle' ).existsSync ()) {
331+ filesToUpdate.add (androidDirectory.childFile ('settings.gradle' ));
332+ }
333+ dependencyVersionPattern = RegExp (
334+ r'^\s*id\s+"com\.android\.application"\s+version\s+"(\d{1,2}\.\d{1,2}(?:\.\d)?)"\s+apply\s+false\s*$' ,
335+ multiLine: true );
336+ newDependencyVersionEntry =
337+ ' id "com.android.application" version "$_targetVersion " apply false' ;
320338 } else {
321339 printError (
322340 'Target Android dependency $_targetAndroidDependency is unrecognized.' );
@@ -504,8 +522,9 @@ class _PubDependencyInfo {
504522
505523enum _PubDependencyType { normal, dev }
506524
507- class _AndroidDepdencyType {
525+ class _AndroidDependencyType {
508526 static const String gradle = 'gradle' ;
527+ static const String androidGradlePlugin = 'androidGradlePlugin' ;
509528 static const String compileSdk = 'compileSdk' ;
510529 static const String compileSdkForExamples = 'compileSdkForExamples' ;
511530}
0 commit comments