/* Ċ Ġ* Ġ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 . integration . application Ċ Ċ import Ġcom . android . build . gradle . integration . common . fixture . Gradle Test Project Ċ import Ġcom . android . build . gradle . integration . common . fixture . app . Minimal Sub Project Ċ import Ġcom . android . build . gradle . integration . common . fixture . app . Multi Module Test Project Ċ import Ġcom . android . test utils . truth . Path Subject . assertThat Ċ import Ġcom . google . common . truth . Truth Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġjava . io . File Ċ import Ġkotlin . test . assertNotNull Ċ Ċ class ĠVariant Api Artifact Access Test Ġ{ ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġval Ġtmp Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġval Ġapp Ġ= ĠMin imal Sub Project . app (" com . example . test ") ĊĠĠĠĠĠĠĠ Ġ. appendTo Build (""" Ċ import Ġcom . android . build . api . artifact . Single Artifact Ċ Ċ abstract Ġclass ĠCustom Task Ġextends ĠDefault Task Ġ{ ĊĊĠĠĠ Ġ@ OutputFile ĊĠĠĠ Ġabstract ĠRegular File Property Ġget OutputFile () ĊĊĠĠĠ Ġ@ Input Files ĊĠĠĠ Ġabstract ĠDirectory Property Ġget A pk Location () ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġpublic Ġvoid Ġprovide Version Code () Ġ{ ĊĠĠĠĠĠ ĠSystem . out . println (" Custom ĠTask Ġinvoked , Ġwriting Ġat Ġ" Ġ+ Ġget OutputFile (). getAs File (). get (). getAbsolutePath ()) ĊĠĠĠĠĠ ĠFile Writer Ġfw Ġ= Ġnew ĠFile Writer ( getOutput File (). getAs File (). get ()) ĊĠĠĠĠĠ Ġapk Location . as File . get (). list Files (). each Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( file . getName (). endsWith (". apk ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfw . write ( file . getAbsolutePath ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfw . write () ĊĠĠĠĠĠ Ġfw . close () ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ android Components Ġ{ ĊĠĠĠ Ġon Variants ( selector (). all (), Ġ{ ĊĠĠĠĠĠĠĠ ĠTask Provider Ġcustom Task Provider Ġ= Ġtasks . register ( name Ġ+ Ġ" Custom Task ", ĠCustom Task . class ) ĊĠĠĠĠĠĠĠ Ġcustom Task Provider . configure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . get A pk Location (). set ( artifacts . get ( Single Artifact . AP K . INSTANCE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider < Directory > Ġoutput Dir Ġ= Ġget Project (). get Layout (). get Build Directory () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . getOutput File (). set ( output Dir . file ( name Ġ+ Ġ"/ out . txt ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } ĊĠĠĠ Ġ""" . trim Indent ()) ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġval Ġproject Ġ= ĠGradle Test Project . builder () ĊĠĠĠĠĠĠĠ Ġ. from Test App ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMulti Module Test Project . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sub project (": app ", Ġapp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ). create () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġthat Ġexercise Ġthe Ġ[ artifacts . get ()] ĠAPI Ġto Ġwire Ġa Ġ[ Task ] Ġthat Ġwill Ġconsume Ġthe ĊĠĠĠĠ Ġ* ĠArtifact Type . AP K Ġand Ġlist Ġthe Ġfiles Ġinto Ġan Ġoutput Ġtext Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlist A pk () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( project ) ĊĠĠĠĠĠĠĠ Ġproject . execute (" clean ", Ġ" debug Custom Task ") ĊĠĠĠĠĠĠĠ Ġval Ġout File Ġ= ĠFile ( project . project Dir , Ġ" app / build / debug Custom Task / out . txt ") ĊĠĠĠĠĠĠĠ Ġprintln (" out Ġis Ġ${ out File . absolute Path }") ĊĠĠĠĠĠĠĠ ĠassertThat ( out File ). exists () ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( out File . read Text ()). contains (" app - debug . apk ") ĊĠĠĠ Ġ} Ċ } Ċ