package Ġcom . age et . gradle . plugin . apk name Ċ Ċ import Ġcom . android . build . gradle . App Extension Ċ import Ġcom . android . build . gradle . api . A pk Variant Output Ċ import Ġcom . android . build . gradle . api . Application Variant Ċ import Ġcom . android . build . gradle . internal . dsl . Base App Module Extension Ċ import Ġcom . android . build . gradle . internal . tasks . Finalize Bundle Task Ċ import Ġorg . eclipse . j git . api . Git Ċ import Ġorg . eclipse . j git . errors . Repository NotFoundException Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . plugins . Extension Aware Ċ import Ġorg . gradle . api . plugins . Extension Container Ċ import Ġjava . io . File Ċ Ċ class ĠA pk Name Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapk Name Extension : ĠA pk Name Extension ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugin Manager . with Plugin (" com . android . application ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . on Applied Plugin () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠProject . on Applied Plugin () Ġ{ ĊĠĠĠĠĠĠĠ Ġapk Name Extension Ġ= Ġandroid . extensions . create ( EXTENSION _ NAME , ĠA pk Name Extension :: class . java ) ĊĠĠĠĠĠĠĠ Ġandroid . application Variants . all Ġ{ Ġvariant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! apk Name Extension . release Only Ġ|| Ġvariant . build Type . name Ġ== Ġ" release ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate A pk Name From ( variant ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . generate A pk Name From ( variant : ĠApplication Variant ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Generate Ġapk Ġname Ġvariant Ġ= Ġ${ variant . name }, Ġformat Ġ= Ġ${ apk Name Extension . format }") ĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠA pk Name Formatter ( name , Ġvariant , Ġgit Short Hash ) ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġapk Name Extension . format ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġif Ġ( variant . is Signing Ready ) Ġ"" Ġelse Ġ"- unsigned " ĊĠĠĠĠĠĠĠ Ġval Ġbase Name Ġ= Ġformatter . format () ĊĠĠĠĠĠĠĠ Ġval Ġapk Name Ġ= Ġ"$ base Name $ suffix . apk " ĊĠĠĠĠĠĠĠ Ġvariant . outputs . map NotNull Ġ{ Ġit Ġas ? ĠA pk Variant Output Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . output FileName Ġ= Ġapk Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info (" apk Name Ġ= Ġ$ apk Name ") ĊĊĠĠĠĠĠĠĠ Ġafter Evaluate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġtasks . get ByName (" sign ${ variant . name . capitalize ()} Bundle ") Ġas ĠFinal ize Bundle Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Dir Ġ= Ġtask . final Bundle File . get (). as File . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle File Ġ= ĠFile ( bundle Dir , Ġ"$ base Name . aab ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . final Bundle File . set ( bundle File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" bundle File Ġ= Ġ$ bundle File ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . open Git ( git Dir : ĠFile ): ĠGit Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠGit . open ( git Dir ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠRepository NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgit Dir . parent File ?. let { Ġopen Git ( it ) Ġ} Ġ?: Ġthrow ĠRepository NotFoundException ( project Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠProject . android : ĠBase App Module Extension ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġextensions . get ByName (" android ") Ġas ĠBase App Module Extension ĊĊĠĠĠ Ġprivate Ġval ĠProject . git Short Hash : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġopen Git ( project Dir ). short Hash ĊĊĠĠĠ Ġprivate Ġval ĠGit . short Hash : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġrepository . exact Ref (" HEAD "). objectId . name . substring ( 0 , ĠGIT _ SHORT _ HASH _ LENGTH ) ĊĊĠĠĠ Ġprivate Ġval ĠApp Extension . extensions : ĠExtension Container ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( this Ġas ĠExtension Aware ). extensions ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGIT _ SHORT _ HASH _ LENGTH Ġ= Ġ 7 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEXT ENSION _ NAME Ġ= Ġ" apk Name " ĊĠĠĠ Ġ} Ċ } Ċ