@@ -36,6 +36,7 @@ import { IFilesHashService } from "../definitions/files-hash-service";
36
36
import { IInjector } from "../common/definitions/yok" ;
37
37
import { injector } from "../common/yok" ;
38
38
import * as _ from "lodash" ;
39
+ import { resolvePackageJSONPath } from "@rigor789/resolve-package-path" ;
39
40
40
41
export class AndroidPluginBuildService implements IAndroidPluginBuildService {
41
42
private get $platformsDataService ( ) : IPlatformsDataService {
@@ -486,13 +487,80 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
486
487
return runtimeVersion ;
487
488
}
488
489
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
+
489
550
private async getGradleVersions (
490
551
runtimeVersion : string
491
552
) : Promise < IRuntimeGradleVersions > {
492
553
let runtimeGradleVersions : {
493
554
versions : { gradle : string ; gradleAndroid : string } ;
494
555
} = null ;
495
556
557
+ const localVersionInfo = this . getLocalGradleVersions ( ) ;
558
+
559
+ if ( localVersionInfo ) {
560
+ return localVersionInfo ;
561
+ }
562
+
563
+ // fallback to reading from npm...
496
564
try {
497
565
let output = await this . $packageManager . view (
498
566
`${ SCOPED_ANDROID_RUNTIME_NAME } @${ runtimeVersion } ` ,
0 commit comments