@@ -294,26 +294,56 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
294294 }
295295
296296 private async getRuntimeGradleVersions ( projectDir : string ) : Promise < IRuntimeGradleVersions > {
297- const registryData = await this . $packageManager . getRegistryPackageData ( TNS_ANDROID_RUNTIME_NAME ) ;
298297 let runtimeGradleVersions : IRuntimeGradleVersions = null ;
299298 if ( projectDir ) {
300299 const projectRuntimeVersion = this . $platformService . getCurrentPlatformVersion (
301300 this . $devicePlatformsConstants . Android ,
302301 this . $projectDataService . getProjectData ( projectDir ) ) ;
303- runtimeGradleVersions = this . getGradleVersions ( registryData . versions [ projectRuntimeVersion ] ) ;
302+ runtimeGradleVersions = await this . getGradleVersions ( projectRuntimeVersion ) ;
304303 this . $logger . trace ( `Got gradle versions ${ JSON . stringify ( runtimeGradleVersions ) } from runtime v${ projectRuntimeVersion } ` ) ;
305304 }
306305
307306 if ( ! runtimeGradleVersions ) {
308- const latestRuntimeVersion = registryData [ "dist-tags" ] . latest ;
309- runtimeGradleVersions = this . getGradleVersions ( registryData . versions [ latestRuntimeVersion ] ) ;
307+ const latestRuntimeVersion = await this . getLatestRuntimeVersion ( ) ;
308+ runtimeGradleVersions = await this . getGradleVersions ( latestRuntimeVersion ) ;
310309 this . $logger . trace ( `Got gradle versions ${ JSON . stringify ( runtimeGradleVersions ) } from the latest runtime v${ latestRuntimeVersion } ` ) ;
311310 }
312311
313312 return runtimeGradleVersions || { } ;
314313 }
315314
316- private getGradleVersions ( packageData : { gradle : { version : string , android : string } } ) : IRuntimeGradleVersions {
315+ private async getLatestRuntimeVersion ( ) : Promise < string > {
316+ let runtimeVersion : string = null ;
317+
318+ try {
319+ const result = await this . $packageManager . view ( TNS_ANDROID_RUNTIME_NAME , { "dist-tags" : true } ) ;
320+ runtimeVersion = result . latest ;
321+ } catch ( err ) {
322+ this . $logger . trace ( `Error while getting latest android runtime version from view command: ${ err } ` ) ;
323+ const registryData = await this . $packageManager . getRegistryPackageData ( TNS_ANDROID_RUNTIME_NAME ) ;
324+ runtimeVersion = registryData [ "dist-tags" ] . latest ;
325+ }
326+
327+ return runtimeVersion ;
328+ }
329+
330+ private async getGradleVersions ( runtimeVersion : string ) : Promise < IRuntimeGradleVersions > {
331+ let runtimeGradleVersions : { gradle : { version : string , android : string } } = null ;
332+
333+ try {
334+ const output = await this . $packageManager . view ( `${ TNS_ANDROID_RUNTIME_NAME } @${ runtimeVersion } ` , { gradle : true } ) ;
335+ runtimeGradleVersions = { gradle : output } ;
336+ } catch ( err ) {
337+ this . $logger . trace ( `Error while getting gradle data for android runtime from view command: ${ err } ` ) ;
338+ const registryData = await this . $packageManager . getRegistryPackageData ( TNS_ANDROID_RUNTIME_NAME ) ;
339+ runtimeGradleVersions = registryData . versions [ runtimeVersion ] ;
340+ }
341+
342+ const result = this . getGradleVersionsCore ( runtimeGradleVersions ) ;
343+ return result ;
344+ }
345+
346+ private getGradleVersionsCore ( packageData : { gradle : { version : string , android : string } } ) : IRuntimeGradleVersions {
317347 const packageJsonGradle = packageData && packageData . gradle ;
318348 let runtimeVersions : IRuntimeGradleVersions = null ;
319349 if ( packageJsonGradle && ( packageJsonGradle . version || packageJsonGradle . android ) ) {
0 commit comments