/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 2 0 ĠC rite o Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 . Ċ Ġ*/ Ċ Ċ import Ġcom . android . build . gradle . internal . dsl . Build Type Ċ import Ġgro ovy . util . Config Object Ċ import Ġgro ovy . util . Config Sl ur per Ċ import Ġorg . gradle . api . Java Version Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . compile . Java Compile Ċ import Ġorg . gradle . kotlin . dsl .* Ċ Ċ class ĠAndroid Module ( private Ġval Ġproject : ĠProject ) Ġ{ ĊĊĠ Ġprivate Ġval Ġconfig ByName Ġ= Ġmutable Map Of < String , ĠConfig Object >() ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġadd Build Config Field ( name : ĠString ) Ġ{ ĊĠĠĠ Ġadd Build Config Field ( name ) Ġ{ ĊĠĠĠĠĠ ĠgetConfig ( getName ())[ name ] Ġas ĠT ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġadd Build Config Field ( name : ĠString , Ġvalue : ĠT ) Ġ{ ĊĠĠĠ Ġadd Build Config Field ( name ) Ġ{ Ġvalue Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġadd Build Config Field ( name : ĠString , Ġgetter : ĠBuild Type . () Ġ-> ĠT ) Ġ{ ĊĠĠĠ Ġproject . android Base Ġ{ ĊĠĠĠĠĠ Ġbuild Types . all Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġvalue Ġ= Ġgetter ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġadd StringField ( name , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> Ġadd Primitive Field ( name , Ġ" boolean ", Ġvalue ) ĊĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġadd Primitive Field ( name , Ġ" int ", Ġvalue ) ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠBuild Type . add StringField ( name : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġbuild Config Field (" String ", Ġname , Ġ"\" $ value \" ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠBuild Type . add Primitive Field ( name : ĠString , Ġtype : ĠString , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠ Ġbuild Config Field ( type , Ġname , Ġ"$ value ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠgetConfig ( name : ĠString ): ĠConfig Object Ġ{ ĊĠĠĠ Ġreturn Ġconfig ByName . compute If Absent ( name ) Ġ{ ĊĠĠĠĠĠ Ġval Ġconfig File Ġ= Ġproject . file (" config . groovy ") ĊĠĠĠĠĠ Ġif Ġ( configFile . exists ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠConfig Sl ur per ( it ). parse ( configFile . to URI (). to URL ()) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Missing Ġconfig . groovy Ġfile ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠProject . android App Module ( application Id : ĠString , Ġconfigure : ĠAndroid Module . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠ Ġdefault Android Module () ĊĊĠ Ġandroid App Ġ{ ĊĠĠĠ Ġdefault Config . application Id Ġ= Ġapplication Id ĊĠ Ġ} ĊĊĠ Ġconfigure ( Android Module ( this )) Ċ } Ċ Ċ fun ĠProject . android Lib Module ( configure : ĠAndroid Module . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠ Ġdefault Android Module () ĊĊĠ Ġconfigure ( Android Module ( this ). apply Ġ{ ĊĠĠĠ Ġ// ĠVersion Ġstopped Ġto Ġbe Ġinjected Ġfor Ġlibrary ĊĠĠĠ Ġ// Ġhttps :// developer . android . com / studio / releases / gradle - plugin ? build system = nd k - build # version _ properties _ removed _ from _ build config _ class _ in _ library _ projects ĊĠĠĠ Ġadd Build Config Field (" VERSION _ NAME ", Ġsdk Version ()) ĊĠ Ġ}) Ċ } Ċ Ċ private Ġfun ĠProject . default Android Module () Ġ{ ĊĠ Ġandroid Base Ġ{ ĊĠĠĠ Ġcompile Sdk Version ( 3 1 ) ĊĊĠĠĠ Ġdefault Config Ġ{ ĊĠĠĠĠĠ Ġmin Sdk Version ( 1 6 ) ĊĠĠĠĠĠ Ġtarget Sdk Version ( 3 1 ) ĊĠĠĠĠĠ Ġversion Code Ġ= Ġ 1 ĊĠĠĠĠĠ Ġversion Name Ġ= Ġsdk Version () ĊĠĠĠĠĠ Ġtest Instrumentation Runner Ġ= Ġ" android x . test . runner . Android JUnit Runner " ĊĠĠĠĠĠ Ġtest Instrumentation Runner Argument (" disable Analytics ", Ġ" true ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠBuild Type . add Pro guard IfExists () Ġ{ ĊĠĠĠĠĠ Ġval Ġfilename Ġ= Ġ" pro guard - rules . pro " ĊĠĠĠĠĠ Ġif Ġ( file ( filename ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġpro guard Files ( getDefault Pro guard File (" pro guard - android . txt "), Ġfilename ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠBuild Type . add Consumer Pro guard IfExists () Ġ{ ĊĠĠĠĠĠ Ġval Ġfilename Ġ= Ġ" consumer - pro guard . txt " ĊĠĠĠĠĠ Ġif Ġ( file ( filename ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumer Pro guard File ( filename ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbuild Types Ġ{ ĊĠĠĠĠĠ Ġget ByName (" release ") Ġ{ ĊĠĠĠĠĠĠĠ Ġis Min ify Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Debug gable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġadd Pro guard IfExists () ĊĠĠĠĠĠĠĠ Ġadd Consumer Pro guard IfExists () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġdebug Ġby Ġgetting Ġ{ ĊĠĠĠĠĠĠĠ Ġis Min ify Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Debug gable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Test Coverage Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġadd Pro guard IfExists () ĊĠĠĠĠĠĠĠ Ġadd Consumer Pro guard IfExists () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcreate (" staging ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinit With ( debug ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompile Options Ġ{ ĊĠĠĠĠĠ Ġsource Compatibility Ġ= ĠJava Version . VERSION _ 1 _ 8 ĊĠĠĠĠĠ Ġtarget Compatibility Ġ= ĠJava Version . VERSION _ 1 _ 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlint Options Ġ{ ĊĠĠĠĠĠ Ġis Abort OnError Ġ= Ġtrue ĊĊĠĠĠĠĠ Ġfile (" lint . xml "). take If Ġ{ Ġit . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġlint Config Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtest Options Ġ{ ĊĠĠĠĠĠ Ġunit Tests . is Return Default Values Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġj aco co Ġ{ ĊĠĠĠĠĠ Ġversion Ġ= ĠDep s . J aco co . version ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpackaging Options Ġ{ ĊĠĠĠĠĠ Ġ// ĠBoth ĠAssert J Ġand ĠByte Bu ddy Ġ( via ĠMockito ) Ġbring Ġthis Ġand Ġthe Ġduplication Ġyields Ġan Ġerror ĊĠĠĠĠĠ Ġexclude (" META - INF / licenses / ASM ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġif Ġ( has Publishing ()) Ġ{ ĊĠĠĠ Ġpublishing Ġ{ ĊĠĠĠĠĠ Ġadd Dev Repository () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġde te kt ?. apply Ġ{ ĊĠĠĠ Ġtool Version Ġ= ĠDep s . Det ek t . version ĊĠĠĠ Ġconfig Ġ= Ġfiles ( rootDir . resolve (". de te kt / config . yml ")) ĊĠ Ġ} ĊĊĠ Ġgenerate Coverage Report For Jvm Tests () ĊĊĠ Ġj aco co ?. apply Ġ{ ĊĠĠĠ Ġtool Version Ġ= ĠDep s . J aco co . version ĊĠ Ġ} ĊĊĠ Ġafter Evaluate Ġ{ ĊĠĠĠ Ġtasks . with Type < Java Compile > Ġ{ ĊĠĠĠĠĠ Ġoptions . compiler Args . add ("- X lint : deprecation ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }