/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 2 Ġ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 . tasks Ċ Ċ import Ġcom . android . build . api . artifact . Single Artifact Ċ import Ġcom . android . build . api . variant . impl . Variant Output Impl Ċ import Ġcom . android . build . api . variant . impl . get Api String Ċ import Ġcom . android . build . gradle . internal . Logger Wrapper Ċ import Ġcom . android . build . gradle . internal . component . A pk Creation Config Ċ import Ġcom . android . build . gradle . internal . component . Dynamic Feature Creation Config Ċ import Ġcom . android . build . gradle . internal . dependency . Artifact Collection With Extra Artifact . Extra Component Identifier Ċ import Ġcom . android . build . gradle . internal . publishing . Android Artifacts Ċ import Ġcom . android . build . gradle . internal . publishing . Android Artifacts . Artifact Scope Ċ import Ġcom . android . build . gradle . internal . publishing . Android Artifacts . Cons umed Config Type Ċ import Ġcom . android . build . gradle . internal . scope . Internal Artifact Type Ċ import Ġcom . android . build . gradle . internal . scope . Internal Artifact Type . MAN IFEST _ MERGE _ REPORT Ċ import Ġcom . android . build . gradle . internal . scope . Internal Artifact Type . NAV IG ATION _ JSON Ċ import Ġcom . android . build . gradle . internal . tasks . factory . Variant Task Creation Action Ċ import Ġcom . android . build . gradle . internal . tasks . manifest . merge Manifest s Ċ import Ġcom . android . build . gradle . internal . utils . set Dis allow Changes Ċ import Ġcom . android . build . gradle . options . Boolean Option Ċ import Ġcom . android . build . gradle . tasks . Process Application Manifest . Creation Action . Manifest Provider Impl Ċ import Ġcom . android . builder . dex ing . Dex ing Type Ċ import Ġcom . android . man if mer ger . Manifest Mer ger 2 Ċ import Ġcom . android . man if mer ger . Manifest Mer ger 2 . Invoker Ċ import Ġcom . android . man if mer ger . Manifest Mer ger 2 . WE AR _ APP _ SUB _ MAN IFEST Ċ import Ġcom . android . man if mer ger . Manifest Provider Ċ import Ġcom . android . utils . FileUtils Ċ import Ġcom . google . common . base . Preconditions Ċ import Ġorg . gradle . api . Invalid UserData Exception Ċ import Ġorg . gradle . api . artifacts . Artifact Collection Ċ import Ġorg . gradle . api . artifacts . component . Module Component Identifier Ċ import Ġorg . gradle . api . artifacts . component . Project Component Identifier Ċ import Ġorg . gradle . api . artifacts . result . Resolved Artifact Result Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . file . Regular File Property Ċ import Ġorg . gradle . api . provider . List Property Ċ import Ġorg . gradle . api . provider . Map Property Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . provider . SetProperty Ċ import Ġorg . gradle . api . tasks . Cache able Task Ċ import Ġorg . gradle . api . tasks . Input Ċ import Ġorg . gradle . api . tasks . Input File Ċ import Ġorg . gradle . api . tasks . Input Files Ċ import Ġorg . gradle . api . tasks . Internal Ċ import Ġorg . gradle . api . tasks . Nested Ċ import Ġorg . gradle . api . tasks . Optional Ċ import Ġorg . gradle . api . tasks . OutputFile Ċ import Ġorg . gradle . api . tasks . Path Sensitive Ċ import Ġorg . gradle . api . tasks . Path Sensitivity Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġorg . gradle . internal . component . local . model . Opaque Component Artifact Identifier Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Unchecked IOException Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . Enum Set Ċ Ċ /** ĠA Ġtask Ġthat Ġprocesses Ġthe Ġmanifest Ġ Ġ*/ Ċ @ Cache able Task Ċ abstract Ġclass ĠProcess Application Manifest Ġ: ĠManifest Processor Task () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmanifest s : ĠArtifact Collection ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfeature Manifest s : ĠArtifact Collection ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠThe Ġmerged ĠManifest s Ġfiles Ġfolder . Ġ Ġ*/ ĊĠĠĠ Ġ@ get : OutputFile ĊĠĠĠ Ġabstract Ġval Ġmerged Manifest : ĠRegular File Property ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input Files ĊĠĠĠ Ġvar Ġdependency Feature Name Artifacts : ĠFile Collection ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input Files ĊĠĠĠ Ġabstract Ġval Ġmicro A pk Manifest : ĠRegular File Property ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġbase Module Debug gable : ĠProperty < Boolean > ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġpackage Override : ĠProperty < String > ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġ@ get : Input Files ĊĠĠĠ Ġabstract Ġval Ġmanifest Overlay s : ĠList Property < File > ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġmanifest Place holders : ĠMap Property < String , ĠAny > ĊĊĠĠĠ Ġprivate Ġvar Ġis Feature Split Variant Type Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġbuild TypeName : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġ@ get : Input Files ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġvar Ġnavigation Json s : ĠFile Collection ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdo Full Task Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( base Module Debug gable . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Debug gable Ġ= Ġoptional Features . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( Invoker . Feature . DEBUG G ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Module Debug gable . get () Ġ!= Ġis Debug gable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Dynamic ĠFeature Ġ'% 1 \$ s ' Ġ( build Ġtype Ġ'% 2 \$ s ') Ġ% 3 \$ s Ġdebug gable ,\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" and Ġthe Ġcorresponding Ġbuild Ġtype Ġin Ġthe Ġbase Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" application Ġ% 4 \$ s Ġdebug gable .\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Recommendation : Ġ\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠĠ Ġin Ġ Ġ% 5 \$ s \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠĠ Ġset Ġandroid . build Types .% 2 \$ s . debug gable Ġ= Ġ% 6 \$ s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Path . get (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild TypeName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isDebug gable ) Ġ" is " Ġelse Ġ" is Ġnot ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Module Debug gable . get ()) Ġ" is " Ġelse Ġ" is Ġnot ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Build File . get (). as File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Module Debug gable . get ()) Ġ" true " Ġelse Ġ" false " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid UserData Exception ( errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnav Json s Ġ= Ġnavigation Json s ?. files Ġ?: Ġset Of () ĊĊĠĠĠĠĠĠĠ Ġval Ġmerging Report Ġ= Ġmerge Manifest s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Manifest . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Overlay s . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Full Provider List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Json s , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Name . or Null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Override . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Output . get (). version Code . or Null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Output . get (). version Name . or Null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Sdk Version . or Null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Sdk Version . or Null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Sdk Version . or Null , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerged Manifest . get (). as File . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ/* Ġa apt Friendly Manifest OutputFile Ġ*/, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest Mer ger 2 . Merge Type . APPLICATION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Place holders . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptional Features . get (). plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf < Invoker . Feature >(). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! jni Lib s Use Legacy Pack aging . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( Invoker . Feature . DO _ NOT _ EXTRACT _ NATIVE _ LIBS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependency Feature Names , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport File . get (). as File , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger Wrapper . getLogger ( Process Application Manifest :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġoutput Merge Bl ame Contents ( mer ging Report , Ġmerge Bl ame File . get (). as File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġ@ get : Input File ĊĠĠĠ Ġabstract Ġval Ġmain Manifest : ĠProperty < File > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCompute Ġthe Ġfinal Ġlist Ġof Ġproviders Ġbased Ġon Ġthe Ġmanifest Ġfile Ġcollection Ġand Ġthe Ġother ĊĠĠĠĠ Ġ* Ġproviders . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġlist Ġof Ġproviders . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompute Full Provider List (): ĠList < Manifest Provider > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġartifacts Ġ= Ġmanifest s !!. artifacts ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= Ġmutable ListOf < Manifest Provider >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( artifact Ġin Ġartifacts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest Provider Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifact . file , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Artifact Name ( artifact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( micro A pk Manifest . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġnow Ġalways Ġpresent Ġif Ġembedding Ġis Ġenabled , Ġbut Ġit Ġdoesn 't Ġmean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanything Ġgot Ġembedded Ġso Ġthe Ġfile Ġmay Ġnot Ġrun Ġ( the Ġfile Ġpath Ġexists Ġand Ġis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturned Ġby Ġthe ĠFC Ġbut Ġthe Ġfile Ġdoesn 't Ġexist . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmicro Manifest Ġ= Ġmicro A pk Manifest . get (). as File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( micro Manifest . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest Provider Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmicro Manifest , ĠW EAR _ APP _ SUB _ MAN IFEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( feature Manifest s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . addAll ( compute Providers ( feature Manifest s !!. artifacts )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġproviders ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOnly Ġfeature Ġsplits Ġcan Ġhave Ġfeature Ġdependencies ĊĠĠĠ Ġprivate Ġval Ġdependency Feature Names : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! is Feature Split Variant Type ) Ġ{ Ġ// ĠOnly Ġfeature Ġsplits Ġcan Ġhave Ġfeature Ġdependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġdependency Feature Name Artifacts !!. files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( org . apache . commons . io . FileUtils . readFile ToString ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUn checked IOException (" Could Ġnot Ġload Ġfeature Ġdeclaration ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġapplication Id : ĠProperty < String > ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġvariant Type : ĠProperty < String ?> ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġmin Sdk Version : ĠProperty < String ?> ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġtarget Sdk Version : ĠProperty < String ?> ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġmax Sdk Version : ĠProperty < Int ?> ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġoptional Features : ĠSet Property < Invoker . Feature > ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġj ni Lib s Use Legacy Pack aging : ĠProperty < Boolean > ĊĊĠĠĠ Ġ@ Input Files ĊĠĠĠ Ġ@ Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġfun Ġget Manifest s (): ĠFile Collection Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmanifest s !!. artifact Files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Input Files ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġ@ Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġfun Ġget Feature Manifest s (): ĠFile Collection ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( feature Manifest s Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġfeature Manifest s !!. artifact Files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġfeature Name : ĠProperty < String > ĊĊĠĠĠ Ġ@ get : Internal (" only Ġfor Ġtask Ġexecution ") ĊĠĠĠ Ġabstract Ġval Ġproject Path : ĠProperty < String ?> ĊĊĠĠĠ Ġ@ get : Internal (" only Ġfor Ġtask Ġexecution ") ĊĠĠĠ Ġabstract Ġval Ġproject Build File : ĠRegular File Property ĊĊĠĠĠ Ġ@ get : Nested ĊĠĠĠ Ġabstract Ġval Ġvariant Output : ĠProperty < Variant Output Impl > ĊĊĠĠĠ Ġclass ĠCreation Action ( ĊĠĠĠĠĠĠĠ Ġcreation Config : ĠA pk Creation Config ĊĠĠĠ Ġ) Ġ: ĠVariant Task Creation Action < Process Application Manifest , ĠA pk Creation Config >( creation Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompute Task Name (" process ", Ġ" Main Manifest ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠClass < Process Application Manifest > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠProcess Application Manifest :: class . java ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpre Configure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Name : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . pre Configure ( task Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Type Ġ= Ġcreation Config . variant Type ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreconditions . check State (! variant Type . is Test Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartifacts Ġ= Ġcreation Config . artifacts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts . re publish ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Artifact Type . PACK AG ED _ MAN IFEST S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Artifact Type . MAN IFEST _ METADATA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Provider : ĠTask Provider < Process Application Manifest > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . handle Provider ( task Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartifacts Ġ= Ġcreation Config . artifacts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts . setInitial Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcess Application Manifest :: merged Manifest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( Single Artifact . MER GED _ MAN IFEST ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts . setInitial Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest Processor Task :: merge Bl ame File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Name (" manifest - mer ger - bl ame -" Ġ+ Ġcreation Config . base Name Ġ+ Ġ"- report . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( Internal Artifact Type . MAN IFEST _ MERGE _ BL AME _ FILE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts . setInitial Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcess Application Manifest :: report File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. at Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . join ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config . services . project Info . get Outputs Dir (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" logs " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Name (" manifest - mer ger -" Ġ+ Ġcreation Config . base Name Ġ+ Ġ"- report . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( MAN IFEST _ MERGE _ REPORT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠProcess Application Manifest ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . configure ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Sources Ġ= Ġcreation Config . variant Sources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġglobal Scope Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config . global Scope ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Type Ġ= Ġcreation Config . variant Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġcreation Config . services . project Info . getProject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġincludes Ġthe Ġdependent Ġlibraries . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . manifest s Ġ= Ġcreation Config ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. variant Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Artifact Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCon su med Config Type . RUNTIME _ CLAS SPATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Scope . ALL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Artifacts . Artifact Type . MAN IFEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoptional Ġmanifest Ġfiles Ġtoo . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . task Container . micro A pk Task Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcreation Config . embed s Micro App ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config . artifacts . set Task Input To Final Product ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Artifact Type . MICRO _ AP K _ MAN IFEST _ FILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . micro A pk Manifest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . application Id . set ( creation Config . application Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . application Id . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . variant Type . set ( creation Config . variant Type . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . variant Type . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . min Sdk Version . set Dis allow Changes ( creation Config . min Sdk Version . get Api String ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . target Sdk Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dis allow Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . target Sdk Version . api Level Ġ< Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcreation Config . target Sdk Version . get Api String () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . max Sdk Version . set Dis allow Changes ( creation Config . max Sdk Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . optional Features . set ( project . provider Ġ{ Ġget Optional Features ( creation Config ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . optional Features . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . jni Lib s Use Legacy Pack aging . set Dis allow Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config . packaging . jni Lib s . use Legacy Pack aging ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . variant Output . set Dis allow Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config . outputs . get Main Split () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġoptional Ġinputs Ġper Ġmodule Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variant Type . is Base Module ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . feature Manifest s Ġ= Ġcreation Config ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. variant Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Artifact Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCon su med Config Type . RE VERSE _ METADATA _ VALUES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Scope . PROJECT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Artifacts . Artifact Type . RE VERSE _ METADATA _ FEATURE _ MAN IFEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( variant Type . is Dynamic Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdf Creation Config Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config Ġas ĠDynamic Feature Creation Config ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . feature Name . set Dis allow Changes ( df Creation Config . feature Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . base Module Debug gable . set Dis allow Changes ( df Creation Config . base Module Debug gable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . dependency Feature Name Artifacts Ġ= Ġcreation Config ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. variant Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Artifact File Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCon su med Config Type . RUNTIME _ CLAS SPATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Scope . PROJECT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Artifacts . Artifact Type . FEATURE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! creation Config . services . project Info . getExtension (). a apt Options . namespaced ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . navigation Json s Ġ= Ġproject . files ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config . artifacts . get ( NAV IG ATION _ JSON ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. variant Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Artifact File Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCon su med Config Type . RUNTIME _ CLAS SPATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Scope . ALL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Artifacts . Artifact Type . NAV IG ATION _ JSON ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . package Override . set ( creation Config . application Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . package Override . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . manifest Place holders . set ( creation Config . manifest Place holders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . manifest Place holders . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . main Manifest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( project . provider ( variant Sources :: main Manifest FilePath )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . main Manifest . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . manifest Overlay s . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . project . provider ( variant Sources :: manifest Overlay s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . manifest Overlay s . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . is Feature Split Variant Type Ġ= Ġcreation Config . variant Type . is Dynamic Feature ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . build TypeName Ġ= Ġcreation Config . build Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . project Path . set Dis allow Changes ( task . project . path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . project Build File . set ( task . project . build File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . project Build File . dis allow Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġhere Ġin Ġthe Ġ" else " Ġblock Ġshould Ġbe Ġthe Ġcode Ġpath Ġfor Ġthe Ġname spaced Ġpipeline ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠImplementation Ġof ĠAndroid Bundle Ġthat Ġonly Ġcontains Ġa Ġmanifest . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġis Ġused Ġto Ġpass Ġto Ġthe Ġmer ger Ġmanifest Ġsnippet Ġthat Ġneeds Ġto Ġbe Ġadded Ġduring ĊĠĠĠĠĠĠĠĠ Ġ* Ġmerge . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġclass ĠManifest Provider Impl ( private Ġval Ġmanifest : ĠFile , Ġprivate Ġval Ġname : ĠString ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Manifest (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanifest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcompute Providers ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts : ĠSet < Resolved Artifact Result > ĊĠĠĠĠĠĠĠ Ġ): ĠList < Manifest Provider > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproviders : ĠMutable List < Manifest Provider > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( artifact Ġin Ġartifacts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest Provider Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifact . file , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Artifact Name ( artifact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproviders ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġput Ġsomewhere Ġelse ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Artifact Name ( artifact : ĠResolved Artifact Result ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( val Ġid Ġ= Ġartifact . id . component Identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProject Component Identifier Ġ-> Ġid . project Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠModule Component Identifier Ġ-> Ġ"${ id . group }:${ id . module }:${ id . version }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO pa que Component Artifact Identifier Ġ-> Ġid . displayName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExtra Component Identifier Ġ-> Ġid . displayName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Unsupported Ġtype Ġof ĠComponent Identifier ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Optional Features ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config : ĠA pk Creation Config ĊĠĠĠĠĠĠĠ Ġ): ĠEnum Set < Invoker . Feature > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeatures : ĠMutable List < Invoker . Feature > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Type Ġ= Ġcreation Config . variant Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variant Type . is Dynamic Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures . add ( Invoker . Feature . ADD _ DYNAMIC _ FEATURE _ ATTRIBUTES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . test Only A pk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures . add ( Invoker . Feature . TEST _ ONLY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . debug gable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures . add ( Invoker . Feature . DEBUG G ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . advanced Profiling Transforms . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures . add ( Invoker . Feature . ADV ANCED _ PRO FIL ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . dex ing Type Ġ=== ĠDex ing Type . LEG ACY _ MULT ID EX ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . services . project Options [ Boolean Option . USE _ ANDROID _ X ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInv oker . Feature . ADD _ AND RO IDX _ MULT ID EX _ APPLICATION _ IF _ NO _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInv oker . Feature . ADD _ SUPPORT _ MULT ID EX _ APPLICATION _ IF _ NO _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creation Config . services . project Options [ Boolean Option . EN FORCE _ UNIQUE _ PACKAGE _ NAMES ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures . add ( Invoker . Feature . EN FORCE _ UNIQUE _ PACKAGE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( features . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Set . none Of ( Invoker . Feature :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠEnum Set . copyOf ( features ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ