/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . android . build . gradle . internal Ċ Ċ import Ġcom . android . Version Ċ import Ġcom . android . builder . core . Tools Revision Utils Ċ import Ġcom . android . builder . errors . Issue Reporter Ċ import Ġcom . android . io . C ancellable File Io Ċ import Ġcom . android . repository . Revision Ċ import Ġcom . android . repository . api . Console Progress Indicator Ċ import Ġcom . android . repository . api . Local Package Ċ import Ġcom . android . repository . api . Repository Ċ import Ġcom . android . repository . impl . meta . Schema Module Util Ċ import Ġcom . android . sdk lib . Android Target Hash . get Platform Hash String Ċ import Ġcom . android . sdk lib . Android Version Ċ import Ġcom . android . sdk lib . Build Tool Info Ċ import Ġcom . android . sdk lib . Optional Library Ċ import Ġcom . android . sdk lib . repository . Android Sdk Handler Ċ import Ġcom . android . sdk lib . repository . meta . Details Types Ċ import Ġcom . android . sdk lib . repository . targets . Platform Target Ċ import Ġcom . google . common . annotations . Visible ForTesting Ċ import Ġcom . google . common . base . Splitter Ċ import Ġcom . google . common . collect . ImmutableList Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠTry Ġto Ġload Ġthe ĠBuild Tool Ġfrom Ġ{@ code Ġ${ sdk Directory }/ build - tools /${ revision }}. Ċ Ġ*/ Ċ fun Ġbuild Build Tools ( sdk Directory : ĠFile , Ġrevision : ĠRevision ): ĠBuild Tool Info ? Ġ{ ĊĠĠĠ Ġval Ġbuild Tools Path Ġ= ĠDetails Types . get Build Tools Path ( revision ). replace (' ;', Ġ'/') ĊĠĠĠ Ġval Ġbuild Tools Xml Ġ= Ġsdk Directory . resolve ( build Tools Path ). resolve (" package . xml ") ĊĠĠĠ Ġval Ġbuild Tools Package Ġ= Ġparse Package ( build Tools Xml ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ// ĠBuild Tool Info Ġis Ġche ap Ġto Ġbuild Ġand Ġverify , Ġso Ġwe Ġcan Ġkeep Ġusing Ġit . ĊĠĠĠ Ġval Ġbuild Tool Info Ġ= ĠBuild Tool Info . from Local Package ( build Tools Package ) ĊĠĠĠ Ġif Ġ(! build Tool Info . isValid ( null )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġbuild Ġtools Ġwe Ġloaded Ġis Ġmissing Ġsome Ġexpected Ġcomponents . ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! build Tool Info . revision . equals ( revision )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġpath Ġwe Ġgues sed Ġcontained Ġa Ġbuild - tool Ġbut Ġit Ġhad Ġa Ġdifferent Ġthan Ġthe Ġrequested Ġone . ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbuild Tool Info Ċ } Ċ Ċ /** Ċ Ġ* ĠLoad Ġand Ġparse Ġa Ġ{@ link ĠLocal Package } Ġ(' package . xml ') Ġfile Ġfrom Ġthe Ġdisk . Ċ Ġ*/ Ċ fun Ġparse Package ( package Xml : ĠFile ): ĠLocal Package ? Ġ{ ĊĠĠĠ Ġif Ġ(! package Xml . exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġprogress Ġ= ĠConsole Progress Indicator () ĊĠĠĠ Ġlateinit Ġvar Ġrepo : ĠRepository ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparsed Object Ġ= ĠSchema Module Util . un marshal ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( package Xml ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Sdk Handler . getAll Modules (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġrepo Ġ= Ġparsed Object Ġas ĠRepository ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġshouldn 't Ġever Ġhappen ĊĠĠĠĠĠĠĠ Ġprogress . log Error (" Error Ġparsing Ġ$ package Xml .", Ġe ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrepo . local Package ?. set Installed Path ( package Xml . to Path (). parent ) ĊĠĠĠ Ġreturn Ġrepo . local Package Ċ } Ċ Ċ // ĠAdditional Ġlibraries Ġalways Ġcomes Ġfrom Ġaddon Ġtargets . Ċ /** Ċ Ġ* ĠReturn Ġthe Ġadditional Ġlibraries Ġcollection Ġf ron Ġ{@ code Ġlocal Package }. Ċ Ġ* Ċ Ġ* Ġ< p > These Ġare Ġonly Ġpresent Ġif Ġthe ĠLocal Package Ġrepresents Ġa ĠAdd On Ġplatform . ĠOtherwise Ġreturns Ġan Ċ Ġ* Ġempty Ġlist . Ċ Ġ*/ Ċ fun Ġparse Additional Libraries ( local Package : ĠLocal Package ): ĠList < Optional Library > Ġ{ ĊĠĠĠ Ġif Ġ( local Package . type Details Ġ! is ĠDetails Types . Addon Details Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠImmutableList . of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdetails Ġ= Ġlocal Package . type Details Ġas ĠDetails Types . Addon Details Type ĊĊĠĠĠ Ġ// ĠLooks Ġstrange , Ġbut Ġget Library Ġinside Ġget Libraries Ġreturns Ġa Ġlist Ġof Ġlibraries ... ĊĠĠĠ Ġreturn Ġdetails . libraries ?. let Ġ{ Ġlibraries Ġ-> ĊĠĠĠĠĠĠĠ Ġlibraries . library ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . local Jar Path Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġit . set Package Path ( local Package . location ) Ġ} ĊĠĠĠ Ġ} Ġ?: Ġempty List () Ċ } Ċ Ċ // ĠOptional Ġlibraries Ġalways Ġcomes Ġfrom Ġbase / platform Ġtargets . Ċ /** Ċ Ġ* ĠLoad Ġthe Ġoptional Ġlibraries Ġfor Ġ{@ code Ġlocal Package }. Ċ Ġ* Ċ Ġ* Ġ< p > If Ġ{@ code Ġlocal Package } Ġis Ġa ĠPlatform , Ġthen Ġthe Ġlist Ġof Ġoptional Ġpackages Ġis Ġlocated Ġin Ġthe Ċ Ġ* Ġ{@ code Ġoptional / optional . json } Ġfile Ġunder Ġit , Ġlike Ġ$ SDK / platforms / android - 2 8 / optional / ... Ċ Ġ*/ Ċ fun Ġparse Optional Libraries ( local Package : ĠLocal Package ): ĠList < Optional Library > Ġ{ ĊĠĠĠ Ġval Ġoptional Json Ġ= Ġlocal Package . location . resolve (" optional / optional . json ") ĊĠĠĠ Ġif Ġ( C ancellable File Io . is Regular File ( optional Json )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPlatform Target . get Lib s FromJson ( optional Json ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġempty List () Ċ } Ċ Ċ fun Ġwarn If Compile Sdk Too New ( version : ĠAndroid Version , Ġissue Reporter : ĠIssue Reporter , Ġsuppress Warning If Too New For Versions : ĠString ?) Ġ{ ĊĠĠĠ Ġwarn If Compile Sdk Too New ( ĊĠĠĠĠĠĠĠ Ġversion Ġ= Ġversion , ĊĠĠĠĠĠĠĠ Ġissue Reporter Ġ= Ġissue Reporter , ĊĠĠĠĠĠĠĠ Ġmax Version Ġ= ĠTools Revision Utils . MAX _ RE COMM ENDED _ COMPILE _ SDK _ VERSION , ĊĠĠĠĠĠĠĠ Ġandroid Gradle Plugin Version Ġ= ĠVersion . ANDROID _ GRAD LE _ PLUGIN _ VERSION , ĊĠĠĠĠĠĠĠ Ġsuppress Warning If Too New For Versions Ġ= Ġsuppress Warning If Too New For Versions , ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Visible ForTesting Ċ internal Ġfun Ġwarn If Compile Sdk Too New ( ĊĠĠĠ Ġversion : ĠAndroid Version , ĊĠĠĠ Ġissue Reporter : ĠIssue Reporter , ĊĠĠĠ Ġmax Version : ĠAndroid Version , ĊĠĠĠ Ġandroid Gradle Plugin Version : ĠString , ĊĠĠĠ Ġsuppress Warning If Too New For Versions : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ( version Ġ<= Ġmax Version ) Ġreturn ĊĠĠĠ Ġval Ġsuppress Name Ġ= Ġversion . api String ĊĠĠĠ Ġval Ġsuppress Set Ġ= Ġsuppress Warning If Too New For Versions ?. split To Sequence (",") ?. filter ( String :: isNotEmpty )?. toSet () Ġ?: Ġset Of () ĊĠĠĠ Ġif Ġ( suppress Set . contains ( suppress Name )) Ġreturn ĊĠĠĠ Ġissue Reporter . report Warning ( ĊĠĠĠĠĠĠĠ ĠIssue Reporter . Type . COMPILE _ SDK _ VERSION _ TOO _ HIGH , ĊĠĠĠĠĠĠĠ Ġ" We Ġrecommend Ġusing Ġa Ġnewer ĠAndroid ĠGradle Ġplugin Ġto Ġuse Ġ${ version . as Dsl () }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This ĠAndroid ĠGradle Ġplugin Ġ($ android Gradle Plugin Version ) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" was Ġtested Ġup Ġto Ġ${ Android Version ( max Version . api Level ). as Dsl () }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( max Version . is Preview ) Ġ" Ġ( and Ġ${ max Version . as Dsl () })" Ġelse Ġ"") Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġwarning Ġcan Ġbe Ġsupp ressed Ġby Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( suppress Warning If Too New For Versions . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" adding \ n ĠĠĠ Ġ${ com . android . build . gradle . options . String Option . SUP PRESS _ UNSUPPORTED _ COMPILE _ SDK . propertyName } =$ suppress Name " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" updating \ n ĠĠĠ Ġ${ com . android . build . gradle . options . String Option . SUP PRESS _ UNSUPPORTED _ COMPILE _ SDK . propertyName } =${ suppress Set . join ToString (", ")}, $ suppress Name " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to Ġthis Ġproject 's Ġgradle . properties \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuild Ġwill Ġcontinue , Ġbut Ġyou Ġare Ġstrongly Ġencour aged Ġto Ġupdate Ġyour Ġproject Ġto \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" use Ġa Ġnewer ĠAndroid ĠGradle ĠPlugin Ġthat Ġhas Ġbeen Ġtested Ġwith Ġ${ version . as Dsl () }", ĊĠĠĠĠĠĠĠ Ġget Platform Hash String ( max Version ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun ĠAndroid Version . as Dsl (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Preview ) Ġ""" compile Sdk Preview Ġ= Ġ"$ cod ename """" Ġelse Ġ" compile Sdk Ġ= Ġ$ api Level " Ċ } Ċ