Android Application Development 5LFN5RJHUV-RKQ/RPEDUGR=LJXUG0HGQLHNVDQG%ODNH 0HLNH Beijing • Cambridge • Farnham • Köln • Sebastopol • Taipei • Tokyo Android Application Development E\5LFN5RJHUV-RKQ/RPEDUGR=LJXUG0HGQLHNVDQG%ODNH0HLNH &RS\ULJKW5LFN5RJHUV-RKQ/RPEDUGR=LJXUG0HGQLHNVDQG%ODNH0HLNH$OOULJKWVUHVHUYHG 3ULQWHGLQWKH8QLWHG6WDWHVRI$PHULFD 3XEOLVKHGE\2¦5HLOO\0HGLD,QF*UDYHQVWHLQ+LJKZD\1RUWK6HEDVWRSRO&$ 2¦5HLOO\ERRNVPD\EHSXUFKDVHGIRUHGXFDWLRQDOEXVLQHVVRUVDOHVSURPRWLRQDOXVH2QOLQHHGLWLRQV DUHDOVRDYDLODEOHIRUPRVWWLWOHV KWWSP\VDIDULERRNVRQOLQHFRP )RUPRUHLQIRUPDWLRQFRQWDFWRXU FRUSRUDWHLQVWLWXWLRQDOVDOHVGHSDUWPHQW RUFRUSRUDWH#RUHLOO\FRP Editor: $QG\2UDP Indexer: -RH:L]GD Production Editor: 6XPLWD0XNKHUML Cover Designer: .DUHQ0RQWJRPHU\ Copyeditor: *HQHYLHYHG¦(QWUHPRQW Interior Designer: 'DYLG)XWDWR Proofreader: 6DGD3UHLVFK Illustrator: 5REHUW5RPDQR Printing History: 0D\ )LUVW(GLWLRQ 1XWVKHOO+DQGERRNWKH1XWVKHOO+DQGERRNORJRDQGWKH2¦5HLOO\ORJRDUHUHJLVWHUHGWUDGHPDUNVRI 2¦5HLOO\0HGLD,QF$QGURLG$SSOLFDWLRQ'HYHORSPHQWWKHLPDJHRIDQ(DVWHUQTXROODQGUHODWHGWUDGH GUHVVDUHWUDGHPDUNVRI2¦5HLOO\0HGLD,QF 0DQ\RIWKHGHVLJQDWLRQVXVHGE\PDQXIDFWXUHUVDQGVHOOHUVWRGLVWLQJXLVKWKHLUSURGXFWVDUHFODLPHGDV WUDGHPDUNV:KHUHWKRVHGHVLJQDWLRQVDSSHDULQWKLVERRNDQG2¦5HLOO\0HGLD,QFZDVDZDUHRID WUDGHPDUNFODLPWKHGHVLJQDWLRQVKDYHEHHQSULQWHGLQFDSVRULQLWLDOFDSV :KLOHHYHU\SUHFDXWLRQKDVEHHQWDNHQLQWKHSUHSDUDWLRQRIWKLVERRNWKHSXEOLVKHUDQGDXWKRUVDVVXPH QRUHVSRQVLELOLW\IRUHUURUVRURPLVVLRQVRUIRUGDPDJHVUHVXOWLQJIURPWKHXVHRIWKHLQIRUPDWLRQFRQ WDLQHGKHUHLQ TM 7KLVERRNXVHV5HS.RYHUDGXUDEOHDQGIOH[LEOHOD\IODWELQGLQJ ,6%1 >0@ Table of Contents Preface. Development Kit Walk-Through 1. Getting to Know Android. 3 :K\$QGURLG" 7KH2SHQ+DQGVHW$OOLDQFH 7KH$QGURLG([HFXWLRQ(QYLURQPHQW &RPSRQHQWVRIDQ$QGURLG$SSOLFDWLRQ $QGURLG$FWLYLW\/LIHF\FOH $QGURLG6HUYLFH/LIHF\FOH +RZ7KLV%RRN)LWV7RJHWKHU 2.
Setting Up Your Android Development Environment. 13 6HWWLQJ8S<RXU'HYHORSPHQW(QYLURQPHQW &UHDWLQJDQ$QGURLG'HYHORSPHQW(QYLURQPHQW +HOOR$QGURLG :KHUH:H¦UH*RLQJ 6WDUWLQJD1HZ$QGURLG$SSOLFDWLRQ+HOOR:RUOG :ULWLQJ+HOOR:RUOG 5XQQLQJ+HOOR:RUOG 3. Using the Android Development Environment for Real Applications. 27 0LFUR-REV7KLV%RRN¦V0DLQ6DPSOH$SSOLFDWLRQ $QGURLGDQG6RFLDO1HWZRUNLQJ 'RZQORDGLQJWKH0-$QGURLG&RGH $%ULHI7RXURIWKH0-$QGURLG&RGH 7KH3URMHFW5RRW)ROGHU 0-$QGURLG 7KH6RXUFH)ROGHU VUF 7KH5HVRXUFH)ROGHU UHV )LUVW6WHSV%XLOGLQJDQG5XQQLQJWKH0LFUR-REV$SSOLFDWLRQ iii $9HU\6KRUW7RXURIWKH$QGURLG6'.(FOLSVH,'( /RDGLQJDQG6WDUWLQJWKH$SSOLFDWLRQ 'LJJLQJD/LWWOH'HHSHU:KDW&DQ*R:URQJ" 5XQQLQJDQ$SSOLFDWLRQRQWKH70RELOH3KRQH 6XPPDU\ 4.
Under the Covers: Startup Code and Resources in the MJAndroid Application. 43 ,QLWLDOL]DWLRQ3DUDPHWHUVLQ$QGURLG0DQLIHVW[PO ,QLWLDOL]DWLRQLQ0LFUR-REVMDYD 0RUH,QLWLDOL]DWLRQRI0LFUR-REVMDYD 6XPPDU\ 5. Debugging Android Applications. 57 7KH7RROV (FOLSVH-DYD(GLWRU -DYD(UURUV 7KH'HEXJJHU /RJFDW $QGURLG'HEXJ%ULGJH DGE ''06'DOYLN'HEXJ0RQLWRU6HUYLFH 7UDFHYLHZ 6XPPDU\ 6.
The ApiDemos Application. 81 $SSOLFDWLRQ6HWXSLQWKH0DQLIHVW)LOH )LQGLQJWKH6RXUFHWRDQ,QWHUHVWLQJ([DPSOH &XVWRP7LWOH'HPR /LQNLI\'HPR $GGLQJ<RXU2ZQ([DPSOHVWR$SL'HPRV 7. Signing and Publishing Your Application. 87 7HVW<RXU$SSOLFDWLRQ $WWDFKDQ(QG8VHU/LFHQVH$JUHHPHQW,I'HVLUHG &UHDWHDQG$WWDFKDQ,FRQDQG/DEHO &OHDQ8SIRU5HOHDVH 9HUVLRQ<RXU$SSOLFDWLRQ 2EWDLQLQJD6LJQLQJ&HUWLILFDWHDQG$3,.H\ *HWWLQJD6LJQLQJ&HUWLILFDWHIRUDQ$SSOLFDWLRQ<RX$UH*RLQJWR6KLS *HWWLQJD6LJQLQJ&HUWLILFDWH:KLOH'HEXJJLQJ 6LJQLQJ<RXU$SSOLFDWLRQ 5HWHVWLQJ<RXU$SSOLFDWLRQ 3XEOLVKLQJRQ$QGURLG0DUNHW 6LJQLQJ8S$VDQ$QGURLG'HYHORSHU iv | Table of Contents 8SORDGLQJ<RXU$SSOLFDWLRQ Part II.
Persistent Data Storage: SQLite Databases and Content Providers. 101 'DWDEDVHV %DVLF6WUXFWXUHRIWKH0LFUR-REV'DWDEDVH&ODVV 5HDGLQJ'DWDIURPWKH'DWDEDVH 0RGLI\LQJWKH'DWDEDVH &RQWHQW3URYLGHUV ,QWURGXFLQJ1RWH3DG &RQWHQW3URYLGHUV &RQVXPLQJD&RQWHQW3URYLGHU 9. Location and Mapping. 137 /RFDWLRQ%DVHG6HUYLFHV 0DSSLQJ 7KH*RRJOH0DSV$FWLYLW\ 7KH0DS9LHZDQG0DS$FWLYLW\ :RUNLQJZLWK0DS9LHZV 0DS9LHZDQG0\/RFDWLRQ2YHUOD\,QLWLDOL]DWLRQ 3DXVLQJDQG5HVXPLQJD0DS$FWLYLW\ &RQWUROOLQJWKH0DSZLWK0HQX%XWWRQV &RQWUROOLQJWKH0DSZLWKWKH.H\3DG /RFDWLRQ:LWKRXW0DSV 7KH0DQLIHVWDQG/D\RXW)LOHV &RQQHFWLQJWRD/RFDWLRQ3URYLGHUDQG*HWWLQJ/RFDWLRQ8SGDWHV 8SGDWLQJWKH(PXODWHG/RFDWLRQ 10.
157 $QGURLG*8,$UFKLWHFWXUH 7KH0RGHO 7KH9LHZ 7KH&RQWUROOHU 3XWWLQJ,W7RJHWKHU $VVHPEOLQJD*UDSKLFDO,QWHUIDFH :LULQJ8SWKH&RQWUROOHU /LVWHQLQJWRWKH0RGHO /LVWHQLQJIRU7RXFK(YHQWV /LVWHQLQJIRU.H\(YHQWV $OWHUQDWLYH:D\VWR+DQGOH(YHQWV $GYDQFHG:LULQJ)RFXVDQG7KUHDGLQJ Table of Contents | v 7KH0HQX 11. 187 $QGURLG9LHZV 7H[W9LHZDQG(GLW7H[W %XWWRQDQG,PDJH%XWWRQ $GDSWHUVDQG$GDSWHU9LHZV &KHFN%R[HV5DGLR%XWWRQVDQG6SLQQHUV 9LHZ*URXSV *DOOHU\DQG*ULG9LHZ /LVW9LHZDQG/LVW$FWLYLW\ 6FUROO9LHZ 7DE+RVW /D\RXWV )UDPH/D\RXW /LQHDU/D\RXW 7DEOH/D\RXW $EVROXWH/D\RXW 5HODWLYH/D\RXW 12. Drawing 2D and 3D Graphics. 221 5ROOLQJ<RXU2ZQ:LGJHWV /D\RXW &DQYDV'UDZLQJ 'UDZDEOHV %LWPDSV %OLQJ 6KDGRZV*UDGLHQWVDQG)LOWHUV $QLPDWLRQ 2SHQ*/*UDSKLFV 13.
Inter-Process Communication. 257 ,QWHQWV6LPSOH/RZ2YHUKHDG,3& ,QWHQW2EMHFWV8VHGLQ,QWHU3URFHVV&RPPXQLFDWLRQ $FWLYLW\2EMHFWVDQG1DYLJDWLQJWKH8VHU,QWHUIDFH+LHUDUFK\ ([DPSOH$Q,QWHQWWR3LFN+RZ:H6D\£+HOOR:RUOG¤ *HWWLQJD5HVXOWYLD,QWHU3URFHVV&RPPXQLFDWLRQ 5HPRWH0HWKRGVDQG$,'/ $QGURLG,QWHUIDFH'HILQLWLRQ/DQJXDJH &ODVVHV8QGHUO\LQJ$,'/*HQHUDWHG,QWHUIDFHV 3XEOLVKLQJDQ,QWHUIDFH $QGURLG,3&&RPSDUHGZLWK-DYD1DWLYH,QWHUIDFH -1, :KDW%LQGHU'RHVQ¦W'R vi | Table of Contents %LQGHUDQG/LQX[ 14. Simple Phone Calls. 277 4XLFNDQG(DV\3KRQH&DOOV &UHDWLQJDQ([DPSOH$SSOLFDWLRQWR5XQWKHFDOO0HWKRG (PEHGGLQJWKH&RGH6QLSSHWLQD6LPSOH$SSOLFDWLRQ ([SORULQJWKH3KRQH&RGH7KURXJKWKH'HEXJJHU &UHDWLQJDQ,QVWDQFHRIDQ,QWHQW $GGLQJ'DWDWRDQ,QVWDQFHRIDQ,QWHQW ,QLWLDWLQJD3KRQH&DOO ([FHSWLRQ+DQGOLQJ $QGURLG$SSOLFDWLRQ/HYHO0RGXODULW\DQG7HOHSKRQ\ 15.
Telephony State Information and Android Telephony Classes. 287 2SHUDWLRQV2IIHUHGE\WKHDQGURLGWHOHSKRQ\3DFNDJH 3DFNDJH6XPPDU\ /LPLWDWLRQVRQ:KDW$SSOLFDWLRQV&DQ'RZLWKWKH3KRQH ([DPSOH'HWHUPLQLQJWKH6WDWHRID&DOO $QGURLG7HOHSKRQ\,QWHUQDOV ,QWHU3URFHVV&RPPXQLFDWLRQDQG$,'/LQWKH DQGURLGLQWHUQDOWHOHSKRQ\3DFNDJH 7KHDQGURLGLQWHUQDOWHOHSKRQ\3DFNDJH 7KHDQGURLGLQWHUQDOWHOHSKRQ\JVP3DFNDJH ([SORULQJ$QGURLG7HOHSKRQ\,QWHUQDOV $QGURLGDQG9R,3 Appendix: Wireless Protocols. 309 Table of Contents | vii Preface :KHQ*RRJOHDQQRXQFHGWKHGHYHORSPHQWRI$QGURLGWKHILHOGRIPRELOHSODWIRUPV ZDVDOUHDG\ZHOOHVWDEOLVKHG(YHQLQWKHQDUURZHUFDWHJRU\RIRSHQVRXUFHSODWIRUPV DQXPEHURIYLDEOHDOWHUQDWLYHVZHUHEHLQJSXVKHGE\SURSRQHQWV<HW$QGURLGKDV VWLPXODWHGQRWRQO\ZLGHVSUHDGWHFKQLFDOLQWHUHVWEXWUDPSDQWVSHFXODWLRQDERXWLWV SRWHQWLDOWRFRPSOHWHO\WUDQVIRUPWKHZRUOGRIWKHSHUVRQDOGHYLFH,QVWHDGRIDFRQ YHQLHQWSURSWRVXSSRUWDVHWRIIDPLOLDUIXQFWLRQVVXFKDVSKRQHFDOOVHPDLODQG UHVWDXUDQWORRNXSVWKHHOHFWURQLFGHYLFHFRXOGEHFRPHDQRSHQHQGHGZLQGRZLQWR WKHZKROHZRUOG¢FRXOGEHFRPHLQVKRUWDQ\WKLQJWKDWWKHXVHUDQGWKHGHYHORSHU FRXOGWKLQNWRPDNHLW +RZPXFKRIWKHFRJHQWDQDO\VLVDQGIHUYLGK\SHZLOOFRPHWRSDVVFDQEHGLVFXVVHG HOVHZKHUHWKLVERRNLVIRUWKRVHZKRZDQWWRJHWWRNQRZWKHSURJUDPPLQJHQYLURQ PHQWIRU$QGURLGDQGOHDUQZKDWWKH\WKHPVHOYHVFDQGRWRPDNHDGLIIHUHQFH:HKDYH VSHQWPDQ\JUXHOLQJPRQWKVLQYHVWLJDWLQJWKHVRXUFHFRGHRYHUPXOWLSOHUHOHDVHVDQG WU\LQJRXWWKHIXQFWLRQVRIWKHOLEUDU\DQGGHYHORSPHQWNLW:HKDYHEHHQZRUNLQJKDUG WRXQFRYHUWKHWUXH$QGURLGJRLQJEH\RQGDQ\GRFXPHQWDWLRQZHFRXOGILQGRQOLQH RULQSULQW 7KLVERRNUHDGFDUHIXOO\FDQHQDEOHDQ\-DYDSURJUDPPHUWRGHYHORSXVHIXODQGUREXVW DSSOLFDWLRQVIRU$QGURLG,WDOVRWDNHV\RXLQWRWKHLQWHUQDOVLQVRPHSODFHVVR\RX NQRZKRZ$QGURLGVXSSRUWVZKDW\RX¦UHGRLQJ¢DQGVR\RXFDQSOD\DURXQGZLWKLWV RSHQVRXUFHFRGHLI\RXOLNH Audience 7KLVERRNLVLQWHQGHGIRUH[SHULHQFHGVRIWZDUHGHYHORSHUVZKRZDQWWRGHYHORSDS SOLFDWLRQVLQWKH$QGURLGPRELOHHQYLURQPHQW,WDVVXPHV\RXKDYHVRPHH[SHULHQFH ZLWKWKH-DYDSURJUDPPLQJODQJXDJHZLWKXVLQJ-DYDWRLPSOHPHQWXVHULQWHUIDFHV DQGWKDW\RXDUHDWOHDVWIDPLOLDUZLWKWKHWHFKQRORJLHV$QGURLGXVHVVXFKDV;0/ 64/*7DON ;033 2SHQ*/(6DQG+773 ix How This Book Is Organized 7KLVERRNLVRUJDQL]HGDURXQGWKHFRUHH[DPSOHSURJUDPLQWURGXFHGLQ&KDSWHU /DWHUFKDSWHUVLOOXVWUDWHGHYHORSPHQWWHFKQLTXHVE\DGGLQJWRWKHH[DPSOHWKURXJK LPSOHPHQWLQJPRGXODUH[WHQVLRQVZKHUHWKLVLVIHDVLEOH6RPHFKDSWHUV DQGWKH$S SHQGL[ FRYHUPRUHDGYDQFHGWRSLFVWKDWDUHQRWUHTXLUHGIRUPDQ\DSSOLFDWLRQV 3DUW,'HYHORSPHQW.LW:DON7KURXJKJHWV\RXVWDUWHGZLWKWKHEDVLFV\RX¦OOQHHGWR ZULWHDSSOLFDWLRQV &KDSWHU*HWWLQJWR.QRZ$QGURLGH[SODLQV$QGURLG¦VSODFHLQWKHPDUNHWDQGLWV EDVLFDUFKLWHFWXUH &KDSWHU6HWWLQJ8S<RXU$QGURLG'HYHORSPHQW(QYLURQPHQWWHOOV\RXKRZWRGRZQ ORDGWKHVRIWZDUH\RXQHHGLQFOXGLQJ(FOLSVHDQGWKH$QGURLGSOXJLQDQGKRZWRJHW VWDUWHGSURJUDPPLQJ &KDSWHU8VLQJWKH$QGURLG'HYHORSPHQW(QYLURQPHQWIRU5HDO$SSOLFDWLRQVGHVFULEHV WKHILOHVWKDWPDNHXSDW\SLFDO$QGURLGSURJUDP &KDSWHU8QGHUWKH&RYHUV6WDUWXS&RGHDQG5HVRXUFHVLQWKH0-$QGURLG$SSOLFD WLRQORRNVDWWKHIXQGDPHQWDO-DYDFRGHDQG;0/UHVRXUFHVWKDWHYHU\DSSOLFDWLRQ QHHGV &KDSWHU'HEXJJLQJ$QGURLG$SSOLFDWLRQVLQWURGXFHVDQXPEHURIWRROVIRUGHEXJJLQJ DQGSHUIRUPDQFHLQFOXGLQJ(FOLSVHORJVWKH$QGURLG'HEXJ%ULGJH adb ''06DQG 7UDFHYLHZ &KDSWHU7KH$SL'HPRV$SSOLFDWLRQRIIHUVDKLJKOHYHOWRXURIWKHVDPSOH$QGURLG FRGHLQFOXGHGLQWKHWRRONLWZLWKWLSVIRUH[SORULQJLW\RXUVHOI &KDSWHU6LJQLQJDQG3XEOLVKLQJ<RXU$SSOLFDWLRQVKRZV\RXKRZWRPDNH\RXUDS SOLFDWLRQUHDG\IRUSXEOLFXVH 3DUW ,, 3URJUDPPLQJ 7RSLFV H[SORUHV LQ GHSWK WKH PDMRU OLEUDULHV \RX¦OO QHHG DQG VKRZV\RXKRZWRXVHWKHPHIIHFWLYHO\ &KDSWHU3HUVLVWHQW'DWD6WRUDJH64/LWH'DWDEDVHVDQG&RQWHQW3URYLGHUVVKRZV KRZWRXVHWKHWZRPRVWSRZHUIXOPHDQVLQ$QGURLGIRUVWRULQJDQGVHUYLQJGDWD &KDSWHU/RFDWLRQDQG0DSSLQJVKRZVKRZWRGHWHUPLQHDQGGLVSOD\WKHXVHU¦VOR FDWLRQDQGKRZWRXVH*RRJOH0DSV &KDSWHU%XLOGLQJD9LHZLQWURGXFHVJUDSKLFDOSURJUDPPLQJRQ$QGURLGE\H[ SODLQLQJKRZWRFUHDWHDQGPDQLSXODWHZLQGRZVDQGYLHZV &KDSWHU$:LGJHW%HVWLDU\FRYHUVWKHPRVWSRSXODUDQGXVHIXOJUDSKLFDOLQWHUIDFH HOHPHQWVSURYLGHGE\$QGURLG &KDSWHU'UDZLQJ'DQG'*UDSKLFVVKRZVKRZWROD\RXWJUDSKLFVDQGGHOYHV LQWRGUDZLQJWUDQVIRUPLQJDQGDQLPDWLQJ\RXURZQJUDSKLFV x | Preface &KDSWHU,QWHU3URFHVV&RPPXQLFDWLRQFRYHUV,QWHQWVDQG5HPRWH0HWKRGVZKLFK DOORZ\RXWRDFFHVVWKHIXQFWLRQDOLW\RIRWKHUDSSOLFDWLRQV &KDSWHU6LPSOH3KRQH&DOOVVKRZVKRZWRGLDODQXPEHUIURPDQDSSOLFDWLRQDQG H[SODLQVKRZ$QGURLGFDUULHVRXWWKHUHTXHVW &KDSWHU7HOHSKRQ\6WDWH,QIRUPDWLRQDQG$QGURLG7HOHSKRQ\&ODVVHVVKRZVKRZ WRJHWLQIRUPDWLRQDERXWWHOHSKRQ\VHUYLFHDQGSKRQHFDOOVDQGRIIHUVDWRXURIWHO HSKRQ\LQWHUQDOV $SSHQGL[:LUHOHVV3URWRFROVRIIHUVVRPHEDFNJURXQGDQGKLVWRU\RQZLUHOHVVVHUYLFHV Conventions Used in This Book 7KHIROORZLQJW\SRJUDSKLFDOFRQYHQWLRQVDUHXVHGLQWKLVERRN ,WDOLF ,QGLFDWHVQHZWHUPV85/VHPDLODGGUHVVHVILOHQDPHVDQGILOHH[WHQVLRQV Constant width 8VHGIRUSURJUDPOLVWLQJVDVZHOODVZLWKLQSDUDJUDSKVWRUHIHUWRSURJUDPHOHPHQWV VXFKDVYDULDEOHRUIXQFWLRQQDPHVGDWDEDVHVGDWDW\SHVHQYLURQPHQWYDULDEOHV VWDWHPHQWVDQGNH\ZRUGV Constant width bold 6KRZVFRPPDQGVRURWKHUWH[WWKDWVKRXOGEHW\SHGOLWHUDOO\E\WKHXVHU Constant width italic 6KRZVWH[WWKDWVKRXOGEHUHSODFHGZLWKXVHUVXSSOLHGYDOXHVRUE\YDOXHVGHWHU PLQHGE\FRQWH[W 7KLVLFRQVLJQLILHVDWLSVXJJHVWLRQRUJHQHUDOQRWH 7KLVLFRQLQGLFDWHVDZDUQLQJRUFDXWLRQ Using Code Examples 7KLVERRNLVKHUHWRKHOS\RXJHW\RXUMREGRQH,QJHQHUDO\RXPD\XVHWKHFRGHLQ WKLVERRNLQ\RXUSURJUDPVDQGGRFXPHQWDWLRQ<RXGRQRWQHHGWRFRQWDFWXVIRU SHUPLVVLRQXQOHVV\RX¦UHUHSURGXFLQJDVLJQLILFDQWSRUWLRQRIWKHFRGH)RUH[DPSOH ZULWLQJDSURJUDPWKDWXVHVVHYHUDOFKXQNVRIFRGHIURPWKLVERRNGRHVQRWUHTXLUH SHUPLVVLRQ6HOOLQJRUGLVWULEXWLQJD&'520RIH[DPSOHVIURP2¦5HLOO\ERRNVGRHV Preface | xi UHTXLUH SHUPLVVLRQ $QVZHULQJ D TXHVWLRQE\ FLWLQJ WKLV ERRN DQGTXRWLQJ H[DPSOH FRGHGRHVQRWUHTXLUHSHUPLVVLRQ,QFRUSRUDWLQJDVLJQLILFDQWDPRXQWRIH[DPSOHFRGH IURPWKLVERRNLQWR\RXUSURGXFW¦VGRFXPHQWDWLRQGRHVUHTXLUHSHUPLVVLRQ :HDSSUHFLDWHEXWGRQRWUHTXLUHDWWULEXWLRQ$QDWWULEXWLRQXVXDOO\LQFOXGHVWKHWLWOH DXWKRUSXEOLVKHUDQG,6%1)RUH[DPSOH£$QGURLG$SSOLFDWLRQ'HYHORSPHQWE\5LFN 5RJHUV -RKQ /RPEDUGR =LJXUG 0HGQLHNV DQG %ODNH 0HLNH &RS\ULJKW 5LFN 5RJHUV-RKQ/RPEDUGR=LJXUG0HGQLHNVDQG%ODNH0HLNH¤ ,I\RXIHHO\RXUXVHRIFRGHH[DPSOHVIDOOVRXWVLGHIDLUXVHRUWKHSHUPLVVLRQJLYHQKHUH IHHOIUHHWRFRQWDFWXVDWSHUPLVVLRQV#RUHLOO\FRP Safari® Books Online :KHQ\RXVHHD6DIDUL%RRNV2QOLQHLFRQRQWKHFRYHURI\RXUIDYRULWH WHFKQRORJ\ ERRN WKDW PHDQV WKH ERRN LV DYDLODEOH RQOLQH WKURXJK WKH 2¦5HLOO\1HWZRUN6DIDUL%RRNVKHOI 6DIDULRIIHUVDVROXWLRQWKDW¦VEHWWHUWKDQHERRNV,W¦VDYLUWXDOOLEUDU\WKDWOHWV\RXHDVLO\ VHDUFKWKRXVDQGVRIWRSWHFKERRNVFXWDQGSDVWHFRGHVDPSOHVGRZQORDGFKDSWHUV DQGILQGTXLFNDQVZHUVZKHQ\RXQHHGWKHPRVWDFFXUDWHFXUUHQWLQIRUPDWLRQ7U\LW IRUIUHHDWKWWSP\VDIDULERRNVRQOLQHFRP How to Contact Us 3OHDVHDGGUHVVFRPPHQWVDQGTXHVWLRQVFRQFHUQLQJWKLVERRNWRWKHSXEOLVKHU 2¦5HLOO\0HGLD,QF *UDYHQVWHLQ+LJKZD\1RUWK 6HEDVWRSRO&$ LQWKH8QLWHG6WDWHVRU&DQDGD LQWHUQDWLRQDORUORFDO ID[ :HKDYHDZHESDJHIRUWKLVERRNZKHUHZHOLVWHUUDWDH[DPSOHVDQGDQ\DGGLWLRQDO LQIRUPDWLRQ<RXFDQDFFHVVWKLVSDJHDW KWWSZZZRUHLOO\FRPFDWDORJ 7RFRPPHQWRUDVNWHFKQLFDOTXHVWLRQVDERXWWKLVERRNVHQGHPDLOWR ERRNTXHVWLRQV#RUHLOO\FRP )RU PRUH LQIRUPDWLRQ DERXW RXU ERRNV FRQIHUHQFHV 5HVRXUFH &HQWHUV DQG WKH 2¦5HLOO\1HWZRUNVHHRXUZHEVLWHDW KWWSZZZRUHLOO\FRP xii | Preface Acknowledgments :H¦GOLNHWRWKDQN%LOO'LPPLFN%UDG2¦+HDUQHDQG+\FHO7D\ORUIRUWKHLUWKRXJKWIXO DQGFDUHIXOUHYLHZVRIWKLVERRNXQGHUDKLJKSUHVVXUHWLPHOLQH Rick Rogers /LNHDQ\WKLQJZRUWKGRLQJ,VXSSRVHWKLVERRNHQGHGXSWDNLQJPRUHWLPHDQGHIIRUW WKDQDQ\RIXVSODQQHGLQWKHEHJLQQLQJ,¦GOLNHWRWKDQNP\FRDXWKRUVDQGWKHJUHDW IRONVDW2¦5HLOO\IRUVWLFNLQJZLWKLWDQGEULQJLQJWKHZRUNWRIUXLWLRQWKURXJKDOOWKH WZLVWVDQGWXUQV,¦GDOVROLNHWRWKDQNP\IDPLO\DQGIULHQGVZKRHQFRXUDJHGPHDOO WKURXJKWKHSURFHVVDQGOHQWDQHDUZKHQ,MXVWQHHGHGWRWDON0RVWHVSHFLDOO\WKRXJK ,ZDQWWRGHGLFDWHWKHERRNWRP\ZLIH6XVLHZKRVHSDWLHQFHNQRZVQRERXQGVDQG ZKRVHDPD]LQJDWWLWXGHWRZDUGOLIHLVDQHQGXULQJLQVSLUDWLRQIRUPHQRPDWWHUZKDW ,¦PGRLQJ John Lombardo ,ZRXOGOLNHWRWKDQNP\ZRQGHUIXOZLIH'HQDZKRNHSWOLIHIURPLQWHUIHULQJZKHQ, FORVHGWKHRIILFHGRRUWRZRUNRQWKHERRN,ZDQWWRGHGLFDWHWKLVERRNWRP\PRWKHU 0DUJXHULWH0HJDULVZKRGLHGVXGGHQO\LQ,JDYHKHUDFRS\RIP\ILUVWERRN (PEHGGHG/LQX[ 1HZ5LGHUV EDFNLQ6KHFUDFNHGLWRSHQWRDSDJHZLWKVRPH DVVHPEO\FRGHORRNHGDWLWIRUDERXWVHFRQGVFORVHGLWDQGVDLG£7KDW¦VQLFHGHDU¤ :HKDGDJRRGODXJKRYHUWKDW,¦GDOVROLNHWRWKDQNDOOWKHZRQGHUIXOSHRSOHDW2¦5HLOO\ IRU DOO WKHLU KDUG ZRUN ,¦G HVSHFLDOO\ OLNH WR WKDQN $QG\ 2UDP ZKR FRGGOHG DQG SURGGHGXVLQMXVWWKHULJKWGRVHVWRNHHSWKHERRNKXPPLQJDORQJDWDJRRGFOLS Zigurd Mednieks 7KDQNVWR7HUU\0DLMDDQG&KDUOHVIRUSXWWLQJXSZLWKP\VFKHGXOHZKLOH,ZDVZULW LQJDQGWR$QG\2UDPDQGP\FRDXWKRUVIRUOHWWLQJPHSDUWLFLSDWHDQGKRSHIXOO\ FRQWULEXWH Blake Meike ,DPYHU\JUDWHIXOWRKDYHEHHQLQYLWHGWRZRUNZLWKVXFKDQDPD]LQJJURXSRISHRSOH 7KDQNVWR=LJXUGIRUVXJJHVWLQJLW$QG\2UDPIRUSUDFWLFDOO\KROGLQJP\SHQDQG 5LFN-RKQDQG,VDEHO.XQNOHIRUPDNLQJWKRVH7KXUVGD\PRUQLQJFDOOVDSOHDVXUH 7KDQNVWR0LNH0RUWRQIRUDFWXDOO\UHDGLQJERWKWKHWH[WDQGWKHFRGH7KRXJKLWPD\ VHHPREYLRXVWKDQNVWRWKH*RRJOH$QGURLGGHYHORSHUV1RWEDGJX\V1RWEDGDWDOO )LQDOO\ORYHDQGWKDQNVWRP\ZLIH&DWKHULQHZKRQHYHUOHWPHVHHDQ\GLVDSSRLQW PHQWZKHQ,VDLG\HWDJDLQ£&DQ¦W*RWWDZRUNRQWKHERRNWKLVZHHNHQG¤<HVEDEH OHW¦VGRWKHERRNFDVHQRZ Preface | xiii PART I Development Kit Walk-Through 7KLVERRNJHWV\RXVWDUWHGZLWK$QGURLG:H¦OOH[SODLQZKDW¦VVSHFLDODERXW$QGURLG¦V IHDWXUHVDQGKRZLWVDUFKLWHFWXUHDFKLHYHVLWVJRDOVDQGVKRZ\RXKRZWRJHWVWDUWHG SURJUDPPLQJ<RX¦OOOHDUQWKHWRROVWKDWOHW\RXZULWHSURJUDPVXVLQJ(FOLSVHUXQWKHP RQ WKH $QGURLG HPXODWRU DQG FDUU\ RXW GHEXJJLQJ WUDFLQJ DQG SURILOLQJ 7KH ODVW FKDSWHULQ3DUWVKRZV\RXKRZWRVLJQ\RXUSURJUDPIRUSXEOLFGLVWULEXWLRQ CHAPTER 1 Getting to Know Android Why Android? *RRJOH¦V$QGURLGPRELOHSKRQHVRIWZDUHSODWIRUPPD\EHWKHQH[WELJRSSRUWXQLW\IRU DSSOLFDWLRQVRIWZDUHGHYHORSHUV *RRJOHDQQRXQFHGWKH2SHQ+DQGVHW$OOLDQFHDQGWKH$QGURLGSODWIRUPLQ1RYHPEHU RIUHOHDVLQJWKHILUVWEHWDYHUVLRQRIWKH$QGURLG6RIWZDUH'HYHORSPHQW. DWWKHVDPHWLPH:LWKLQDPDWWHURIDIHZPRQWKVRYHUPLOOLRQSHRSOHKDGGRZQ ORDGHG YHUVLRQV RI WKH 6'. IURP *RRJOH¦V ZHEVLWH ,Q WKH 8QLWHG 6WDWHV 70RELOH DQQRXQFHGWKH*$QGURLGPRELOHSKRQHLQ2FWREHURIDQGHVWLPDWHVDUHWKDW VHYHUDOKXQGUHGWKRXVDQG*VZHUHVROGEHIRUHWKHHQGRIWKDW\HDU7KHUHDUHDOUHDG\ VHYHUDOFRPSHWLQJPRELOHSKRQHVRIWZDUHVWDFNVLQWKHPDUNHWVRZK\LVWKHUHVXFK LQWHUHVWLQ$QGURLG" $QGURLGKDVWKHSRWHQWLDOIRUUHPRYLQJWKHEDUULHUVWRVXFFHVVLQWKHGHYHORSPHQWDQG VDOHRIDQHZJHQHUDWLRQRIPRELOHSKRQHDSSOLFDWLRQVRIWZDUH-XVWDVWKHWKHVWDQG DUGL]HG3&DQG0DFLQWRVKSODWIRUPVFUHDWHGPDUNHWVIRUGHVNWRSDQGVHUYHUVRIWZDUH $QGURLGE\SURYLGLQJDVWDQGDUGPRELOHSKRQHDSSOLFDWLRQHQYLURQPHQWZLOOFUHDWH DPDUNHWIRUPRELOHDSSOLFDWLRQV¢DQGWKHRSSRUWXQLW\IRUDSSOLFDWLRQVGHYHORSHUVWR SURILWIURPWKRVHDSSOLFDWLRQV :K\KDVQ¦WLWEHHQSURILWDEOHWRGHYHORSPRELOHDSSOLFDWLRQVIRUVPDUWSKRQHVXQWLO QRZ"$QGZKDWDUHWKHSUREOHPVWKDW$QGURLGDOOHYLDWHV" )UDJPHQWDWLRQ $ERXW PLOOLRQ VPDUWSKRQHV ZHUH VROG LQ VR WKHUH DUH D ORW RI SKRQHV DYDLODEOHWRUXQDSSOLFDWLRQVEXWHDFKEUDQGKDVDGLIIHUHQWDSSOLFDWLRQHQYLURQ PHQW7KLVLVSDUWLFXODUO\WUXHRI/LQX[EDVHGSKRQHVZKHUHHDFKKDQGVHWYHQGRU KDVKDGWRDVVHPEOHVFRUHVRISLHFHVRIWKLUGSDUW\VRIWZDUHWRFUHDWHDYLDEOHPRELOH SKRQHSODWIRUP7KHUHLVQRFKDQFHWKDWWKH\ZRXOGDOOFKRRVHWKHVDPHFRPSR QHQWVWREXLOGDPRELOHVPDUWSKRQH 3 -DYDZDVVXSSRVHGWRKHOSWKLVVLWXDWLRQZLWK-0(DQGWKHZLUHOHVV-DYDUHFRP PHQGDWLRQV &'& &/'& 0,'3 -7:, 06$ HWF SURYLGLQJ D FRPPRQ DSSOLFDWLRQVHQYLURQPHQWDFURVVKDQGVHWV8QIRUWXQDWHO\DOPRVWHYHU\KDQGVHW WKDWVXSSRUWV-0(DOVRVXSSRUWYHQGRUSURSULHWDU\H[WHQVLRQVWKDWOLPLWWKHSRUW DELOLW\RIDSSOLFDWLRQV 3URSULHWDU\VRIWZDUHVWDFNV 0RVWH[LVWLQJVPDUWSKRQHVXVHSURSULHWDU\UHODWLYHO\FORVHGVRIWZDUHVWDFNVVXFK DV1RNLD¦V6HULHVZLWKWKH6\PELDQRSHUDWLQJV\VWHPRU0LFURVRIW¦V:LQGRZV 0RELOH0RGLILFDWLRQVWRWKHVHVWDFNV DGGLQJDGULYHUIRUH[DPSOH KDYHWREH GRQHHLWKHUE\WKHVWDFNRZQHURUE\WKHKDQGVHWPDQXIDFWXUHU7KHVWDFNVDUHQRW RSHQVRXUFHVRFKDQJLQJDQ\WKLQJLQWKHVWDFNLVGLIILFXOWDWEHVW0RVW/LQX[ EDVHGSKRQHVWRGDWHKDYHDQRSHQVRXUFHNHUQHO DVUHTXLUHGE\WKH*3/OLFHQVH EXWNHHSRWKHUGHWDLOVRIWKHVRIWZDUHVWDFN DSSOLFDWLRQIUDPHZRUNPXOWLPHGLD IUDPHZRUNDSSOLFDWLRQV SURSULHWDU\ &ORVHGQHWZRUNV 6HULHVDQG:LQGRZV0RELOHGRDOORZWKHDGGLWLRQRIWKLUGSDUW\DSSOLFDWLRQV EXWPRELOHRSHUDWRUVRIWHQORFNWKHKDQGVHWVVRDSSOLFDWLRQVFDQQRWEHDGGHG7KH RSHUDWRUVFODLPWKLVLVQHHGHGWRSUHVHUYHWKHLQWHJULW\RIWKHLUPRELOHQHWZRUNV PDNLQJVXUHWKDWYLUXVHVDQGVSDPDUHQRWLQDGYHUWHQWO\LQVWDOOHGE\HQGXVHUV,W DOVRVXLWVWKHRSHUDWRU¦VEXVLQHVVPRGHOEHFDXVHWKHLUPRELOHSKRQHFXVWRPHUV DUHFRQILQHGWRWKHRSHUDWRUV¦£ZDOOHGJDUGHQ¤RIDSSOLFDWLRQVERWKRQWKHSKRQH DQGLQWKHQHWZRUN$QGURLGLQFOXGHVDQRSHQFDWDORJRIDSSOLFDWLRQV$QGURLG 0DUNHWWKDWXVHUVFDQGRZQORDGRYHUWKHDLUWRWKHLU$QGURLGSKRQHV,WDOVRDOORZV GLUHFWORDGLQJRIDSSOLFDWLRQVYLD86%FRQQHFWLRQ $QGURLGJLYHVGHYHORSHUVDZD\WRGHYHORSXQLTXHFUHDWLYHDSSOLFDWLRQVDQGJHWWKRVH DSSOLFDWLRQV LQ WKH KDQGV RI FXVWRPHUV +XQGUHGV RI WKRXVDQGV RI $QGURLG PRELOH SKRQHXVHUVDUHDOUHDG\WKHUHORRNLQJIRUWKHQH[WFOHYHURUXVHIXODSSOLFDWLRQDQGWKDW DSSOLFDWLRQFRXOGEH\RXUV The Open Handset Alliance *RRJOHDQGRWKHUFRPSDQLHVDQQRXQFHGWKHIRUPDWLRQRIWKH2SHQ+DQGVHW$OOL DQFHRQ1RYHPEHU$FFRUGLQJWRWKHMRLQWSUHVVUHOHDVHIURPWKDWGD\ 7KLVDOOLDQFHVKDUHVDFRPPRQJRDORIIRVWHULQJLQQRYDWLRQRQPRELOHGHYLFHVDQGJLYLQJ FRQVXPHUVDIDUEHWWHUXVHUH[SHULHQFHWKDQPXFKRIZKDWLVDYDLODEOHRQWRGD\¦VPRELOH SODWIRUPV%\SURYLGLQJGHYHORSHUVDQHZOHYHORIRSHQQHVVWKDWHQDEOHVWKHPWRZRUN PRUH FROODERUDWLYHO\ $QGURLG ZLOO DFFHOHUDWH WKH SDFH DW ZKLFK QHZ DQG FRPSHOOLQJ PRELOHVHUYLFHVDUHPDGHDYDLODEOHWRFRQVXPHUV )RUXVDVPRELOHDSSOLFDWLRQGHYHORSHUVWKDWPHDQVZHDUHIUHHWRGHYHORSZKDWHYHU FUHDWLYHPRELOHDSSOLFDWLRQVZHFDQWKLQNRIIUHHWRPDUNHWWKHP RUJLYHWKHPDWRXU RSWLRQ WR$QGURLGPRELOHSKRQHRZQHUVDQGIUHHWRSURILWIURPWKDWHIIRUWDQ\ZD\ 4 | Chapter 1:ಗGetting to Know Android ZHFDQ(DFKPHPEHURIWKH2SHQ+DQGVHW$OOLDQFHKDVLWVRZQUHDVRQVIRUSDUWLFL SDWLQJDQGFRQWULEXWLQJLWVLQWHOOHFWXDOSURSHUW\DQGZHDUHIUHHWREHQHILW 7KH 2SHQ +DQGVHW $OOLDQFH LQWHJUDWHV FRQWULEXWHG VRIWZDUH DQG RWKHU LQWHOOHFWXDO SURSHUW\IURPLWVPHPEHUFRPSDQLHVDQGPDNHVLWDYDLODEOHWRGHYHORSHUVWKURXJKWKH RSHQVRXUFHFRPPXQLW\6RIWZDUHLVOLFHQVHGWKURXJKWKH$SDFKH9OLFHQVHZKLFK \RXFDQVHHDWKWWSZZZDSDFKHRUJOLFHQVHV/,&(16(W[W8VHRIWKH$SDFKHOL FHQVHLVFULWLFDOEHFDXVHLWDOORZVKDQGVHWPDQXIDFWXUHUVWRWDNH$QGURLGFRGHPRGLI\ LWDVQHFHVVDU\DQGWKHQHLWKHUNHHSLWSURSULHWDU\RUUHOHDVHLWEDFNWRWKHRSHQVRXUFH FRPPXQLW\DWWKHLURSWLRQ7KHRULJLQDO$OOLDQFHPHPEHUVLQFOXGHKDQGVHWPDQXIDF WXUHUV +7&/*0RWRUROD6DPVXQJ PRELOHRSHUDWRUV &KLQD0RELOH&RPPXQLFD WLRQV .'', 'R&R0R 6SULQW1H[WHO 70RELOH 7HOHFRP ,WDOLD 7HOHIRQLFD VHPLFRQGXFWRUFRPSDQLHV $XGLHQFH%URDGFRP,QWHO0DUYHOO19LGLD4XDOFRPP 6L5)6\QDSWLFV VRIWZDUHFRPSDQLHV $VFHQGHUH%D\HVPHUWHF*RRJOH/LYLQJ,PDJH /LYH:LUH1XDQFH3DFNHW9LGHR6N\3RS621L92; DQGFRPPHUFLDOL]DWLRQFRP SDQLHV $SOL[ 1RVHU 7$7 :LQG 5LYHU 7KH $OOLDQFH LQFOXGHV WKH PDMRU SDUWQHUV QHHGHG WR GHOLYHU D SODWIRUP IRU PRELOH SKRQH DSSOLFDWLRQV LQ DOO RI WKH PDMRU JHRJUDSKLHV 7KH $OOLDQFH UHOHDVHV VRIWZDUH WKURXJK *RRJOH¦V GHYHORSHU ZHEVLWH KWWSGHYHORSHU DQGURLGFRP 7KH$QGURLG6'.IRUXVHE\DSSOLFDWLRQVRIWZDUHGHYHORSHUVFDQEH GRZQORDGHGGLUHFWO\IURPWKDWZHEVLWH 7KH$QGURLG3ODWIRUP3RUWLQJ.LWIRUXVHE\ KDQGVHWPDQXIDFWXUHUVZKRZDQWWRSRUWWKH$QGURLGSODWIRUPWRDKDQGVHWGHVLJQLV QRWFRYHUHGLQWKLVERRN The Android Execution Environment $SSOLFDWLRQVLQ$QGURLGDUHDELWGLIIHUHQWIURPZKDW\RXPD\EHXVHGWRLQWKHGHVNWRS DQGVHUYHUHQYLURQPHQWV7KHGLIIHUHQFHVDUHGULYHQE\DIHZNH\FRQFHSWVXQLTXHWR WKHPRELOHSKRQHHQYLURQPHQWDQGXQLTXHWR*RRJOH¦VLQWHQWLRQVIRU$QGURLG$V\RX ZULWHDSSOLFDWLRQVIRUDQ$QGURLGKDQGVHW\RXZLOOXVHWKHVHFRQFHSWVWRJXLGHWKH GHVLJQDQGLPSOHPHQWDWLRQRIWKHDSSOLFDWLRQ /LPLWHGUHVRXUFHV 0RELOH SKRQHV WRGD\ DUH YHU\ SRZHUIXO KDQGKHOG FRPSXWHUV EXW WKH\ DUH VWLOO OLPLWHG7KHIXQGDPHQWDOOLPLWDWLRQRIDPRELOHGHYLFHLVEDWWHU\FDSDFLW\(YHU\ FORFNWLFNRIWKHSURFHVVRUHYHU\UHIUHVKRIPHPRU\HYHU\EDFNOLWSL[HORQWKH XVHU¦VVFUHHQWDNHVHQHUJ\IURPWKHEDWWHU\%DWWHU\VL]HLVOLPLWHGDQGXVHUVGRQ¦W OLNHIUHTXHQWEDWWHU\FKDUJLQJ$VDUHVXOWWKHFRPSXWLQJUHVRXUFHVDUHOLPLWHG¢ FORFNUDWHVDUHLQWKHKXQGUHGVRI0+]PHPRU\LVDWEHVWDIHZJLJDE\WHVGDWD VWRUDJHLVDWEHVWDIHZWHQVRIJLJDE\WHV7KURXJKRXWWKLVERRNZHZLOOWDONDERXW WKHPHFKDQLVPVLQFOXGHGLQ$QGURLGWRRSWLPL]HIRUWKHVHOLPLWHGUHVRXUFHV The Android Execution Environment | 5 0RELOHPDVKXSV ,QWKHGHVNWRS,QWHUQHWZRUOGPDVKXSVPDNHLWYHU\HDV\WRFUHDWHQHZDSSOLFDWLRQV E\UHXVLQJWKHGDWDDQGXVHULQWHUIDFHHOHPHQWVSURYLGHGE\H[LVWLQJDSSOLFDWLRQV *RRJOH0DSVLVDJUHDWH[DPSOH\RXFDQHDVLO\FUHDWHDZHEEDVHGDSSOLFDWLRQWKDW LQFRUSRUDWHVPDSVVDWHOOLWHLPDJHU\DQGWUDIILFXSGDWHVXVLQJMXVWDIHZOLQHVRI -DYD6FULSWRQ\RXURZQZHESDJH$QGURLGH[WHQGVWKDWFRQFHSWWRWKHPRELOH SKRQH,QRWKHUPRELOHHQYLURQPHQWVDSSOLFDWLRQVDUHVHSDUDWHDQGZLWKWKHH[ FHSWLRQRIEURZVHUEDVHGDSSOLFDWLRQV\RXDUHH[SHFWHGWRFRGH\RXUDSSOLFDWLRQV VHSDUDWHO\IURPWKHRWKHUDSSOLFDWLRQVWKDWDUHUXQQLQJRQWKHKDQGVHW,Q$QGURLG \RX FDQ HDVLO\ FUHDWH QHZ DSSOLFDWLRQV WKDW LQFRUSRUDWH H[LVWLQJ DSSOLFDWLRQV &KDSWHUIRFXVHVRQWKHVHPRELOHPDVKXSV ,QWHUFKDQJHDEOHDSSOLFDWLRQV ,QRWKHUPRELOHVRIWZDUHHQYLURQPHQWVDSSOLFDWLRQVDUHFRGHGWRDFFHVVGDWDIURP VSHFLILFGDWDSURYLGHUV,I\RXQHHGWRVHQGDQHPDLOIURPD:LQGRZV0RELOHDS SOLFDWLRQIRUH[DPSOH\RXFRGHH[SOLFLWUHIHUHQFHVWR3RFNHW2XWORRN¦VHPDLOLQ WHUIDFHDQGVHQGWKHHPDLOWKDWZD\%XWZKDWLIWKHXVHUZDQWVWRXVHDQRWKHU HPDLOFOLHQW" $QGURLGLQFRUSRUDWHVDIXQGDPHQWDOPHFKDQLVP ,QWHQWV WKDWLVLQGHSHQGHQWRI VSHFLILFDSSOLFDWLRQLPSOHPHQWDWLRQV,QDQ$QGURLGDSSOLFDWLRQ\RXGRQ¦WVD\\RX ZDQWWRVHQGHPDLOWKURXJKDVSHFLILFDSSOLFDWLRQLQVWHDG\RXVD\\RXZDQWWR VHQG DQ HPDLO WKURXJK ZKDWHYHU DSSOLFDWLRQ LV DYDLODEOH 7KH RSHUDWLQJ V\VWHP WDNHVFDUHRIILJXULQJRXWZKDWDSSOLFDWLRQFDQVHQGHPDLOVVWDUWVWKDWDSSOLFDWLRQ LIQHHGHGDQGFRQQHFWV\RXUUHTXHVWVRWKHHPDLOFDQEHVHQW7KHXVHUFDQVXE VWLWXWHGLIIHUHQWEURZVHUVGLIIHUHQW03SOD\HUVRUGLIIHUHQWHPDLOFOLHQWVDWZLOO DQG$QGURLGDGDSWVDXWRPDWLFDOO\ Components of an Android Application <RXU$QGURLGDSSOLFDWLRQVZLOOEHEXLOWIURPIRXUEDVLFFRPSRQHQWW\SHVWKDWDUHGH ILQHGE\WKH$QGURLGDUFKLWHFWXUH $FWLYLWLHV 7KHVHDUHFRPSDUDEOHWRVWDQGDORQHXWLOLWLHVRQGHVNWRSV\VWHPVVXFKDVRIILFH DSSOLFDWLRQV$FWLYLWLHVDUHSLHFHVRIH[HFXWDEOHFRGHWKDWFRPHDQGJRLQWLPH LQVWDQWLDWHGE\HLWKHUWKHXVHURUWKHRSHUDWLQJV\VWHPDQGUXQQLQJDVORQJDVWKH\ DUHQHHGHG7KH\FDQLQWHUDFWZLWKWKHXVHUDQGUHTXHVWGDWDRUVHUYLFHVIURPRWKHU DFWLYLWLHVRUVHUYLFHVYLDTXHULHVRU,QWHQWV GLVFXVVHGLQDPRPHQW 0RVWRIWKHH[HFXWDEOHFRGH\RXZULWHIRU$QGURLGZLOOH[HFXWHLQWKHFRQWH[WRI DQ$FWLYLW\$FWLYLWLHVXVXDOO\FRUUHVSRQGWRGLVSOD\VFUHHQVHDFK$FWLYLW\VKRZV RQHVFUHHQWRWKHXVHU:KHQLWLVQRWDFWLYHO\UXQQLQJDQ$FWLYLW\FDQEHNLOOHGE\ WKHRSHUDWLQJV\VWHPWRFRQVHUYHPHPRU\ 6 | Chapter 1:ಗGetting to Know Android 6HUYLFHV 7KHVHDUHDQDORJRXVWRVHUYLFHVRUGDHPRQVLQGHVNWRSDQGVHUYHURSHUDWLQJV\V WHPV7KH\DUHH[HFXWDEOHSLHFHVRIFRGHWKDWXVXDOO\UXQLQWKHEDFNJURXQGIURP WKHWLPHRIWKHLULQVWDQWLDWLRQXQWLOWKHPRELOHKDQGVHWLVVKXWGRZQ7KH\JHQHUDOO\ GRQ¦WH[SRVHDXVHULQWHUIDFH 7KHFODVVLFH[DPSOHRID6HUYLFHLVDQ03SOD\HUWKDWQHHGVWRNHHSSOD\LQJTXHXHG ILOHVHYHQZKLOHWKHXVHUKDVJRQHRQWRXVHRWKHUDSSOLFDWLRQV<RXUDSSOLFDWLRQ PD\QHHGWRLPSOHPHQW6HUYLFHVWRSHUIRUPEDFNJURXQGWDVNVWKDWSHUVLVWZLWKRXW DXVHULQWHUIDFH %URDGFDVWDQG,QWHQW5HFHLYHUV 7KHVH UHVSRQG WR UHTXHVWV IRU VHUYLFH IURP DQRWKHU DSSOLFDWLRQ $ %URDGFDVW 5HFHLYHUUHVSRQGVWRDV\VWHPZLGHDQQRXQFHPHQWRIDQHYHQW7KHVHDQQRXQFH PHQWVFDQFRPHIURP$QGURLGLWVHOI HJEDWWHU\ORZ RUIURPDQ\SURJUDPUXQ QLQJRQWKHV\VWHP$Q$FWLYLW\RU6HUYLFHSURYLGHVRWKHUDSSOLFDWLRQVZLWKDFFHVV WRLWVIXQFWLRQDOLW\E\H[HFXWLQJDQ,QWHQW5HFHLYHUDVPDOOSLHFHRIH[HFXWDEOHFRGH WKDWUHVSRQGVWRUHTXHVWVIRUGDWDRUVHUYLFHVIURPRWKHUDFWLYLWLHV7KHUHTXHVWLQJ FOLHQW DFWLYLW\LVVXHVDQ,QWHQWOHDYLQJLWXSWRWKH$QGURLGIUDPHZRUNWRILJXUH RXWZKLFKDSSOLFDWLRQVKRXOGUHFHLYHDQGDFWRQLW ,QWHQWVDUHRQHRIWKHNH\DUFKLWHFWXUDOHOHPHQWVLQ$QGURLGWKDWIDFLOLWDWHWKHFUH DWLRQRIQHZDSSOLFDWLRQVIURPH[LVWLQJDSSOLFDWLRQV PRELOHPDVKXSV <RXZLOO XVH,QWHQWVLQ\RXUDSSOLFDWLRQWRLQWHUDFWZLWKRWKHUDSSOLFDWLRQVDQGVHUYLFHVWKDW SURYLGHLQIRUPDWLRQQHHGHGE\\RXUDSSOLFDWLRQ,QWHQWVDQG,QWHQW5HFHLYHUVDUH FRYHUHGLQPRUHGHWDLOLQ&KDSWHU &RQWHQWSURYLGHUV 7KHVHDUHFUHDWHGWRVKDUHGDWDZLWKRWKHUDFWLYLWLHVRUVHUYLFHV$FRQWHQWSURYLGHU XVHVDVWDQGDUGLQWHUIDFHLQWKHIRUPRID85,WRIXOILOOUHTXHVWVIRUGDWDIURPRWKHU DSSOLFDWLRQVWKDWPD\QRWHYHQNQRZZKLFKFRQWHQWSURYLGHUWKH\DUHXVLQJ)RU H[DPSOH ZKHQ DQ DSSOLFDWLRQ LVVXHV D TXHU\ IRU &RQWDFW GDWD LW DGGUHVVHV WKH TXHU\WRD85,RIWKHIRUP content://contacts/people 7KHRSHUDWLQJV\VWHPORRNVWRVHHZKLFKDSSOLFDWLRQVKDYHUHJLVWHUHGWKHPVHOYHV DVFRQWHQWSURYLGHUVIRUWKHJLYHQ85,DQGVHQGVWKHUHTXHVWWRWKHDSSURSULDWH DSSOLFDWLRQ VWDUWLQJWKHDSSOLFDWLRQLILWLVQRWDOUHDG\UXQQLQJ ,IWKHUHLVPRUH WKDQRQHFRQWHQWSURYLGHUUHJLVWHUHGIRUWKHUHTXHVWHG85,WKHRSHUDWLQJV\VWHP DVNVWKHXVHUZKLFKRQHKHZDQWVWRXVH $QDSSOLFDWLRQGRHVQ¦WKDYHWRXVHDOORIWKH$QGURLGFRPSRQHQWVEXWDZHOOZULWWHQ DSSOLFDWLRQZLOOPDNHXVHRIWKHPHFKDQLVPVSURYLGHGUDWKHUWKDQUHLQYHQWLQJIXQF WLRQDOLW\RUKDUGFRGLQJUHIHUHQFHVWRRWKHUDSSOLFDWLRQV85,VDQG,QWHQWVWRJHWKHUDO ORZ$QGURLGWRSURYLGHDYHU\IOH[LEOHXVHUHQYLURQPHQW$SSOLFDWLRQVFDQEHHDVLO\ DGGHG GHOHWHG DQG VXEVWLWXWHG DQG WKH ORRVH FRXSOLQJ RI LQWHQWV DQG 85,V NHHSV HYHU\WKLQJZRUNLQJWRJHWKHU Components of an Android Application | 7 Start activity User navigates back to activity onCreate() onStart() onRestart() NO In foreground? Process is killed Activity becomes YES visible Activity comes onResume() to foreground Activity interacts with user onPause() Activity no longer visible onStop() onDestroy() Activity exits )LJXUH$QGURLG$FWLYLW\OLIHF\FOH Android Activity Lifecycle $QGURLGLVGHVLJQHGDURXQGWKHXQLTXHUHTXLUHPHQWVRIPRELOHDSSOLFDWLRQV,QSDU WLFXODU$QGURLGUHFRJQL]HVWKDWUHVRXUFHV PHPRU\DQGEDWWHU\IRUH[DPSOH DUHOLPL WHGRQPRVWPRELOHGHYLFHVDQGSURYLGHVPHFKDQLVPVWRFRQVHUYHWKRVHUHVRXUFHV7KH PHFKDQLVPVDUHHYLGHQWLQWKH$QGURLG$FWLYLW\/LIHF\FOHZKLFKGHILQHVWKHVWDWHVRU HYHQWVWKDWDQDFWLYLW\JRHVWKURXJKIURPWKHWLPHLWLVFUHDWHGXQWLOLWILQLVKHVUXQQLQJ 7KHOLIHF\FOHLVVKRZQGLDJUDPPDWLFDOO\LQ)LJXUH <RXUDFWLYLW\PRQLWRUVDQGUHDFWVWRWKHVHHYHQWVE\LQVWDQWLDWLQJPHWKRGVWKDWRYHUULGH WKH$FWLYLW\FODVVPHWKRGVIRUHDFKHYHQW onCreate &DOOHGZKHQ\RXUDFWLYLW\LVILUVWFUHDWHG7KLVLVWKHSODFH\RXQRUPDOO\FUHDWH\RXU YLHZVRSHQDQ\SHUVLVWHQWGDWDILOHV\RXUDFWLYLW\QHHGVWRXVHDQGLQJHQHUDOLQL WLDOL]H\RXUDFWLYLW\:KHQFDOOLQJ onCreateWKH$QGURLGIUDPHZRUNLVSDVVHGD Bundle REMHFW WKDW FRQWDLQV DQ\ DFWLYLW\ VWDWH VDYHG IURP ZKHQ WKH DFWLYLW\ UDQ EHIRUH 8 | Chapter 1:ಗGetting to Know Android onStart &DOOHGMXVWEHIRUH\RXUDFWLYLW\EHFRPHVYLVLEOHRQWKHVFUHHQ2QFHonStartFRP SOHWHVLI\RXUDFWLYLW\FDQEHFRPHWKHIRUHJURXQGDFWLYLW\RQWKHVFUHHQFRQWURO ZLOOWUDQVIHUWRonResume,IWKHDFWLYLW\FDQQRWEHFRPHWKHIRUHJURXQGDFWLYLW\IRU VRPHUHDVRQFRQWUROWUDQVIHUVWRWKHonStopPHWKRG onResume &DOOHGULJKWDIWHUonStartLI\RXUDFWLYLW\LVWKHIRUHJURXQGDFWLYLW\RQWKHVFUHHQ $WWKLVSRLQW\RXUDFWLYLW\LVUXQQLQJDQGLQWHUDFWLQJZLWKWKHXVHU<RXDUHUHFHLYLQJ NH\ERDUG DQG WRXFK LQSXWV DQG WKH VFUHHQ LV GLVSOD\LQJ \RXU XVHU LQWHUIDFH onResumeLVDOVRFDOOHGLI\RXUDFWLYLW\ORVHVWKHIRUHJURXQGWRDQRWKHUDFWLYLW\DQG WKDWDFWLYLW\HYHQWXDOO\H[LWVSRSSLQJ\RXUDFWLYLW\EDFNWRWKHIRUHJURXQG7KLVLV ZKHUH\RXUDFWLYLW\ZRXOGVWDUW RUUHVXPH GRLQJWKLQJVWKDWDUHQHHGHGWRXSGDWH WKH XVHU LQWHUIDFH UHFHLYLQJ ORFDWLRQ XSGDWHV RU UXQQLQJ DQ DQLPDWLRQ IRU H[DPSOH onPause &DOOHGZKHQ$QGURLGLVMXVWDERXWWRUHVXPHDGLIIHUHQWDFWLYLW\JLYLQJWKDWDFWLYLW\ WKHIRUHJURXQG$WWKLVSRLQW\RXUDFWLYLW\ZLOOQRORQJHUKDYHDFFHVVWRWKHVFUHHQ VR\RXVKRXOGVWRSGRLQJWKLQJVWKDWFRQVXPHEDWWHU\DQG&38F\FOHVXQQHFHVVD ULO\,I\RXDUHUXQQLQJDQDQLPDWLRQQRRQHLVJRLQJWREHDEOHWRVHHLWVR\RX PLJKWDVZHOOVXVSHQGLWXQWLO\RXJHWWKHVFUHHQEDFN<RXUDFWLYLW\QHHGVWRWDNH DGYDQWDJHRIWKLVPHWKRGWRVWRUHDQ\VWDWHWKDW\RXZLOOQHHGLQFDVH\RXUDFWLYLW\ JDLQVWKHIRUHJURXQGDJDLQ¢DQGLWLVQRWJXDUDQWHHGWKDW\RXUDFWLYLW\ZLOOUHVXPH ,IWKHPRELOHGHYLFH\RXDUHUXQQLQJRQUXQVRXWRIPHPRU\WKHUHLVQRYLUWXDO PHPRU\RQGLVNWRXVHIRUH[SDQVLRQVR\RXUDFWLYLW\PD\KDYHWRPDNHZD\IRU DV\VWHPSURFHVVWKDWQHHGVPHPRU\2QFH\RXH[LWWKLVPHWKRG$QGURLGPD\NLOO \RXUDFWLYLW\DWDQ\WLPHZLWKRXWUHWXUQLQJFRQWUROWR\RX onStop &DOOHGZKHQ\RXUDFWLYLW\LVQRORQJHUYLVLEOHHLWKHUEHFDXVHDQRWKHUDFWLYLW\KDV WDNHQWKHIRUHJURXQGRUEHFDXVH\RXUDFWLYLW\LVEHLQJGHVWUR\HG onDestroy 7KHODVWFKDQFHIRU\RXUDFWLYLW\WRGRDQ\SURFHVVLQJEHIRUHLWLVGHVWUR\HG1RU PDOO\\RX¦GJHWWRWKLVSRLQWEHFDXVHWKHDFWLYLW\LVGRQHDQGWKHIUDPHZRUNFDOOHG LWVfinishPHWKRG%XWDVPHQWLRQHGHDUOLHUWKHPHWKRGPLJKWEHFDOOHGEHFDXVH $QGURLGKDVGHFLGHGLWQHHGVWKHUHVRXUFHV\RXUDFWLYLW\LVFRQVXPLQJ ,WLVLPSRUWDQWWRWDNHDGYDQWDJHRIWKHVHPHWKRGVWRSURYLGHWKHEHVWXVHUH[SHULHQFH SRVVLEOH 7KLV LV WKH ILUVW SODFH LQ WKLV ERRN ZH¦YH GLVFXVVHG KRZ SURJUDPPLQJ IRU PRELOHGHYLFHVLVGLIIHUHQWIURPSURJUDPPLQJIRUGHVNWRSGHYLFHVDQGWKHUHZLOOEH PDQ\PRUHVXFKSODFHVDV\RXJRWKURXJKODWHUFKDSWHUV<RXUXVHUVZLOODSSUHFLDWHLW LI\RXZULWH\RXUDFWLYLWLHVZLWKWKHDFWLYLW\OLIHF\FOHLQPLQGDQG\RXZLOOXOWLPDWHO\ EHQHILW Android Activity Lifecycle | 9 Android Service Lifecycle 7KHOLIHF\FOHIRUDVHUYLFHLVVLPLODUWRWKDWIRUDQDFWLYLW\EXWGLIIHUHQWLQDIHZLPSRUWDQW GHWDLOV onCreateDQGonStartGLIIHUHQFHV 6HUYLFHV FDQ EH VWDUWHG ZKHQ D FOLHQW FDOOV WKH Context.startService(Intent) PHWKRG ,I WKH VHUYLFH LVQ¦W DOUHDG\ UXQQLQJ $QGURLG VWDUWV LW DQG FDOOV LWV onCreatePHWKRGIROORZHGE\WKHonStartPHWKRG,IWKHVHUYLFHLVDOUHDG\UXQQLQJ LWVonStartPHWKRGLVLQYRNHGDJDLQZLWKWKHQHZLQWHQW6RLW¦VTXLWHSRVVLEOHDQG QRUPDOIRUDVHUYLFH¦VonStartPHWKRGWREHFDOOHGUHSHDWHGO\LQDVLQJOHUXQRIWKH VHUYLFH onResumeonPauseDQGonStopDUHQRWQHHGHG 5HFDOOWKDWDVHUYLFHJHQHUDOO\KDVQRXVHULQWHUIDFHVRWKHUHLVQ¦WDQ\QHHGIRUWKH onPauseonResumeRUonStopPHWKRGV:KHQHYHUDVHUYLFHLVUXQQLQJLWLVDOZD\V LQWKHEDFNJURXQG onBind ,IDFOLHQWQHHGVDSHUVLVWHQWFRQQHFWLRQWRDVHUYLFHLWFDQFDOOWKH Context.bind ServicePHWKRG7KLVFUHDWHVWKHVHUYLFHLILWLVQRWUXQQLQJDQGFDOOVonCreateEXW QRW onStart,QVWHDGWKH onBindPHWKRGLVFDOOHGZLWKWKHFOLHQW¦VLQWHQWDQGLW UHWXUQVDQIBindREMHFWWKDWWKHFOLHQWFDQXVHWRPDNHIXUWKHUFDOOVWRWKHVHUYLFH ,W¦VTXLWHQRUPDOIRUDVHUYLFHWRKDYHFOLHQWVVWDUWLQJLWDQGFOLHQWVERXQGWRLWDW WKHVDPHWLPH onDestroy $VZLWKDQDFWLYLW\WKHonDestroyPHWKRGLVFDOOHGZKHQWKHVHUYLFHLVDERXWWREH WHUPLQDWHG$QGURLGZLOOWHUPLQDWHDVHUYLFHZKHQWKHUHDUHQRPRUHFOLHQWVVWDUWLQJ RU ERXQG WR LW $V ZLWK DFWLYLWLHV $QGURLG PD\ DOVR WHUPLQDWH D VHUYLFH ZKHQ PHPRU\LVJHWWLQJORZ,IWKDWKDSSHQV$QGURLGZLOODWWHPSWWRUHVWDUWWKHVHUYLFH ZKHQWKHPHPRU\SUHVVXUHSDVVHVVRLI\RXUVHUYLFHQHHGVWRVWRUHSHUVLVWHQWLQ IRUPDWLRQIRUWKDWUHVWDUWLW¦VEHVWWRGRVRLQWKHonStartPHWKRG How This Book Fits Together $QGURLGLVDVRSKLVWLFDWHGSODWIRUPZKRVHSDUWVDOOZRUNWRJHWKHUGUDZLQJDQGOD\RXW LQWHUSURFHVVFRPPXQLFDWLRQDQGGDWDVWRUDJHVHDUFKDQGORFDWLRQ,QWURGXFLQJLWLQ SLHFHVLVDFKDOOHQJHEXWZH¦YHHQWHUWDLQHGWKHFRQFHLWRILQWURGXFLQJWKHFRPSOH[LWLHV RIWKHSODWIRUPLQDOLQHDURUGHU 7KHSODWIRUPLVDOVRVRULFKWKDWZHFDQ¦WKRSHWRVKRZ\RXKRZWRXVHHYHU\WKLQJ\RX ZDQWRUHYHQDODUJHVXEVHWRILWVFDSDELOLWLHV:HH[SHFW\RXWRFRQVXOWWKHRIILFLDO GRFXPHQWDWLRQZKLOHUHDGLQJWKLVERRNDQGWU\LQJWKHH[DPSOHV<RXVKRXOGDOVRXVH RWKHURQOLQHUHVRXUFHV¢EXWEHFDUHIXODERXWZHESDJHVRUIRUXPSRVWLQJVWKDWKDYH 10 | Chapter 1:ಗGetting to Know Android EHHQDURXQGDZKLOHEHFDXVHLQWHUIDFHVFKDQJH7KHUHLVDOVRDVXEVWDQWLDODPRXQWRI PLVLQIRUPDWLRQRXWRQWKH:HEZHGLVFRYHUHGVFDGVRILWZKLOHZULWLQJWKHERRN 7KLVERRNLVZULWWHQIRUH[SHULHQFHGGHYHORSHUVZKRZDQWWRTXLFNO\OHDUQZKDWWKH\ QHHGWRNQRZWREXLOG$QGURLGDSSOLFDWLRQV7KHERRNLVZULWWHQZLWKUHIHUHQFHVWRDQ H[DPSOHDSSOLFDWLRQ 0-$QGURLGGLVFXVVHGLQPXFKPRUHGHWDLOLQWKHQH[WFKDSWHU WKDW\RXFDQIUHHO\GRZQORDGDQGUHXVH7KHPDMRUWRSLFVFRYHUHGLQWKHERRNLQFOXGH 1HZ$QGURLGFRQFHSWV $QGURLGEXLOGVXSRQDORWRIOHJDF\WHFKQRORJ\ -DYD/LQX[DQGWKH,QWHUQHWMXVW WRQDPHDIHZ EXWLWDOVRLQWURGXFHVVRPHQHZFRQFHSWVQHHGHGWRHQDEOHWKH DSSOLFDWLRQHQYLURQPHQW $QGURLGGHYHORSPHQWHQYLURQPHQW :H¦OOVKRZKRZWRLQVWDOOWKHIUHHRSHQVRXUFH$QGURLGGHYHORSPHQWHQYLURQPHQW RQ\RXURZQV\VWHPDQGKRZWRXVHWKDWHQYLURQPHQWWRGHYHORSWHVWDQGGHEXJ \RXURZQDSSOLFDWLRQV<RX¦OOQRWRQO\OHDUQWKHPHFKDQLFVRIXVLQJWKHV\VWHP EXWDOVRZKDW¦VJRLQJRQEHKLQGWKHVFHQHVVR\RX¦OOKDYHDEHWWHUXQGHUVWDQGLQJ RIKRZWKHZKROHV\VWHPILWVWRJHWKHU $QGURLGXVHULQWHUIDFH 7KH$QGURLGXVHULQWHUIDFHHOHPHQWVDUHVLPLODUWRWKLQJV\RX¦YHVHHQEHIRUHEXW DOVRGLIIHUHQW:H¦OOVKRZ\RXZKDWWKHSULQFLSDOHOHPHQWVDUHKRZWKH\¦UHXVHG DQGZKDWWKH\ORRNOLNHRQWKHVFUHHQ:H¦OODOVRVKRZ\RXWKHEDVLFOD\RXWW\SHV DYDLODEOHIRUWKH$QGURLGVFUHHQ ,QWHQWV $QGURLGPDNHVLWHDV\WROHYHUDJHH[LVWLQJDSSOLFDWLRQVWKURXJKWKHXVHRI,QWHQWV )RUH[DPSOHLI\RXZDQWWRGLDODSKRQHQXPEHU\RXGRQ¦WKDYHWRGRDOOWKHZRUN LQ\RXUDSSOLFDWLRQRUHYHQNQRZZKDWDSSOLFDWLRQVDUHDYDLODEOHWKDWNQRZKRZ WRGLDO<RXFDQMXVWDVN$QGURLGWRILQG\RXDQLQVWDOOHGDSSOLFDWLRQWKDWNQRZV KRZWRGLDORXWDQGSDVVLWWKHVWULQJRIQXPEHUV /RFDWLRQEDVHGVHUYLFHVDQGPDSSLQJ $V\RX¦GH[SHFWIURPD*RRJOHVSRQVRUHGHQYLURQPHQWPDSSLQJDQGORFDWLRQDUH PDMRUIHDWXUHVRI$QGURLG<RX¦OOVHHKRZHDV\LWLVWRFUHDWHVRSKLVWLFDWHGPDSSLQJ DQGORFDWLRQEDVHGDSSOLFDWLRQV 3HUVLVWHQWGDWD $QGURLGLQFOXGHVWKHSQLiteGDWDEDVHOLEUDULHVDQGWRROVZKLFK\RXUDSSOLFDWLRQ FDQ XVH WR VWRUH SHUVLVWHQW GDWD &RQWHQW SURYLGHUV ZKLFK ZH¦YH DOUHDG\ LQWUR GXFHGSURYLGHGDWDWRRWKHUDSSOLFDWLRQV8VLQJWKHOLEUDULHVFDQEHDOLWWOHWULFN\ EXWLQ&KDSWHUZH¦OOJXLGH\RXWKURXJKWKHFUHDWLRQRIDGDWDEDVHDQGUHDGLQJ ZULWLQJDQGGHOHWLQJGDWDUHFRUGV *UDSKLFV <RXUDSSOLFDWLRQKDVDFFHVVWR'DQG'JUDSKLFVFDSDELOLWLHVLQ$QGURLG$QL PDWLRQDQGYDULRXVDGYDQFHGHIIHFWVDUHDOVRSURYLGHG7KLVERRNZLOOVKRZ\RX How This Book Fits Together | 11 KRZWRXVHWKRVHOLEUDULHVVR\RXFDQEXLOGDFRPSHOOLQJXVHULQWHUIDFHIRU\RXU DSSOLFDWLRQ &RPPXQLFDWLRQV $QGURLGHYHQPRUHWKDQPRVWVPDUWSKRQHRSHUDWLQJV\VWHPVSODFHVJUHDWHP SKDVLVRQFRPPXQLFDWLRQ¢E\YRLFHE\WH[WPHVVDJLQJE\LQVWDQWPHVVDJLQJDQG E\,QWHUQHW<RX¦OOVHHKRZ\RXUDSSOLFDWLRQFDQWDNHDGYDQWDJHRIWKHVHFDSDELOLWLHV VR\RXUXVHUVFDQEHFRPHSDUWRIDODUJHUFRPPXQLW\RIGDWDDQGXVHUV 7KHQH[WWKUHHFKDSWHUV&KDSWHUVWKURXJKVHW\RXXSZLWKDZRUNLQJDSSOLFDWLRQ DQG ZLOO JLYH \RX D VHQVH RI KRZ WKH ILOHV DQG EDVLF FODVVHV ILW WRJHWKHU &KDSWHU HPSRZHUV\RXWREHWWHUXQGHUVWDQGZKDW\RX¦UHGRLQJDQGKHOSV\RXGHEXJ\RXUILUVW HIIRUWV 7KH$QGURLGWRRONLWQDWXUDOO\FRPHVZLWKDQHQRUPRXVQXPEHURIZRUNLQJFRGHH[ DPSOHV LQ LWV $SL'HPRV DSSOLFDWLRQ 8QIRUWXQDWHO\ LWV YHU\ VL]H DQG VRSKLVWLFDWLRQ PDNHLWDIRUPLGDEOHFDVWOHIRUQRYLFHVWRHQWHU&KDSWHUJXLGHV\RXWKURXJKLW $ELWRIH[SHULHQFHZLWK$SL'HPRVZLOOFRQYLQFH\RXWKDW\RXQHHGVRPHPRUHEDFN JURXQGDQGWXWRULDOKHOS,Q&KDSWHUZH¦OOVKRZ\RXKRZWRVLJQDQGSXEOLVK\RXU DSSOLFDWLRQZKLFK\RXQHHGWRGRLQRUGHUWRWHVWLWZLWK*RRJOH0DSVHYHQEHIRUH \RX¦UHUHDG\WRJRSXEOLF &KDSWHUSUHVHQWVWXWRULDOVRQWZRGDWDVWRUDJHV\VWHPV &KDSWHUSUHVHQWVORFDWLRQDQGPDSSLQJZKLFKDUHNH\IHDWXUHVWKDWGUDZSHRSOHWR PRELOHGHYLFHVDQGZKLFK\RX¦OOVXUHO\ZDQWWRLQFRUSRUDWHLQWR\RXUDSSOLFDWLRQ :H WKHQ WXUQ WR D FULWLFDO SDUW RI DQ\ HQGXVHU DSSOLFDWLRQ JUDSKLFV LQ WKUHH LQIRUPDWLRQSDFNHGFKDSWHUV&KDSWHUVWKURXJK &KDSWHUWDNHVDQRWKHUVWHSLQWRWKHFRPSOH[LW\DQGXQLTXHSRZHURI$QGURLGE\ GLVFXVVLQJKRZDSSOLFDWLRQVFDQRIIHUIXQFWLRQDOLW\WRRWKHUDSSOLFDWLRQV7KLVDOORZV IRUSRZHUIXOPDVKXSVZKLFKLQYROYHRQHSURJUDPVWDQGLQJRQWKHVKRXOGHUVRIRWKHU SURJUDPV /HW¦VQRWIRUJHWWKDW$QGURLGUXQVRQWHOHSKRQHV&KDSWHUVDQGZUDSXSWKHERRN E\VKRZLQJ\RXKRZWRSODFHDQGWUDFNSKRQHFDOOV 7KHUH¦VHYHQPRUHWR$QGURLGWKDQWKHVHIHDWXUHVRIFRXUVHEXWSURJUDPPHUVRIDOO VWULSHVZLOOILQGLQWKLVERRNZKDWWKH\QHHGWRFUHDWHXVHIXODQGHIILFLHQWSURJUDPVIRU WKH$QGURLGSODWIRUP 12 | Chapter 1:ಗGetting to Know Android CHAPTER 2 Setting Up Your Android Development Environment Setting Up Your Development Environment $QGURLGDSSOLFDWLRQVOLNHPRVWPRELOHSKRQHDSSOLFDWLRQVDUHGHYHORSHGLQDKRVW WDUJHWGHYHORSPHQWHQYLURQPHQW,QRWKHUZRUGV\RXGHYHORS\RXUDSSOLFDWLRQRQD KRVW FRPSXWHU ZKHUH UHVRXUFHV DUH DEXQGDQW DQG GRZQORDG LW WR D WDUJHW PRELOH SKRQHIRUWHVWLQJDQGXOWLPDWHXVH$SSOLFDWLRQVFDQEHWHVWHGDQGGHEXJJHGHLWKHURQ DUHDO$QGURLGGHYLFHRURQDQHPXODWRU)RUPRVWGHYHORSHUVXVLQJDQHPXODWRULV HDVLHUIRULQLWLDOGHYHORSPHQWDQGGHEXJJLQJIROORZHGE\ILQDOWHVWLQJRQUHDOGHYLFHV 7RZULWH\RXURZQ$QGURLGPRELOHSKRQHDSSOLFDWLRQV\RX¦OOILUVWQHHGWRFROOHFWWKH UHTXLUHGWRROVDQGVHWXSDQDSSURSULDWHGHYHORSPHQWHQYLURQPHQWRQ\RXU3&RU0DF ,QWKLVFKDSWHUZH¦OOFROOHFWWKHWRROV\RXQHHGGRZQORDGWKHPDQGLQVWDOOWKHPRQ \RXUFRPSXWHUDQGZULWHDVDPSOHDSSOLFDWLRQWKDWZLOOOHW\RXJHWWKHIHHORIZULWLQJ DQGUXQQLQJ$QGURLGDSSOLFDWLRQVRQDQHPXODWRU/LQX[:LQGRZVDQG26;DUHDOO VXSSRUWHGGHYHORSPHQWHQYLURQPHQWVDQGZH¦OOVKRZ\RXKRZWRLQVWDOOWKHODWHVWVHW RIWRROVRQHDFK7KHQZH¦OOVKRZ\RXDQ\FRQILJXUDWLRQ\RXQHHGWRGRDIWHULQVWDOOLQJ WKHWRROV VHWWLQJ3$7+HQYLURQPHQWYDULDEOHVDQGWKHOLNH DJDLQIRUHDFKRIWKHWKUHH RSHUDWLQJV\VWHPV)LQDOO\ZH¦OOZULWHDVKRUWOLWWOH£+HOOR$QGURLG¤DSSOLFDWLRQWKDW GHPRQVWUDWHVZKDWQHHGVWREHGRQHLQRUGHUWRJHWDJHQHULFDSSOLFDWLRQUXQQLQJ 7KH $QGURLG 6'. VXSSRUWV VHYHUDO GLIIHUHQW LQWHJUDWHG GHYHORSPHQW HQYLURQPHQWV ,'(V )RUWKLVERRNZHZLOOIRFXVRQ(FOLSVHEHFDXVHLWLVWKH,'(WKDWLVEHVWLQWHJUDWHG ZLWKWKH6'.DQGKH\LW¦VIUHH1RPDWWHUZKLFKRSHUDWLQJV\VWHP\RXDUHXVLQJ\RX ZLOOQHHGHVVHQWLDOO\WKHVDPHVHWRIWRROV 7KH(FOLSVH,'( 6XQ¦V-DYD'HYHORSPHQW.
7KH$QGURLG6RIWZDUH'HYHORSHU¦V. 7KH$QGURLG'HYHORSHU7RRO $'7 DVSHFLDO(FOLSVHSOXJLQ 13 6LQFH\RX¦UHSUREDEO\JRLQJWRGHYHORSRQRQO\RQHRIWKHKRVWRSHUDWLQJV\VWHPVVNLS WRWKHDSSURSULDWHVHFWLRQWKDWSHUWDLQVWR\RXUVHOHFWHGRSHUDWLQJV\VWHP Creating an Android Development Environment 7KH $QGURLG 6RIWZDUH 'HYHORSPHQW .LW VXSSRUWV :LQGRZV ;3 DQG 9LVWD /LQX[ WHVWHGRQ8EXQWX'DSSHU'UDNHEXWDQ\UHFHQW/LQX[GLVWURVKRXOGZRUN DQG0DF 26; RUODWHU,QWHOSODWIRUPRQO\ DVKRVWGHYHORSPHQWHQYLURQPHQWV,QVWDO ODWLRQRIWKH6'.LVVXEVWDQWLDOO\WKHVDPHIRUDQ\RIWKHRSHUDWLQJV\VWHPVDQGPRVW RIWKLVGHVFULSWLRQDSSOLHVHTXDOO\WRDOORIWKHP:KHUHWKHSURFHGXUHGLIIHUVZHZLOO FOHDUO\WHOO\RXZKDWWRGRIRUHDFKHQYLURQPHQW ,QVWDOO-'.YHUVLRQRUYHUVLRQ,I\RXDOUHDG\ KDYHRQHRIWKRVHLQVWDOOHGVNLSWRWKHQH[WVWHS,QSDUWLFXODU0DF26;FRPHV ZLWKWKH-'.YHUVLRQDOUHDG\LQVWDOOHGDQGPDQ\/LQX[GLVWULEXWLRQVLQFOXGHD -'.LVQRWLQVWDOOHGJRWRKWWSMDYDVXQFRPMDYDVHGRZQORDGVDQG \RX¦OOVHHDOLVWRI-DYDSURGXFWVWRGRZQORDG<RXZDQW-'.8SGDWHQIRU\RXU RSHUDWLQJV\VWHPZKHUHQLVDWWKHWLPHRIWKLVZULWLQJ :LQGRZV ;3DQG9LVWD 6HOHFWWKHGLVWULEXWLRQIRU£:LQGRZV2IIOLQH,QVWDOODWLRQ0XOWLODQJXDJH¤ 5HDGUHYLHZDQGDFFHSW6XQ¦VOLFHQVHIRUWKH-'. 7KHOLFHQVHKDVEHFRPH YHU\SHUPLVVLYHEXWLI\RXKDYHDSUREOHPZLWKLWDOWHUQDWLYHIUHH-'.V H[LVW 2QFHWKHGRZQORDGLVFRPSOHWHDGLDORJER[ZLOODVN\RXZKHWKHU\RXZDQW WRUXQWKHGRZQORDGHGH[HFXWDEOH:KHQ\RXVHOHFW£5XQ¤WKH:LQGRZV ,QVWDOOHUZLOOVWDUWXSDQGOHDG\RXWKURXJKDGLDORJWRLQVWDOOWKH-'.RQ \RXU3& /LQX[ 6HOHFWWKHGLVWULEXWLRQIRU£/LQX[VHOIH[WUDFWLQJILOH¤ 5HDGUHYLHZDQGDFFHSW6XQ¦VOLFHQVHIRUWKH-'. 7KHOLFHQVHKDVEHFRPH YHU\SHUPLVVLYHEXWLI\RXKDYHDSUREOHPZLWKLWDOWHUQDWLYHIUHH-'.V H[LVW <RX ZLOO QHHG WR GRZQORDG WKH VHOIH[WUDFWLQJ ELQDU\ WR WKH ORFDWLRQ LQ ZKLFK\RXZDQWWRLQVWDOOWKH-'.RQ\RXUILOHV\VWHP,IWKDWLVDV\VWHP ZLGH GLUHFWRU\ VXFK DV XVUORFDO \RX ZLOO QHHG URRW DFFHVV $IWHU WKH ILOH LV GRZQORDGHG PDNH LW H[HFXWDEOH chmod +x jdk-6version-linux- i586.bin DQGH[HFXWHLW,WZLOOVHOIH[WUDFWWRFUHDWHDWUHHRIGLUHFWRULHV 0DF26; 0DF26;FRPHVZLWK-'.YHUVLRQDOUHDG\ORDGHG 14 | Chapter 2:ಗSetting Up Your Android Development Environment ,QVWDOO(FOLSVH7KH$QGURLG6'.UHTXLUHV(FOLSVHYHUVLRQRUODWHU,I\RXGR QRWKDYHWKDWYHUVLRQRI(FOLSVHLQVWDOOHG\HW\RXZLOOQHHGWRJRWRKWWSZZZ HFOLSVHRUJGRZQORDGVWRJHWLWDQG\RXPLJKWDVZHOOJHWYHUVLRQ DOVRNQRZQ DV*DQ\PHGH VLQFHWKDWSDFNDJHLQFOXGHVWKHUHTXLUHGSOXJLQVPHQWLRQHGLQWKH QH[WVWHS<RXZDQWWKHYHUVLRQRIWKH(FOLSVH,'(ODEHOHG£(FOLSVH,'(IRU-DYD 'HYHORSHUV¤DQGREYLRXVO\\RXZDQWWKHYHUVLRQIRU\RXURSHUDWLQJV\VWHP(FOLSVH ZLOODVN\RXWRVHOHFWDPLUURUVLWHDQGZLOOWKHQVWDUWWKHGRZQORDG :LQGRZV ;3RU9LVWD 7KH(FOLSVHGRZQORDGFRPHVDVDELJ=,3ILOHWKDW\RXLQVWDOOE\H[WUDFWLQJWKH ILOHVWR\RXUIDYRULWHGLUHFWRU\)RUWKLVERRNZH¦OODVVXPHWKDW\RXH[WUDFWHG WR&HFOLSVH(FOLSVHLVQRZLQVWDOOHGEXWLWZLOOQRWVKRZXSLQ\RXU6WDUWPHQX RIDSSOLFDWLRQV<RXPD\ZDQWWRFUHDWHD:LQGRZVVKRUWFXWIRU&HFOLSVH HFOLSVHH[HDQGSODFHLWRQ\RXUGHVNWRSLQ\RXU6WDUWPHQXRUVRPHSODFHHOVH ZKHUH\RXFDQHDVLO\ILQGLW /LQX[DQG0DF26; 1RWHWKDWDVRIWKLVZULWLQJWKHYHUVLRQRI(FOLSVHLQVWDOOHGLI\RXUHTXHVWLW RQ 8EXQWX +DUG\ +HURQ LV ZKLFK GRHV QRW FRQWDLQ DOO WKH SOXJLQV QHHGHGIRU$QGURLG7KH(FOLSVHGRZQORDGFRPHVDVDELJWDUEDOO J]ILOH WKDW \RXLQVWDOOE\H[WUDFWLQJWKHILOHVWR\RXUIDYRULWHGLUHFWRU\)RUWKLVERRNZH¦OO DVVXPHWKDW\RXH[WUDFWHGWRXVUOLEHFOLSVH7KHH[HFXWDEOHLWVHOILVORFDWHGLQ WKDWGLUHFWRU\DQGLVQDPHGHFOLSVH &KHFNIRUUHTXLUHGSOXJLQV<RXFDQVNLSWKLVVWHSLI\RXMXVWGRZQORDGHGD FXUUHQWYHUVLRQRI(FOLSVHDVZHUHFRPPHQGHG,I\RXDUHXVLQJDSUHLQVWDOOHGYHU VLRQRI(FOLSVH\RXQHHGWRPDNHVXUH\RXKDYHWKH-DYD'HYHORSPHQW7RRO -'7 DQG:HE6WDQGDUG7RROV :67 SOXJLQV<RXFDQHDVLO\FKHFNWRVHHZKHWKHUWKH\ DUH LQVWDOOHG E\ VWDUWLQJ (FOLSVH DQG VHOHFWLQJ PHQX RSWLRQV £:LQGRZV ൺ 3UHIHUHQFHV¤7KHOLVWRISUHIHUHQFHVVKRXOGLQFOXGHRQHIRU£-DYD¤DQGRQHIRU HLWKHU£;0/¤RU£:HEDQG;0/¤,IWKH\DUHQ¦WRQWKHOLVWWKHHDVLHVWWKLQJWRGR LVUHLQVWDOO(FOLSVHDVGHVFULEHGLQWKHSUHYLRXVVWHS,QVWDOOLQJ£(FOLSVH,'(IRU -DYD'HYHORSHUV¤ZLOODXWRPDWLFDOO\JHWWKHQHHGHGSOXJLQV ,QVWDOO$QGURLG6'.7KLVLVZKHUH\RXVKRXOGVWDUWLI\RXDOUHDG\KDYHWKHULJKW YHUVLRQVRI(FOLSVHDQGWKH-'.ORDGHG7KH$QGURLG6'.LVGLVWULEXWHGWKURXJK *RRJOH¦V $QGURLG VLWH KWWSGHYHORSHUDQGURLGFRPVGNBULQGH[KWPO <RX ZLOOQHHGWRUHDGUHYLHZDQGDFFHSWWKHWHUPVRIWKHOLFHQVHWRSURFHHG:KHQ\RX JHWWRWKHOLVWRIGRZQORDGV\RXZLOOVHHDWDEOHRIGLVWULEXWLRQV6HOHFWWKHRQHIRU \RXURSHUDWLQJV\VWHP ;3DQG9LVWDXVHWKHVDPHGLVWULEXWLRQ 7KHSDFNDJH ILOH QDPHV LQFOXGH WKH UHOHDVH QXPEHU )RU H[DPSOH DV WKLV LV ZULWWHQ WKH ODWHVW YHUVLRQ RI WKH 6'. LV BU VR WKH ILOHQDPH IRU :LQGRZV LV DQGURLGVGN ZLQGRZVBU]LS Setting Up Your Development Environment | 15 )RUYHUVLRQVDQGODWHURI(FOLSVHWKH$QGURLGGRZQORDGVLWHSURYLGHVGLUHFWLRQV DERXWKRZWRLQVWDOOWKHSOXJLQWKURXJK(FOLSVH¦VVRIWZDUHXSGDWHVXWLOLW\,I\RX¦UH XVLQJ(FOLSVHRUWKHVRIWZDUHXSGDWHWHFKQLTXHGRHVQ¦WZRUNIRU\RXGRZQORDG WKH 6'. IURP WKH $QGURLG VLWH DQG LQVWDOO LW XVLQJ LQVWUXFWLRQV LQ WKH QH[W SDUDJUDSK 7KHILOH\RXGRZQORDGLVDQRWKHUDUFKLYHILOHDVZLWK(FOLSVHD=,3ILOHRQ:LQ GRZVDWDU]LSSHGILOHIRU/LQX[DQG0DF26;'RWKHVDPHWKLQJDVIRU(FOLSVH H[WUDFWWKHDUFKLYHILOHWRDGLUHFWRU\ZKHUH\RXZDQWWRLQVWDOO$QGURLGDQGPDNH DQRWHRIWKHGLUHFWRU\QDPH \RX¦OOQHHGLWLQVWHS 7KHH[WUDFWLRQZLOOFUHDWHD GLUHFWRU\WUHHFRQWDLQLQJDEXQFKRIVXEGLUHFWRULHVLQFOXGLQJRQHFDOOHGWRROV 8SGDWH WKH HQYLURQPHQW YDULDEOHV 7R PDNH LW HDVLHU WR ODXQFK WKH $QGURLG WRROVDGGWKHWRROVGLUHFWRU\WR\RXUSDWK 2Q:LQGRZV;3FOLFNRQ6WDUWWKHQULJKWFOLFNRQ0\&RPSXWHU,QWKHSRS XS PHQX FOLFN RQ 3URSHUWLHV ,Q WKH UHVXOWLQJ 6\VWHP 3URSHUWLHV GLDORJ ER[ VHOHFWWKH$GYDQFHGWDE1HDUWKHERWWRPRIWKH$GYDQFHGWDELVDEXWWRQ£(Q YLURQPHQW9DULDEOHV¤WKDWWDNHV\RXWRDQ(QYLURQPHQW9DULDEOHVGLDORJ8VHU HQYLURQPHQWYDULDEOHVDUHOLVWHGLQWKHWRSKDOIRIWKHER[DQG6\VWHPHQYLURQ PHQWYDULDEOHVLQWKHERWWRPKDOI6FUROOGRZQWKHOLVWRI6\VWHPHQYLURQPHQW YDULDEOHVXQWLO\RXILQG£3DWK¤VHOHFWLWDQGFOLFNWKH£(GLW¤EXWWRQ1RZ\RX ZLOOEHLQDQ(GLW6\VWHP9DULDEOHGLDORJWKDWDOORZV\RXWRFKDQJHWKHHQYL URQPHQWYDULDEOH£3DWK¤$GGWKHIXOOSDWKRIWKHWRROVGLUHFWRU\WRWKHHQGRI WKHH[LVWLQJ3DWKYDULDEOHDQGFOLFN£2.¤<RXVKRXOGQRZVHHWKHQHZYHUVLRQ RIWKHYDULDEOHLQWKHGLVSOD\HGOLVW&OLFN£2.¤DJDLQWRH[LWWKH GLDORJER[HV 2Q:LQGRZV9LVWDFOLFNRQWKH0LFURVRIW£IODJ¤LQWKHORZHUOHIWRIWKHGHVNWRS WKHQULJKWFOLFNRQ&RPSXWHU$WWKHWRSRIWKHUHVXOWLQJGLVSOD\MXVWEHORZWKH PHQXEDUFOLFNRQ£6\VWHP3URSHUWLHV¤,QWKHFROXPQRQWKHOHIWRIWKHUHVXOWLQJ ER[FOLFNRQ£$GYDQFHGV\VWHPVHWWLQJV¤9LVWDZLOOZDUQ\RXZLWKDGLDORJER[ WKDW VD\V £:LQGRZV QHHGV \RXU SHUPLVVLRQ WR FRQWLQXH¤ FOLFN £&RQWLQXH¤ 1HDUWKHERWWRPRIWKH6\VWHP3URSHUWLHVER[LVDEXWWRQODEHOHG£(QYLURQPHQW 9DULDEOHV¤WKDWWDNHV\RXWRDQ(QYLURQPHQW9DULDEOHVGLDORJ8VHUHQYLURQPHQW YDULDEOHVDUHOLVWHGLQWKHWRSKDOIRIWKHER[DQG6\VWHPHQYLURQPHQWYDULDEOHV LQWKHERWWRPKDOI6FUROOGRZQWKHOLVWRI6\VWHPHQYLURQPHQWYDULDEOHVXQWLO \RXILQG£3DWK¤VHOHFWLWDQGFOLFNWKH£(GLW¤EXWWRQ1RZ\RXZLOOEHLQDQ (GLW6\VWHP9DULDEOHGLDORJWKDWDOORZV\RXWRFKDQJHWKHHQYLURQPHQWYDULDEOH £3DWK¤$GGWKHIXOOSDWKRIWKHWRROVGLUHFWRU\WRWKHHQGRIWKHH[LVWLQJ3DWK YDULDEOHDQGFOLFN£2.¤<RXVKRXOGQRZVHHWKHQHZYHUVLRQRIWKHYDULDEOH LQWKHGLVSOD\HGOLVW&OLFN£2.