/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 Ġ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 . tasks Ċ Ċ import Ġcom . android . build . gradle . internal . scope . Build Artifacts Holder Ċ import Ġcom . android . build . gradle . internal . scope . Internal Artifact Type Ċ import Ġcom . android . build . gradle . internal . scope . Variant Scope Ċ import Ġcom . android . build . gradle . internal . tasks . factory . Variant Task Creation Action Ċ import Ġcom . android . build . gradle . options . Boolean Option Ċ import Ġcom . android . build . gradle . options . String Option Ċ import Ġcom . android . bundle . Devices . Device Spec Ċ import Ġcom . android . tools . build . bundle tool . commands . Extract A pk s Command Ċ import Ġcom . android . utils . FileUtils Ċ import Ġcom . google . protobuf . util . Json Format Ċ import Ġorg . gradle . api . file . Directory Property Ċ import Ġorg . gradle . api . file . Regular File Property Ċ import Ġorg . gradle . api . tasks . Input Ċ import Ġorg . gradle . api . tasks . Input File Ċ import Ġorg . gradle . api . tasks . Optional Ċ import Ġorg . gradle . api . tasks . Output Directory Ċ import Ġorg . gradle . api . tasks . Path Sensitive Ċ import Ġorg . gradle . api . tasks . Path Sensitivity Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġjava . io . File Ċ import Ġjava . io . Serializable Ċ import Ġjava . nio . file . Files Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠTask Ġthat Ġextract ĠA PK s Ġfrom Ġthe Ġapk Ġzip Ġ( created Ġwith Ġ[ Bundle To A pk Task ] Ġinto Ġa Ġfolder . Ġa ĠDevice Ċ Ġ* Ġinfo Ġfile Ġindicate Ġwhich ĠA PK s Ġto Ġextract . ĠOnly ĠA PK s Ġfor Ġthat Ġparticular Ġdevice Ġare Ġextracted . Ċ Ġ*/ Ċ abstract Ġclass ĠExtract A pk s Task Ġ: ĠNon Incremental Task () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Task Name ( scope : ĠVariant Scope ) Ġ= Ġscope . get Task Name (" extract A pk s For ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Input File ĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠĠĠ Ġabstract Ġval Ġapk Set Archive : ĠRegular File Property ĊĊĠĠĠ Ġ@ get : Input File ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠĠĠ Ġvar Ġdevice Config : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ@ get : Output Directory ĊĠĠĠ Ġabstract Ġval Ġoutput Dir : ĠDirectory Property ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġextract Instant Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġfun Ġdo Task Action () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġget Worker Facade With Workers (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . submit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBundle Tool Runnable :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapk Set Archive . get (). as File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Config ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" Calling ĠExtract A pk Ġwith Ġno Ġdevice Ġconfig "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Dir . get (). as File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Instant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠParams ( ĊĠĠĠĠĠĠĠ Ġval Ġapk Set Archive : ĠFile , ĊĠĠĠĠĠĠĠ Ġval Ġdevice Config : ĠFile , ĊĠĠĠĠĠĠĠ Ġval Ġoutput Dir : ĠFile , ĊĠĠĠĠĠĠĠ Ġval Ġextract Instant : ĠBoolean ĊĠĠĠ Ġ) Ġ: ĠSerializable ĊĊĠĠĠ Ġprivate Ġclass ĠBundle Tool Runnable Ġ@ Inject Ġconstructor ( private Ġval Ġparams : ĠParams ): ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . clean Output Dir ( params . output Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠDevice Spec . Builder Ġ= ĠDevice Spec . newBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . new BufferedReader ( params . device Config . to Path (), ĠChar sets . UTF _ 8 ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Format . parser (). merge ( it , Ġbuilder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠExtract A pk s Command ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set A pk s Archive Path ( params . apk Set Archive . to Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Device Spec ( builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOutput Directory ( params . output Dir . to Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Instant ( params . extract Instant ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . build (). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCreation Action ( variant Scope : ĠVariant Scope ) Ġ: ĊĠĠĠĠĠĠĠ ĠVariant Task Creation Action < Extract A pk s Task >( variant Scope ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Task Name ( variant Scope ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠClass < Extract A pk s Task > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠExtract A pk s Task :: class . java ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Provider ( task Provider : ĠTask Provider < out ĠExtract A pk s Task >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . handle Provider ( task Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Scope . artifacts . pro duces Dir ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Artifact Type . EXTRACT ED _ AP KS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Artifacts Holder . Operation Type . INITIAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExtract A pk s Task :: output Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure ( task : ĠExtract A pk s Task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . configure ( task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Scope . artifacts . set Task Input To Final Product ( Internal Artifact Type . AP KS _ FROM _ B UNDLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . apk Set Archive ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Path Ġ= Ġvariant Scope . global Scope . project Options . get ( String Option . IDE _ AP K _ SELECT _ CONFIG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . device Config Ġ= ĠFile ( device Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . extract Instant Ġ= Ġvariant Scope . global Scope . project Options . get ( Boolean Option . IDE _ EXTRACT _ INST ANT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ