/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 Ġ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 . manifest Ċ Ċ import Ġcom . android . Sdk Constants Ċ import Ġcom . android . builder . errors . Issue Reporter Ċ import Ġcom . android . utils . Xml Utils Ċ import Ġorg . xml . sax . Attributes Ċ import Ġorg . xml . sax . SAX Exception Ċ import Ġorg . xml . sax . helpers . Default Handler Ċ import Ġjava . io . File Ċ import Ġjava . util . function . Boolean Supplier Ċ import Ġjavax . xml . parsers . SAX Parser Factory Ċ Ċ /** Ċ Ġ* ĠRepresents Ġthe Ġdata Ġparser Ġfrom Ġa Ġmanifest Ġfile . Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġmeant Ġby Ġto Ġused Ġwith Ġ[ Manifest DataProvider ] Ċ Ġ*/ Ċ class ĠManifest Data ( ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġpackage Ġname Ġfrom Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġpackage Ġname Ġor Ġnull Ġif Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠpackageName : ĠString ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsplit Ġname Ġfrom Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsplit Ġname Ġor Ġnull Ġif Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsplit : ĠString ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġmin Sdk Version Ġfrom Ġthe Ġmanifest Ġfile . ĠThe Ġreturned Ġvalue Ġcan Ġbe Ġan ĠInteger Ġor Ġa ĊĠĠĠĠ Ġ* ĠString ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġmin Sdk Version Ġor Ġnull Ġif Ġvalue Ġis Ġnot Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmin Sdk Version : ĠAndroid Target ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtarget Sdk Version Ġfrom Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġvalue Ġcan Ġbe Ġan ĠInteger Ġor Ġa ĠString ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġtarget Sdk Version Ġor Ġnull Ġif Ġnot Ġfound ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtarget Sdk Version : ĠAndroid Target ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġversion Ġname Ġfrom Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġversion Ġname Ġor Ġnull Ġif Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġversion Name : ĠString ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġversion Ġcode Ġfrom Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġversion Ġcode Ġor Ġnull Ġif Ġnot Ġfound ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġversion Code : ĠInt ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġinstrument ation Ġrunner Ġfrom Ġthe Ġinstrument ation Ġtag Ġin Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġinstrument ation Ġrunner Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġinstrument ation Runner : ĠString ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġfunctional Test Ġfrom Ġthe Ġinstrument ation Ġtag Ġin Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġfunctional Test Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġfunctional Test : ĠBoolean ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġhandle Profiling Ġfrom Ġthe Ġinstrument ation Ġtag Ġin Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġhandle Profiling Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġhandle Profiling : ĠBoolean ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtest Label Ġfrom Ġthe Ġinstrument ation Ġtag Ġin Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġtest Label Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtest Label : ĠString ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġvalue Ġof Ġthe Ġ` extract Native Lib s ` Ġattribute Ġof Ġthe Ġ` application ` Ġtag , Ġif ĊĠĠĠĠ Ġ* Ġpresent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġextract Native Lib s : ĠBoolean ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġvalue Ġof Ġthe Ġ` use Embedded Dex ` Ġattribute Ġof Ġthe Ġ` application ` Ġtag , Ġif ĊĠĠĠĠ Ġ* Ġpresent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġuse Embedded Dex : ĠBoolean ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTemporary Ġholder Ġof Ġapi / cod ename Ġto Ġstore Ġthe Ġoutput Ġof Ġthe Ġmin Sdk Version Ġvalue . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġnot Ġfinal Ġand Ġwill Ġbe Ġreplaced Ġby Ġthe Ġfinal ĠAPI Ġclass . ĊĠĠĠĠ Ġ* Ġ// ĠFIXME Ġb / 1 5 0 2 9 0 7 0 4 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠAndroid Target ( ĊĠĠĠĠĠĠĠ Ġval Ġapi Level : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġcode Name : ĠString ? ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠManifest Data ĊĊĠĠĠĠĠĠĠ Ġif Ġ( packageName Ġ!= Ġother . packageName ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( split Ġ!= Ġother . split ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( min Sdk Version Ġ!= Ġother . min Sdk Version ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( target Sdk Version Ġ!= Ġother . target Sdk Version ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( version Name Ġ!= Ġother . version Name ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( version Code Ġ!= Ġother . version Code ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( instrumentation Runner Ġ!= Ġother . instrumentation Runner ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( functional Test Ġ!= Ġother . functional Test ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( handle Profiling Ġ!= Ġother . handle Profiling ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( test Label Ġ!= Ġother . test Label ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( extract Native Lib s Ġ!= Ġother . extract Native Lib s ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( use Embedded Dex Ġ!= Ġother . use Embedded Dex ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠpackageName ?. hashCode () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( split ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( min Sdk Version ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( target Sdk Version ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( version Name ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( version Code Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( instrumentation Runner ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( functional Test ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( handle Profiling ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( test Label ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( extract Native Lib s ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( use Embedded Dex ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġparse Manifest ( ĊĠĠĠ Ġfile : ĠFile , ĊĠĠĠ Ġmanifest File Required : ĠBoolean , ĊĠĠĠ Ġmanifest Parsing Allowed : ĠBoolean Supplier , ĊĠĠĠ Ġissue Reporter : ĠIssue Reporter Ċ ): ĠManifest Data Ġ{ ĊĠĠĠ Ġif Ġ(! manifest Parsing Allowed . as Boolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġnot Ġan Ġexception Ġsince Ġwe Ġstill Ġwant Ġsync Ġto Ġsucceed Ġif Ġthis Ġoccurs . ĊĠĠĠĠĠĠĠ Ġ// ĠInstead Ġprint Ġpart Ġof Ġthe Ġrelevant Ġstack Ġtrace Ġso Ġthat Ġthe Ġdeveloper Ġwill Ġknow ĊĠĠĠĠĠĠĠ Ġ// Ġhow Ġthis Ġoccurred . ĊĠĠĠĠĠĠĠ Ġval Ġstack Trace Ġ= ĠThread . currentThread (). stack Trace . map Ġ{ Ġit . toString () Ġ}. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . startsWith (" com . android . build . gradle . internal . manifest .") Ġ&& Ġ! it . startsWith (" org . gradle .") ĊĠĠĠĠĠĠĠ Ġ}. sub List ( 1 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġstack Trace String Ġ= Ġstack Trace . join ToString ( separator Ġ= Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġissue Reporter . report Warning ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Reporter . Type . MAN IFEST _ PAR SED _ D UR ING _ CONFIGURATION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġmanifest Ġis Ġbeing Ġparsed Ġduring Ġconfiguration . ĠPlease Ġeither Ġremove Ġandroid . disable Configuration Manifest Parsing Ġfrom Ġbuild . gradle Ġor Ġremove Ġany Ġbuild Ġconfiguration Ġrules Ġthat Ġread Ġthe Ġandroid Ġmanifest Ġfile .\ n $ stack Trace String " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdata Ġ= ĠManifest Data () ĊĊĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( manifest File Required ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissue Reporter . report Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Reporter . Type . MISSING _ ANDROID _ MAN IFEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Manifest Ġfile Ġdoes Ġnot Ġexist : Ġ${ file . absolute Path }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinit Ġdata Ġwith Ġplaceholder Ġvalues Ġto Ġprevent Ġdownstream Ġcode Ġto Ġhave Ġto Ġdeal Ġwith ĠN PE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . packageName Ġ= Ġ" fake . package . name . for . sync " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġhandler : ĠDefault Handler Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠDefault Handler () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes : ĠAttributes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . TAG _ MAN IFEST Ġ== Ġlocal Name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . split Ġ= Ġattributes . getValue ("", ĠS dk Constants . ATTR _ SPLIT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . packageName Ġ= Ġattributes . getValue ("", ĠS dk Constants . ATTR _ PACKAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . version Code Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ VERSION _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . version Name Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ VERSION _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . TAG _ INSTR UMENT ATION Ġ== Ġlocal Name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . test Label Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ LABEL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . functional Test Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ FUNCTION AL _ TEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. to Boolean () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . instrumentation Runner Ġ= Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . handle Profiling Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ HANDLE _ PRO FIL ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. to Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . TAG _ USE S _ SDK Ġ== Ġlocal Name Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . min Sdk Version Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ MIN _ SDK _ VERSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. to Android Target () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . target Sdk Version Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ TARGET _ SDK _ VERSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. to Android Target () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . TAG _ APPLICATION Ġ== Ġlocal Name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . extract Native Lib s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ EXTRACT _ NATIVE _ LIBS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. to Boolean () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . use Embedded Dex Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ANDROID _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Constants . ATTR _ USE _ EMB ED DED _ DEX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. to Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs ax Parser Ġ= ĠXml Utils . create S ax Parser ( PARSER _ FACTORY ) ĊĠĠĠĠĠĠĠ Ġs ax Parser . parse ( file , Ġhandler ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdata Ċ } Ċ Ċ private Ġval ĠPARSER _ FACTORY Ġ= ĠSAX Parser Factory . newInstance ( Xml Utils . SAX _ PARSER _ FACTORY , Ġnull ). also Ġ{ ĊĠĠĠ ĠXml Utils . configure S ax Factory ( it , Ġtrue , Ġfalse ) Ċ } Ċ Ċ private Ġfun ĠString . to Android Target (): ĠManifest Data . Android Target Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapi Level Ġ= ĠInteger . valueOf ( this ) ĊĊĠĠĠĠĠĠĠ ĠManifest Data . Android Target ( api Level Ġ= Ġapi Level , Ġcode Name Ġ= Ġnull ) ĊĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠManifest Data . Android Target ( api Level Ġ= Ġnull , Ġcode Name Ġ= Ġthis ) ĊĠĠĠ Ġ} Ċ } Ċ