@@ -36,6 +36,7 @@ import { IFilesHashService } from "../definitions/files-hash-service";
3636import { IInjector } from "../common/definitions/yok" ;
3737import { injector } from "../common/yok" ;
3838import * as _ from "lodash" ;
39+ import { resolvePackageJSONPath } from "@rigor789/resolve-package-path" ;
3940
4041export class AndroidPluginBuildService implements IAndroidPluginBuildService {
4142 private get $platformsDataService ( ) : IPlatformsDataService {
@@ -486,13 +487,80 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
486487 return runtimeVersion ;
487488 }
488489
490+ private getLocalGradleVersions ( ) : IRuntimeGradleVersions {
491+ // partial interface of the runtime package.json
492+ // including new 8.2+ format and legacy
493+ interface IRuntimePackageJSON {
494+ // 8.2+
495+ version_info ?: {
496+ gradle : string ;
497+ gradleAndroid : string ;
498+ } ;
499+ // legacy
500+ gradle ?: {
501+ version : string ;
502+ android : string ;
503+ } ;
504+ }
505+
506+ // try reading from installed runtime first before reading from the npm registry...
507+ const installedRuntimePackageJSONPath = resolvePackageJSONPath (
508+ SCOPED_ANDROID_RUNTIME_NAME ,
509+ {
510+ paths : [ this . $projectData . projectDir ] ,
511+ }
512+ ) ;
513+
514+ if ( ! installedRuntimePackageJSONPath ) {
515+ return null ;
516+ }
517+
518+ const installedRuntimePackageJSON : IRuntimePackageJSON = this . $fs . readJson (
519+ installedRuntimePackageJSONPath
520+ ) ;
521+
522+ if ( ! installedRuntimePackageJSON ) {
523+ return null ;
524+ }
525+
526+ if ( installedRuntimePackageJSON . version_info ) {
527+ const {
528+ gradle,
529+ gradleAndroid,
530+ } = installedRuntimePackageJSON . version_info ;
531+
532+ return {
533+ gradleVersion : gradle ,
534+ gradleAndroidPluginVersion : gradleAndroid ,
535+ } ;
536+ }
537+
538+ if ( installedRuntimePackageJSON . gradle ) {
539+ const { version, android } = installedRuntimePackageJSON . gradle ;
540+
541+ return {
542+ gradleVersion : version ,
543+ gradleAndroidPluginVersion : android ,
544+ } ;
545+ }
546+
547+ return null ;
548+ }
549+
489550 private async getGradleVersions (
490551 runtimeVersion : string
491552 ) : Promise < IRuntimeGradleVersions > {
492553 let runtimeGradleVersions : {
493554 versions : { gradle : string ; gradleAndroid : string } ;
494555 } = null ;
495556
557+ const localVersionInfo = this . getLocalGradleVersions ( ) ;
558+
559+ if ( localVersionInfo ) {
560+ return localVersionInfo ;
561+ }
562+
563+ // fallback to reading from npm...
496564 try {
497565 let output = await this . $packageManager . view (
498566 `${ SCOPED_ANDROID_RUNTIME_NAME } @${ runtimeVersion } ` ,
0 commit comments