Skip to content

Commit 1b9cde3

Browse files
authored
feat: read gradle versions from local runtime first (#5646)
1 parent bceae0a commit 1b9cde3

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

lib/services/android-plugin-build-service.ts

+68
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { IFilesHashService } from "../definitions/files-hash-service";
3636
import { IInjector } from "../common/definitions/yok";
3737
import { injector } from "../common/yok";
3838
import * as _ from "lodash";
39+
import { resolvePackageJSONPath } from "@rigor789/resolve-package-path";
3940

4041
export 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

Comments
 (0)