1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Seminarium] [Android Apps (nu med Jelly Beans!)] 2 00:00:02,610 --> 00:00:04,210 [Jordan Jozwiak] [Harvard University] 3 00:00:04,210 --> 00:00:06,780 [Detta är CS50.] [CS50.TV] 4 00:00:06,780 --> 00:00:11,600 >> Hej allihopa, och välkomna till Android Apps (nu med Jelly Beans!) Seminar. 5 00:00:11,600 --> 00:00:14,530 Det kallas nu med Jelly Beans, naturligtvis, eftersom 6 00:00:14,530 --> 00:00:17,310 den senaste versionen av operativsystemet kallas Jelly Bean. 7 00:00:17,310 --> 00:00:22,950 När jag talade om Android förra året och gjorde det i stort sett samma seminarium 8 00:00:22,950 --> 00:00:29,150 Jag presenterar designmönster och stilistiska val för Gingerbread, 9 00:00:29,150 --> 00:00:31,250 även om Ice Cream Sandwich hade kommit ut på tiden, 10 00:00:31,250 --> 00:00:33,680 och detta är något vi pratar om att gå framåt en liten bit. 11 00:00:33,680 --> 00:00:35,720 Android, naturligtvis, har vissa problem med fragmentering, 12 00:00:35,720 --> 00:00:40,240 så den senaste Google operativsystemet är vanligtvis 13 00:00:40,240 --> 00:00:44,710 inte riktigt kommer att bli vanligare bland användarna för potentiellt upp till ett år, tyvärr. 14 00:00:44,710 --> 00:00:49,960 >> Men bortsett från det, vi pratar om många skäl till varför 15 00:00:49,960 --> 00:00:53,000 Android är mycket bättre än iOS. 16 00:00:53,000 --> 00:00:56,410 Okej, vi pratar om Android kontra iOS, 17 00:00:56,410 --> 00:00:59,770 några design paradigm, hur du kommer att få ställa upp i bara en bild, 18 00:00:59,770 --> 00:01:03,410 och den stora skillnaden mellan denna och förra året är jag bara vill 19 00:01:03,410 --> 00:01:06,860 zooma genom några konceptuella saker som arbetar med 20 00:01:06,860 --> 00:01:09,950 operativsystemet och sedan gå in i en riktigt grundläggande exempel. 21 00:01:09,950 --> 00:01:13,730 I själva verket, bara exempel som Google beskriver för att bygga din första app, 22 00:01:13,730 --> 00:01:17,070 och vi ska gå igenom det tillsammans och bara beskriva. 23 00:01:17,070 --> 00:01:22,100 >> Jag vet att många av er bara har kodat i C, så Java är redan på väg att bli 24 00:01:22,100 --> 00:01:27,220 ett annat perspektiv, och detta sätt kommer du få fötterna blöta 25 00:01:27,220 --> 00:01:31,540 och känna sig lite mer bekväm med det förhoppningsvis. 26 00:01:31,540 --> 00:01:35,330 En snabb sammanfattning, Android kontra iOS. 27 00:01:35,330 --> 00:01:39,200 I Android finns här en-gång utvecklare avgift på $ 25, 28 00:01:39,200 --> 00:01:42,390 inget av detta $ 100 per år sak. 29 00:01:42,390 --> 00:01:45,440 Det finns inga restriktioner, vilket innebär att om jag vill skicka en app, 30 00:01:45,440 --> 00:01:51,560 Jag skickar bara det, och det finns ingen godkännandeprocessen som det finns för iOS. 31 00:01:51,560 --> 00:01:53,890 Du får utvecklas med Java med Eclipse, 32 00:01:53,890 --> 00:01:57,090 som är plattformsoberoende, så det spelar ingen roll om du har en Mac, 33 00:01:57,090 --> 00:01:59,600 Windows, eller någon Linux-maskin. 34 00:01:59,600 --> 00:02:03,730 Naturligtvis med iOS måste du använda Xcode på en Mac, 35 00:02:03,730 --> 00:02:06,930 och Android används av många fler människor, 36 00:02:06,930 --> 00:02:11,580 så om du vill att din app att ha någon form av synlighet eller kanske 37 00:02:11,580 --> 00:02:14,110 tjäna lite pengar från annonser 38 00:02:14,110 --> 00:02:17,450 är du förmodligen mer benägna att dra nytta av Android. 39 00:02:17,450 --> 00:02:20,630 >> Och en sak som alltid har varit känt om Android 40 00:02:20,630 --> 00:02:25,100 är den extrema mängden av anpassning, medan iOS är mycket fast i sitt sätt 41 00:02:25,100 --> 00:02:29,380 så att de kan upprätthålla säkerhet och kontroll över varje liten aspekt 42 00:02:29,380 --> 00:02:34,180 av designen inom sitt operativsystem och de enskilda apps. 43 00:02:34,180 --> 00:02:40,180 Android är väldigt fri form, och det finns så många fler möjligheter. 44 00:02:40,180 --> 00:02:42,530 Okej, några design paradigm. 45 00:02:42,530 --> 00:02:49,600 Kallelse här precis som iOS har tabletter och iPhone och iPod Touches 46 00:02:49,600 --> 00:02:53,840 de har att stödja, säger, som ett dussin enheter om du vill stödja 47 00:02:53,840 --> 00:02:55,450 historiska saker också. 48 00:02:55,450 --> 00:02:58,410 Med Android måste du stödja hundratals enheter, 49 00:02:58,410 --> 00:03:01,240 så finns det några saker som Google har försökt att genomföra 50 00:03:01,240 --> 00:03:04,970 att göra användaren uppleva lite mer konsekvent, 51 00:03:04,970 --> 00:03:08,560 men vi kommer också att prata om hur detta innebär att det finns frågor av fragmenteringen 52 00:03:08,560 --> 00:03:11,700 att du måste hela tiden vara medveten om att stödja. 53 00:03:11,700 --> 00:03:16,140 Fragmentering innebär att det finns många olika operativsystem, 54 00:03:16,140 --> 00:03:20,330 många olika telefoner med olika hårdvara som kör Android allt på samma gång, 55 00:03:20,330 --> 00:03:29,680 så denna graf går här tillbaka i ca 6 månader. 56 00:03:29,680 --> 00:03:36,460 Ja, 6 månader, och du kan se hur den mörkaste bandet 57 00:03:36,460 --> 00:03:39,330 på botten är Jelly Bean, som kom ut under sommaren, 58 00:03:39,330 --> 00:03:42,970 och du kan se just nu troligen omkring 2% av de telefoner har det. 59 00:03:42,970 --> 00:03:45,520 >> Ice Cream Sandwich kom ut över ett år sedan, 60 00:03:45,520 --> 00:03:47,770 och en fjärdedel av de telefoner har det. 61 00:03:47,770 --> 00:03:53,910 Det finns fortfarande en hel del telefoner som använder OS version från år sedan. 62 00:03:53,910 --> 00:03:57,820 En sak som Google har försökt att göra för att göra användarupplevelsen 63 00:03:57,820 --> 00:04:01,400 en mycket mer konsekvent mellan appar börjar med Honeycomb, 64 00:04:01,400 --> 00:04:04,320 vilket är tabletten versionen, då Ice Cream Sandwich och Jelly Bean, 65 00:04:04,320 --> 00:04:06,750 De försöker verkligen att betona användningen av denna åtgärd bar, 66 00:04:06,750 --> 00:04:10,430 vilket är vad du kan se i toppen här, 67 00:04:10,430 --> 00:04:14,730 allt rätt här, inklusive denna lilla inställningar. 68 00:04:14,730 --> 00:04:16,079 Det är designen val. 69 00:04:16,079 --> 00:04:18,000 Nu, när du ser de tre prickarna betyder det klickar på detta, 70 00:04:18,000 --> 00:04:21,880 och det kommer att finnas en rullgardinsmeny, som har någon form av inställningar. 71 00:04:21,880 --> 00:04:28,900 Detta visar bara upp för att jag klickade på den här knappen. 72 00:04:28,900 --> 00:04:32,040 Detta är något som de försöker använda för att göra appar lite mer konsekvent 73 00:04:32,040 --> 00:04:39,210 över hela linjen, och så att användaren har en bättre känsla för enhetlig upplevelse. 74 00:04:39,210 --> 00:04:42,640 >> Okej, så om du inte redan har gjort det eller om du tittar på hemmaplan 75 00:04:42,640 --> 00:04:50,210 då kan du följa dessa steg för att ställa in kodning miljö. 76 00:04:50,210 --> 00:04:52,630 Det kommer att innebära att gå till hemsidan här. 77 00:04:52,630 --> 00:04:56,260 Du kan Google installera Android SDK 78 00:04:56,260 --> 00:04:59,130 och följer några beskrivningar där. 79 00:04:59,130 --> 00:05:01,310 De berättar allt. 80 00:05:01,310 --> 00:05:05,160 De har du installerar SDK nedladdning Eclipse Classic version, 81 00:05:05,160 --> 00:05:07,450 även om, naturligtvis, vi kodning i Java. 82 00:05:07,450 --> 00:05:12,190 De rekommenderar en, och sedan denna ADT, Android Development Tools, 83 00:05:12,190 --> 00:05:17,300 är en plugin som du installerar i Eclipse som låter dig 84 00:05:17,300 --> 00:05:20,550 ha en mycket mer strömlinjeformad upplevelse med Android i Eclipse. 85 00:05:20,550 --> 00:05:24,070 Det kommer att ge dig några grafiska användargränssnitt 86 00:05:24,070 --> 00:05:29,610 för att utforma de synpunkter, och det kommer att ge dig mycket mer stöd 87 00:05:29,610 --> 00:05:34,840 och möjligheten att starta med emulatorn och allt sånt. 88 00:05:34,840 --> 00:05:36,090 Ansökan ram. 89 00:05:36,090 --> 00:05:41,590 >> Jag vill tala om hur projekten inom Android är strukturerade, 90 00:05:41,590 --> 00:05:44,830 och sedan går vi in ​​i ett snabbt exempel, och förhoppningsvis 91 00:05:44,830 --> 00:05:48,820 Du kan ställa frågor när som helst och känna sig bekväma i slutet av den. 92 00:05:48,820 --> 00:05:50,090 Vi har lite jargong först. 93 00:05:50,090 --> 00:05:55,330 En aktivitet är som skärmen du ser när du startar ett program. 94 00:05:55,330 --> 00:05:57,840 Hela upplevelsen är själva aktiviteten, 95 00:05:57,840 --> 00:06:00,790 så du kan se det som en skärm eller en vy, 96 00:06:00,790 --> 00:06:04,540 men det är faktiskt källkoden sidan av det. 97 00:06:04,540 --> 00:06:12,680 Vi kallar fortfarande själva gränssnittet del av det en vy. 98 00:06:12,680 --> 00:06:17,230 Det är ungefär som hur i pset 7 hade vi kontrollern och sedan vyn. 99 00:06:17,230 --> 00:06:20,690 Aktiviteten är mer eller mindre den registeransvarige, 100 00:06:20,690 --> 00:06:23,360 och vyn är vad vi gör i termer av XML 101 00:06:23,360 --> 00:06:25,260 som är associerad med denna verksamhet. 102 00:06:25,260 --> 00:06:29,340 Fragment är något som genomförs i Ice Cream Sandwich framöver. 103 00:06:29,340 --> 00:06:36,380 Det är bara en idé om att ta delar av vyn eller aktiviteten 104 00:06:36,380 --> 00:06:39,990 och delar upp dem i separata områden, så att vi kan 105 00:06:39,990 --> 00:06:45,030 göra vår kod mer användbara för dessa många olika enheter 106 00:06:45,030 --> 00:06:51,890 att vi måste stödja, och det är bara ett sätt att försöka 107 00:06:51,890 --> 00:06:54,290 också faktor ut mer kod. 108 00:06:54,290 --> 00:07:01,090 Tjänster är bakgrunden saker som spelar musik eller navigationsriktningar potentiellt. 109 00:07:01,090 --> 00:07:05,640 Innehållsleverantörer, dessa API: er i operativsystemet 110 00:07:05,640 --> 00:07:09,070 som gör att du kan komma åt delade data såsom kontaktinformation, 111 00:07:09,070 --> 00:07:12,790 och sedan en avsiktsförklaring är något vi ska använda när vi vill starta 112 00:07:12,790 --> 00:07:17,210 en ny verksamhet från vår nuvarande verksamhet. 113 00:07:17,210 --> 00:07:20,980 >> Hej Android, kommer detta att bli ett projekt som vi pratar om. 114 00:07:20,980 --> 00:07:25,410 Jag ska faktiskt göra det åt dig, och då ska vi göra en sak där vi klickar på en knapp 115 00:07:25,410 --> 00:07:27,650 med lite text och lansera en ny aktivitet. 116 00:07:27,650 --> 00:07:30,110 Mycket enkelt, men jag vill gå igenom 117 00:07:30,110 --> 00:07:34,480 vad kommer att gå in i ett projekt som detta. 118 00:07:34,480 --> 00:07:39,260 När du gör det nya projektet kommer du se i Eclipse 119 00:07:39,260 --> 00:07:41,900 Det är det här projektet heter Hej Android. 120 00:07:41,900 --> 00:07:43,470 Sedan finns det en hel massa mappar här. 121 00:07:43,470 --> 00:07:46,760 De som du verkligen sysslar med är källan mappen 122 00:07:46,760 --> 00:07:54,540 resursen mappen de res, och i viss mån den libs mappen för bibliotek. 123 00:07:54,540 --> 00:08:00,070 Och bara så att vi är på samma sida med det 124 00:08:00,070 --> 00:08:03,240 om du skulle skapa ett nytt projekt, 125 00:08:03,240 --> 00:08:08,270 du kan göra det här, så om jag vill kalla det HelloAndroid, 126 00:08:08,270 --> 00:08:11,100 och då gör automatiskt en hel massa av information för oss. 127 00:08:11,100 --> 00:08:14,110 Paketets namn är tänkt att vara en unik identifierare 128 00:08:14,110 --> 00:08:16,710 som normalt skulle förknippas med webbplatsen, om du hade en. 129 00:08:16,710 --> 00:08:24,430 >> Till exempel kommer jag kalla detta net.cs50.helloandroid. 130 00:08:24,430 --> 00:08:30,070 Och jag har redan gjort det här projektet en gång. 131 00:08:30,070 --> 00:08:40,059 Okej, sorry. Låt oss kalla det HelloCS50. 132 00:08:40,059 --> 00:08:42,929 Och så kommer det att fråga saker som vad för slags ikon vill vi göra. 133 00:08:42,929 --> 00:08:48,840 Detta är på grund av Android Developer Tools-gränssnittet, 134 00:08:48,840 --> 00:08:53,350 den plugin som vi lagt till Eclipse, så att vi kan välja saker som 135 00:08:53,350 --> 00:08:58,320 vilken ikon som vi vill, och det skulle gå in på det djupet om vi vill. 136 00:08:58,320 --> 00:09:04,360 Men i slutändan, bara göra projektet, 137 00:09:04,360 --> 00:09:07,040 och allt dyker upp just här. 138 00:09:07,040 --> 00:09:10,030 Som jag visade på den andra skärmen, 139 00:09:10,030 --> 00:09:14,070 vi har den ursprungliga mappen, och jag ska tala om vad allt detta betyder snart, 140 00:09:14,070 --> 00:09:19,090 men du kan se att omedelbart tar oss till HelloCS50 skärmen. 141 00:09:19,090 --> 00:09:24,690 Det finns några knappar över här för att lägga till text och text fält layouter. 142 00:09:24,690 --> 00:09:28,910 Det är ungefär som XCode men tyvärr inte riktigt lika strömlinjeformad. 143 00:09:28,910 --> 00:09:37,790 Men klippen kommer att vara din vän och ADT i synnerhet för att göra detta. 144 00:09:37,790 --> 00:09:40,920 >> Okej, är källan mapp där 145 00:09:40,920 --> 00:09:43,820 Java filerna hålls, och det är faktiskt lanseringen av ditt program. 146 00:09:43,820 --> 00:09:45,990 Det är i princip som de registeransvariga. 147 00:09:45,990 --> 00:09:49,020 Resursen mapp eller res är där vi ska hålla skärmlayouter, 148 00:09:49,020 --> 00:09:54,110 bilder, ljud, text, animationer och allt annat, libs naturligtvis biblioteken. 149 00:09:54,110 --> 00:10:01,700 Och Manifest, det är det sätt som Android-systemet känner 150 00:10:01,700 --> 00:10:03,130 hur man interagerar med din app. 151 00:10:03,130 --> 00:10:07,980 Den berättar om behörigheter och vilka aktiviteter som faktiskt kommer att köras. 152 00:10:07,980 --> 00:10:12,350 Det är all väsentlig information som är nödvändig för att köra appen. 153 00:10:12,350 --> 00:10:17,990 Källan mappen är-Om vi ​​vidgar det som ni kan se här. 154 00:10:17,990 --> 00:10:23,920 Och ett exempel på att en kod skulle se ut, detta är den ursprungliga koden. 155 00:10:23,920 --> 00:10:27,930 Som vi kallade det, MainActivity. 156 00:10:27,930 --> 00:10:33,230 Som standard får vi oncreate, vilket är en funktion som kallas då denna verksamhet laster, 157 00:10:33,230 --> 00:10:37,150 så du vill ringa oncreate (savedInstanceState). 158 00:10:37,150 --> 00:10:40,440 Detta kommer att återställa några bitar av information 159 00:10:40,440 --> 00:10:44,910 ifall appen pausades. 160 00:10:44,910 --> 00:10:48,790 >> Det finns en hel verksamhet livscykel diagram som du kan titta på 161 00:10:48,790 --> 00:10:50,380 när du får lite mer på djupet i den, 162 00:10:50,380 --> 00:10:56,210 men den viktigaste raden i koden finns denna setContentView funktion 163 00:10:56,210 --> 00:11:00,290 vilket kommer att ladda resursen filen för layouten. 164 00:11:00,290 --> 00:11:03,590 Sedan vad oncreate här är i grunden gör är det att säga 165 00:11:03,590 --> 00:11:07,010 när jag skapar denna verksamhet jag vill ladda denna layout. 166 00:11:07,010 --> 00:11:12,030 Och vi ska prata om vad som layouten är i en sekund. 167 00:11:12,030 --> 00:11:16,230 Om vi ​​skulle starta det här det ser exakt ut som den här, 168 00:11:16,230 --> 00:11:22,880 och som standard eftersom vi har Eclipse gör detta och ADT gör det för oss 169 00:11:22,880 --> 00:11:28,210 detta är allt standardtext kod som skapas för oss, 170 00:11:28,210 --> 00:11:34,630 och vi kan gå vidare och ändra saker som vi gillar. 171 00:11:34,630 --> 00:11:38,190 Resursen mappen, som jag sa, det är där vi håller alla layouter, 172 00:11:38,190 --> 00:11:41,150 drawables i termer av någon sort av bilder- 173 00:11:41,150 --> 00:11:46,360 de kallas drawables-och sedan ljudfiler, menyer. 174 00:11:46,360 --> 00:11:51,170 Det är ett sätt för en hel grupp av XML i en sorterad trevligt sätt. 175 00:11:51,170 --> 00:11:58,030 Som ni ser, det finns. Hdpi, ldpi, MDPI och xhdpi mappar för drawables. 176 00:11:58,030 --> 00:12:02,220 Dessa är olika skärm densiteter, så hög densitet pixel per tum, 177 00:12:02,220 --> 00:12:05,710 låg densitet, medelhög densitet, extra hög densitet. 178 00:12:05,710 --> 00:12:08,900 >> Detta är, återigen, så att vi kan stödja alla dessa olika enheter, 179 00:12:08,900 --> 00:12:15,100 och helst, kommer du att ha olika bilder för varje annan upplösning. 180 00:12:15,100 --> 00:12:20,740 Layouter är där vi är alla olika layouter som kommer att användas i olika verksamheter. 181 00:12:20,740 --> 00:12:24,150 De kan också innehålla layouter för fragment, 182 00:12:24,150 --> 00:12:26,670 vilket innebär partiella verksamhet i grunden. 183 00:12:26,670 --> 00:12:29,610 Om du vill göra något coolt ut när du vrider telefonen 184 00:12:29,610 --> 00:12:33,900 du vill att den ska ha en annan layout kan du göra layout-landskapet som en annan mapp, 185 00:12:33,900 --> 00:12:39,000 och Android har automatiskt en hel grupp av dessa regler inom resursmapp, 186 00:12:39,000 --> 00:12:44,690 så det vet att titta på olika mappar baserat på aktuell inställning av telefonen, 187 00:12:44,690 --> 00:12:46,740 vilken typ av hårdvara du använder. 188 00:12:46,740 --> 00:12:52,350 Likaså här värden-V11 här och värderingar-v14 189 00:12:52,350 --> 00:12:55,460 och standardvärdena mappen detta är för- 190 00:12:55,460 --> 00:13:01,730 väl, värderingar av sig själv, kommer detta att vara standardvärden i alla versioner av operativsystemet. 191 00:13:01,730 --> 00:13:06,390 Å andra sidan, v11 och v14 motsvara Honeycomb 192 00:13:06,390 --> 00:13:08,780 och Ice Cream Sandwich, respektive. 193 00:13:08,780 --> 00:13:12,800 Återigen, detta är ett sätt att-inom dessa mappar är olika strängar 194 00:13:12,800 --> 00:13:17,550 och stilar, så du kan anpassa utseendet på din app 195 00:13:17,550 --> 00:13:22,660 eller potentiellt ens dess funktionalitet, men som förmodligen skulle vara en dålig idé, 196 00:13:22,660 --> 00:13:25,890 beroende på vilken version av operativsystemet. 197 00:13:25,890 --> 00:13:28,760 >> Och jag talade om allt detta här. 198 00:13:28,760 --> 00:13:35,870 Återigen, tänjbart, rå, layout, värderingar. 199 00:13:35,870 --> 00:13:41,380 Standardinställningarna, om vi går in Hej Android eller Hej CS50 just nu 200 00:13:41,380 --> 00:13:43,310 det kommer att se ut precis som denna. 201 00:13:43,310 --> 00:13:45,800 Det kommer att säga hej världen. 202 00:13:45,800 --> 00:13:58,430 Som ni kan se här med Android text 203 00:13:58,430 --> 00:14:04,420 texten till denna text vy, vilket i princip bara en etikett, 204 00:14:04,420 --> 00:14:06,900 är vad vi skulle kalla det i iOS. 205 00:14:06,900 --> 00:14:11,580 Det har denna roliga notation @ string / hello_world. 206 00:14:11,580 --> 00:14:16,200 Det är så vi kan-vi försöka extrahera alla strängar, 207 00:14:16,200 --> 00:14:19,740 alla de hårdkodade strängar i Android i en separat mapp, 208 00:14:19,740 --> 00:14:23,610 som råkar vara i values.strings. 209 00:14:23,610 --> 00:14:29,300 Om vi ​​ser här, kan vi se att vi har en hårdkodad sträng sparas här 210 00:14:29,300 --> 00:14:33,910 för hallå världen, och det kallas hallå världen, och detta är en slags 211 00:14:33,910 --> 00:14:39,230 gemensam utformning beslut över många plattformar som du vill- 212 00:14:39,230 --> 00:14:41,780 strängar är den typ av saker som vi vill att potentiellt kunna ändra. 213 00:14:41,780 --> 00:14:48,050 Vi vill inte styra F i vår källkod fil i vår XML. 214 00:14:48,050 --> 00:14:50,760 Vi vill kunna ändra detta när vi får chansen. 215 00:14:50,760 --> 00:14:53,640 >> Denna XML-fil, strings.xml, är ett sätt att utvinna 216 00:14:53,640 --> 00:14:56,710 hårdkodade strängar som annars skulle vara i vår layout resurser 217 00:14:56,710 --> 00:15:03,530 eller i vår källkod. 218 00:15:03,530 --> 00:15:08,190 Manifestet är där vi håller denna viktiga information om programmet. 219 00:15:08,190 --> 00:15:11,050 Den innehåller paketets namn. Det måste vara en unik identifierare. 220 00:15:11,050 --> 00:15:16,020 Till skillnad från App Store för iOS namnen på ansökningarna 221 00:15:16,020 --> 00:15:19,980 behöver inte vara unik, och du kan faktiskt ändra namnet på din ansökan 222 00:15:19,980 --> 00:15:23,570 efter att du har skickat det, så om jag börjar med Angry Birds, 223 00:15:23,570 --> 00:15:26,840 och då jag gör en uppdatering, och jag vill inte att släppa en ny version 224 00:15:26,840 --> 00:15:34,230 Jag antar att jag skulle kunna kalla det Angry Birds 2 medan jag är på samma utgåva cykel. 225 00:15:34,230 --> 00:15:36,780 Det skulle bara dyka upp som en uppdatering. 226 00:15:36,780 --> 00:15:39,790 Det enda som måste vara unik är detta paket namn, 227 00:15:39,790 --> 00:15:41,280 vilket inte många människor kommer att se. 228 00:15:41,280 --> 00:15:44,680 Tja, skulle du bara se om du tittar på källkoden eller om det finns någon form av fel. 229 00:15:44,680 --> 00:15:47,580 Komponenterna innefattar aktiviteter, så vi måste förklara 230 00:15:47,580 --> 00:15:49,070 någon form av aktivitet som vi använder. 231 00:15:49,070 --> 00:15:53,430 Detta är ett tillstånd sånt. 232 00:15:53,460 --> 00:15:58,150 >> Eftersom Android har inte denna rigorösa ansökningsprocessen 233 00:15:58,150 --> 00:16:02,210 för att lämna in program i stället de bara allt baserad bort av behörigheter 234 00:16:02,210 --> 00:16:04,300 och förklara saker i manifestet. 235 00:16:04,300 --> 00:16:06,380 SDK version är också viktigt. 236 00:16:06,380 --> 00:16:10,330 Vi kan ställa användas som SDK minimum version någonting. 237 00:16:10,330 --> 00:16:16,010 Självklart vill du skapa kod 238 00:16:16,010 --> 00:16:18,570 och design för de nyare operativsystemen. 239 00:16:18,570 --> 00:16:20,840 Kanske inte den nyaste, kanske inte Jelly Bean. 240 00:16:20,840 --> 00:16:23,610 Kanske vill du designa främst för Ice Cream Sandwich, 241 00:16:23,610 --> 00:16:27,120 även om de är ganska mycket samma i termer av designbeslut 242 00:16:27,120 --> 00:16:30,550 och de faktiska biblioteken och API: er. 243 00:16:30,550 --> 00:16:36,250 Men snarare än att ha folk 244 00:16:36,250 --> 00:16:40,050 av den ursprungliga Android-version-liknande Donut väg tillbaka när- 245 00:16:40,050 --> 00:16:43,420 som fortfarande råkar använda som försöker hämta din ansökan och sedan säga 246 00:16:43,420 --> 00:16:46,160 Det fungerar inte på min telefon kan du ställa in den minsta versionen 247 00:16:46,160 --> 00:16:48,620 och har vara den Gingerbread eller Ice Cream Sandwich 248 00:16:48,620 --> 00:16:53,300 eller vad du känner dig bekväm skickar. 249 00:16:53,300 --> 00:16:57,170 Och detta är ett exempel på Manifest. Vi kan titta på den faktiska en i en bit. 250 00:16:57,170 --> 00:17:00,900 >> Okej, vi ska bara gå vidare med demo nu. 251 00:17:00,900 --> 00:17:08,900 Detta är en demo om du Google Android bygga din första app eller något liknande. 252 00:17:08,900 --> 00:17:12,089 Vi ska gå igenom allt som händer där, 253 00:17:12,089 --> 00:17:17,690 och ledsen, bara för en referens som här vet Java i någon utsträckning? 254 00:17:17,690 --> 00:17:28,310 Okej, så Java är nytt kodspråk för de flesta människor som kommer ut av CS50. 255 00:17:28,310 --> 00:17:31,850 Kortfattat, för att gå igen vad det står här, 256 00:17:31,850 --> 00:17:35,580 Vad vi vill göra är i stället justera denna hello world program 257 00:17:35,580 --> 00:17:38,620 att allt det gör är att det startar och det säger hallå världen 258 00:17:38,620 --> 00:17:43,580 och det säger hej CS50 upptill eftersom det är verksamheten namn 259 00:17:43,580 --> 00:17:47,190 vi kommer att försöka göra ett textfält och en knapp 260 00:17:47,190 --> 00:17:50,680 så att när vi trycker på denna knapp kommer det att ta texten 261 00:17:50,680 --> 00:17:53,660 från textfältet och lansera en ny verksamhet, och det kommer att säga 262 00:17:53,660 --> 00:17:58,380 vad det texten säger i verksamheten, och det är relativt enkelt. 263 00:17:58,380 --> 00:18:00,650 Det är inte mycket intressant. Du skulle inte vilja släppa någon app som denna. 264 00:18:00,650 --> 00:18:03,880 Men det visar några viktiga designelement saker. 265 00:18:03,880 --> 00:18:07,030 >> Vi måste samverka med Manifest, med layout-filer, 266 00:18:07,030 --> 00:18:12,440 med källkoden, och du kan se hur du startar en aktivitet från en annan. 267 00:18:19,740 --> 00:18:23,060 Vi börjar med layouten för vår första aktivitet, 268 00:18:23,060 --> 00:18:27,320 vilket jag vet att det är typ av små, 269 00:18:27,320 --> 00:18:32,660 men som ni kan se just nu, är allt det är det har vår logotyp som vi skapade, 270 00:18:32,660 --> 00:18:36,310 aktiviteten namn, och det säger Hej världen i centrum. 271 00:18:36,310 --> 00:18:40,400 Istället kommer jag först att göra detta till en linjär layout, 272 00:18:40,400 --> 00:18:42,350 en relativ layout, och allt detta är saker 273 00:18:42,350 --> 00:18:45,870 du kan titta upp och är värda att gå över någon gång i termer av layouter. 274 00:18:45,870 --> 00:18:47,310 Det är mycket som HTML. 275 00:18:47,310 --> 00:18:52,640 Vi sade att det är egentligen inte värt att veta i termer av en programmatisk betydelse, 276 00:18:52,640 --> 00:18:55,840 men det finns så många olika layouter du kan kontrollera, 277 00:18:55,840 --> 00:18:57,970 och det är precis som CSS i termer av stilar. 278 00:18:57,970 --> 00:19:01,590 >> Det finns en hel del på gång just i termer av estetik här, 279 00:19:01,590 --> 00:19:08,930 och ja, det är värt att lära sig, men det är den sortens saker du bör se upp 280 00:19:08,930 --> 00:19:11,810 som du går och du känner att du behöver något nytt. 281 00:19:11,810 --> 00:19:17,030 Jag kan dra nytta av några av de ADT Tools här åtminstone att börja med. 282 00:19:17,030 --> 00:19:21,930 Jag ska göra ett textfält, och jag kommer att göra en knapp. 283 00:19:21,930 --> 00:19:24,100 Lägg dem bredvid varandra. 284 00:19:24,100 --> 00:19:28,200 De ändrar storlek redan på lämpligt sätt. 285 00:19:28,200 --> 00:19:31,320 Tyvärr, igen, kommer tillbaka till skillnaden mellan linjära layout och relativ layout, 286 00:19:31,320 --> 00:19:34,830 en linjär layout ger en lite mer funktionalitet 287 00:19:34,830 --> 00:19:38,720 det gäller att fylla utrymme och att se 288 00:19:38,720 --> 00:19:42,790 vi positionerar saker horisontellt eller vertikalt. 289 00:19:42,790 --> 00:19:46,130 Den stora skillnaden mellan en linjär layout och en relativ layout 290 00:19:46,130 --> 00:19:50,250 är den relativa layouten positioner allt i förhållande till andra vyer, 291 00:19:50,250 --> 00:19:52,630 och det är bra med det är att det tar mindre tid att rita 292 00:19:52,630 --> 00:19:56,120 eftersom operativsystemet ser på all kod och säger att detta går 293 00:19:56,120 --> 00:19:58,270 förhållande till det här, här. 294 00:19:58,270 --> 00:20:03,170 Det betyder att det blir färre mätningar än en hel massa kapslade linjära layouter, 295 00:20:03,170 --> 00:20:06,840 som jag skulle behöva göra om jag ville att det skulle gå vertikalt hit. 296 00:20:06,840 --> 00:20:10,510 >> Jag har redan en del saker går horisontellt, så jag skulle behöva en annan linjär layout 297 00:20:10,510 --> 00:20:14,560 att kapsla dem vertikalt, men om jag gjorde en relativ layout jag kunde säga 298 00:20:14,560 --> 00:20:18,140 hålla detta till vänster, detta till höger och dessa saker nedan. 299 00:20:18,140 --> 00:20:21,850 Men eftersom jag vill att de ska fylla just nu ska jag använda en linjär layout, 300 00:20:21,850 --> 00:20:24,510 och du kan se det redan gör en hel del av dessa saker för oss. 301 00:20:24,510 --> 00:20:28,890 Alla synpunkter måste ha en fastighet av bredd och höjd, 302 00:20:28,890 --> 00:20:33,410 och det händer att ha en vikt på 1, och detta har en vikt av 1 303 00:20:33,410 --> 00:20:36,050 så att den fyller hela utrymmet. 304 00:20:36,050 --> 00:20:38,460 Men bredden och höjden är viktigast. 305 00:20:38,460 --> 00:20:45,880 Detta ID-fältet här är inte viktigt i den aktuella layouten 306 00:20:45,880 --> 00:20:49,060 såvida vi använder en relativ layout och säger att vi kan referera 307 00:20:49,060 --> 00:20:52,990 en vy position i referens till en annan. 308 00:20:52,990 --> 00:20:56,170 Om vi ​​hade en relativ layout vi kunde säga läget detta nedan här 309 00:20:56,170 --> 00:20:59,390 eller ovanför denna ID, men detta ID kommer att vara viktigt 310 00:20:59,390 --> 00:21:01,660 när vi använder det i vår kod för att vi kan referera 311 00:21:01,660 --> 00:21:05,610 dessa individuella åsikter på detta sätt. 312 00:21:05,610 --> 00:21:10,350 >> Och sedan kan du se taggen requestFocus, vilket är något du förmodligen såg i pset 7. 313 00:21:10,350 --> 00:21:15,370 Det fanns en autofokus tagg eller något i den stilen för ett av fälten. 314 00:21:15,370 --> 00:21:22,100 Och en sak, naturligtvis, kan vi göra precis som i HTML, 315 00:21:22,100 --> 00:21:25,660 och märker en av de fina sakerna med ADT är att det autocompletes här. 316 00:21:25,660 --> 00:21:29,930 Kanske inte så snyggt som det gjorde i Xcode, men det gör det ändå, 317 00:21:29,930 --> 00:21:32,860 och vi kan säga ledtråd och sedan ge det någon form av snöre 318 00:21:32,860 --> 00:21:37,070 vilja skriva ett meddelande, 319 00:21:37,070 --> 00:21:41,300 och om jag ger det en stund, märker också att jag blir lite fel här 320 00:21:41,300 --> 00:21:44,610 att säga att vi bör använda en sträng resurs för detta, 321 00:21:44,610 --> 00:21:48,820 så om jag låter det göra en del av det hårda arbetet för mig 322 00:21:48,820 --> 00:21:57,320 Jag kan välja denna sträng, gör refraktor Android och extrakt Android sträng. 323 00:21:57,320 --> 00:22:00,570 Jag kan ge det som namn, skriv ett meddelande, 324 00:22:00,570 --> 00:22:04,180 och vad det gjorde nu är det ersatt den hårdkodad sträng 325 00:22:04,180 --> 00:22:07,980 med en hänvisning till strängen i strängen. xml-fil, 326 00:22:07,980 --> 00:22:10,200 vilket innebär nu detta är här. 327 00:22:10,200 --> 00:22:15,560 >> Och jag vet att verkar lite trivialt och som extra arbete på denna punkt, 328 00:22:15,560 --> 00:22:17,840 men när du har en hel massa saker, en massa strängar, 329 00:22:17,840 --> 00:22:20,750 det är verkligen viktigt, och särskilt för lokalisering 330 00:22:20,750 --> 00:22:26,920 eftersom som jag nämnde tidigare, är Android ett mycket globalt använda operativsystem 331 00:22:26,920 --> 00:22:35,950 att du kan enkelt göra värderingar-en eller värden-sp 332 00:22:35,950 --> 00:22:44,320 eller något för engelska eller spanska eller andra språk. 333 00:22:44,320 --> 00:22:50,210 Och så har du förmodligen inte har haft denna erfarenhet ännu 334 00:22:50,210 --> 00:22:53,030 eftersom vi inte göra mycket JavaScript gäller webbprogrammering, 335 00:22:53,030 --> 00:22:56,850 men vi kan också göra det här fältet som heter onClick för knapp, 336 00:22:56,850 --> 00:23:02,350 och detta är ett sätt att referera inom vår layout 337 00:23:02,350 --> 00:23:06,570 att vi vill ha en viss funktion som ska kallas i vår källkod. 338 00:23:06,570 --> 00:23:09,420 Jag kommer att kalla detta SendMessage, 339 00:23:09,420 --> 00:23:13,390 och för att göra detta arbete som innebär i den huvudsakliga verksamheten här 340 00:23:13,390 --> 00:23:19,180 Jag kommer att skapa en funktion som är allmän 341 00:23:19,180 --> 00:23:22,250 så att den kan nås av layouten. 342 00:23:22,250 --> 00:23:25,930 Det är ogiltiga eftersom du bara inte vill att det ska returnera någonting. 343 00:23:25,930 --> 00:23:37,760 Vi kallar det SendMessage, och det tar en vy, 344 00:23:37,760 --> 00:23:43,690 vilket är en slags sammanhang som vi kan förankra denna metod 345 00:23:43,690 --> 00:23:47,160 till att enskilda vy när vi kör den. 346 00:23:47,160 --> 00:23:50,090 >> Och jag vet inte om du märkt-bra, skulle ni inte har märkt, 347 00:23:50,090 --> 00:24:02,370 men på denna punkt just här 348 00:24:02,370 --> 00:24:06,930 denna uppfattning är en typ som inte har ännu inte införts, 349 00:24:06,930 --> 00:24:10,630 och naturligtvis, vet du allt från CS50 om inte däribland typer. 350 00:24:10,630 --> 00:24:13,120 Det fina med IDE som Eclipse är att 351 00:24:13,120 --> 00:24:17,520 Om du glömmer att inkludera en typ det kommer att understryka med en liten röd snirkliga 352 00:24:17,520 --> 00:24:19,680 och sedan ger dig möjlighet att importera vyn. 353 00:24:19,680 --> 00:24:23,130 Ett snabbt sätt att göra detta är kontroll shift O, och det kommer att importera 354 00:24:23,130 --> 00:24:27,070 alla filer som den behöver. 355 00:24:27,070 --> 00:24:33,670 Nu när vi har denna funktion SendMessage, 356 00:24:33,670 --> 00:24:46,560 som kommer att skicka meddelande från MainActivity till en ny verksamhet, 357 00:24:46,560 --> 00:24:55,230 vi kommer att behöva använda en avsikt att lansera den nya verksamheten från detta, 358 00:24:55,230 --> 00:25:02,240 så vi kommer förmodligen vill skapa en global konstant eller också särskilt en offentlig konstant 359 00:25:02,240 --> 00:25:06,240 som hjälper oss att veta hur vi ska referera strängen 360 00:25:06,240 --> 00:25:09,090 eftersom när vi skapar en avsikt vi inte bara ringa en ny verksamhet, 361 00:25:09,090 --> 00:25:11,520 men vi kan också ge det en bunt av information. 362 00:25:11,520 --> 00:25:14,720 En bunt är faktiskt den term som Android använder, 363 00:25:14,720 --> 00:25:21,470 och det är ett sätt att säga att ge det extra data, vilket det inte kan vara en mycket sofistikerad datatyp, 364 00:25:21,470 --> 00:25:24,510 men vi kan definitivt innehålla booleska eller strängar eller INTS. 365 00:25:24,510 --> 00:25:29,750 Sådant. 366 00:25:29,750 --> 00:25:34,230 >> Känn dig fri att fråga om någon av dessa kval här, 367 00:25:34,230 --> 00:25:36,900 allmänheten, final, statisk. 368 00:25:36,900 --> 00:25:38,610 Offentliga är den viktigaste. 369 00:25:38,610 --> 00:25:47,090 Det betyder att vi kan komma åt den här variabeln från övriga källkodsfiler 370 00:25:47,090 --> 00:25:49,590 som när vi skapar en ny aktivitet. 371 00:25:49,590 --> 00:25:52,190 Vi kan referera till sträng i denna fil. 372 00:25:52,190 --> 00:25:57,160 Om det är privat, betyder det att det är begränsat till denna person fil här. 373 00:25:57,160 --> 00:26:02,430 Men vi ska kalla detta något extra budskap. 374 00:26:16,260 --> 00:26:23,300 Nu har vi gjort den här funktionen, och om vi klickar på knappen, kommer denna funktion att kallas. 375 00:26:23,300 --> 00:26:27,970 Men vi har inte gjort någonting, naturligtvis, med funktionen. 376 00:26:27,970 --> 00:26:33,130 Vad vi vill göra nu är att skapa en ny verksamhet, 377 00:26:33,130 --> 00:26:35,350 den verksamhet som faktiskt kommer att lanseras. 378 00:26:35,350 --> 00:26:44,330 I Eclipse kan vi säga nytt, Android aktivitet, tomt aktivitet. 379 00:26:44,330 --> 00:26:46,530 Vi kan ge det ett namn. 380 00:26:46,530 --> 00:26:57,050 Låt oss kalla det vårt resultat aktivitet. 381 00:26:57,050 --> 00:27:04,430 Och sedan denna hierarkiska överordnade fältet är ett sätt att ange 382 00:27:04,430 --> 00:27:08,180 hur verksamheten är relaterade till varandra. 383 00:27:08,180 --> 00:27:11,020 Eftersom detta kommer att lanseras från annan verksamhet 384 00:27:11,020 --> 00:27:27,520 Vi bör ange att den har den förälder huvudsakliga verksamhet. 385 00:27:27,520 --> 00:27:31,220 >> Och jag kunde ha klickat på nästa fält där, vilket skulle ha berättat för oss 386 00:27:31,220 --> 00:27:33,830 några valfria fält som det också var inklusive, 387 00:27:33,830 --> 00:27:38,800 men det fina med ADT, återigen, är att om jag rulla ner här 388 00:27:38,800 --> 00:27:45,740 i Manifest ihåg att allt detta verkligen var med som standard 389 00:27:45,740 --> 00:27:48,930 när vi skapade ursprungligen projektet, 390 00:27:48,930 --> 00:27:53,090 och nu eftersom vi använde detta skapar en ny aktivitet snarare än bara 391 00:27:53,090 --> 00:27:58,610 lägga vår egen klass filen eftersom vi gick igenom deras GUI för att göra detta 392 00:27:58,610 --> 00:28:01,930 det läggs redan allt detta till Manifest för oss, 393 00:28:01,930 --> 00:28:06,020 vilket betyder bara att nu operativsystemet inte kommer att klaga 394 00:28:06,020 --> 00:28:09,400 när vi försöker starta denna verksamhet. 395 00:28:09,400 --> 00:28:14,620 Och det också, naturligtvis, gav det en etikett, som också visar upp i strängar. 396 00:28:14,620 --> 00:28:17,340 Det gör en hel del saker på baksidan slutet för oss. 397 00:28:17,340 --> 00:28:20,140 Hur som helst, nu när vi har detta resultat såväl aktivitet, 398 00:28:20,140 --> 00:28:23,810 själva källkoden fil i källan mappen 399 00:28:23,810 --> 00:28:33,540 och du kan se-kort beröra detta- 400 00:28:33,540 --> 00:28:37,790 eftersom vi veta det om denna hierarkiska förälder 401 00:28:37,790 --> 00:28:46,640 det gav detta område android.r.ide.home i denna onOption valda sak. 402 00:28:46,640 --> 00:28:49,020 >> Vad detta i grunden säger är att det finns en meny-knapp nu 403 00:28:49,020 --> 00:28:53,110 att i det övre vänstra hörnet av skärmen 404 00:28:53,110 --> 00:29:02,220 Om jag går tillbaka till PowerPoint där vi först pratade om action bar 405 00:29:02,220 --> 00:29:05,380 på grund av den hierarkiska föräldern nu finns det en liten pil tillbaka hit 406 00:29:05,380 --> 00:29:10,610 och detta är klickbar så vi bör kunna-efter att vi faktiskt kör denna app- 407 00:29:10,610 --> 00:29:15,360 gå tillbaka, och det är ett sätt att spara oss lite kod där. 408 00:29:26,220 --> 00:29:40,180 Nu i detta-ja, det verkar vara klaga på det för ett ögonblick. 409 00:29:40,180 --> 00:29:43,910 Låt oss kommentera det ut. 410 00:29:43,910 --> 00:29:48,260 Nu, för att faktiskt samverka med dessa två aktiviteter, 411 00:29:48,260 --> 00:29:55,020 Vi måste skapa en avsiktsförklaring som omfattar all denna data. 412 00:29:55,020 --> 00:29:58,950 I SendMessage nu ska jag kryssning genom några bitar av kod 413 00:29:58,950 --> 00:30:00,700 och förklara att när jag går. 414 00:30:00,700 --> 00:30:06,280 En avsiktsförklaring, som sagt, är ett sätt att starta en aktivitet från en annan. 415 00:30:06,280 --> 00:30:10,000 Intent är typen. Vi håller på att skapa en variabel myIntent. 416 00:30:10,000 --> 00:30:13,980 >> Och detta är faktiskt ett objekt, vilket är anledningen till att vi måste ringa nya. 417 00:30:13,980 --> 00:30:18,500 Det är vanligt Java användning där, vilket kan ta lite tid att vänja sig. 418 00:30:18,500 --> 00:30:23,900 Detta innebär att vi använder aktiviteten eller klassen MainActivity, 419 00:30:23,900 --> 00:30:28,630 och avsikt på detta sätt tar den verksamhet det kommer från 420 00:30:28,630 --> 00:30:36,060 och den verksamhet som det kommer att, som vi kallar ResultActivity, 421 00:30:36,060 --> 00:30:38,170 och det är dess egen klass. 422 00:30:38,170 --> 00:30:41,720 Inkludera det. 423 00:30:41,720 --> 00:30:47,370 Och sedan som jag nämnde tidigare, gav vi detta ID till redigera textfältet 424 00:30:47,370 --> 00:30:53,710 och texten vyn, så för att programmässigt fånga 425 00:30:53,710 --> 00:31:01,860 texten som finns i RedigeraText 426 00:31:01,860 --> 00:31:06,710 Vi använder denna funktion kallas findViewByID, 427 00:31:06,710 --> 00:31:13,660 som liknar något som du kommer att använda när man försöker få fält från DOM. 428 00:31:13,660 --> 00:31:17,560 Kanske David berättar om detta i föreläsningen. 429 00:31:17,560 --> 00:31:26,600 Men det är bara ett sätt att få dem-det är därför vi märka dessa saker med dessa områden. 430 00:31:26,600 --> 00:31:31,110 Id.editText1. 431 00:31:31,110 --> 00:31:35,220 Det är redan autocompleting för mig där. 432 00:31:35,220 --> 00:31:42,010 >> Och sedan ska vi även-denna RedigeraText nu att vi har fältet 433 00:31:42,010 --> 00:31:47,640 inom vårt program, gjorde allt som findViewByID var i princip 434 00:31:47,640 --> 00:31:50,870 du kan tänka på det som ger oss en hänvisning till detta RedigeraText. 435 00:31:50,870 --> 00:31:54,570 Nu vill vi få strängen eller meddelandet 436 00:31:54,570 --> 00:32:00,670 inom den RedigeraText som vi kan göra med hjälp av- 437 00:32:00,670 --> 00:32:03,360 du kan tänka EditText som en struct- 438 00:32:03,360 --> 00:32:07,600 Vi kallar det ett objekt i Java-med en hel massa olika metoder 439 00:32:07,600 --> 00:32:10,650 eller fält och attribut fäst vid den. 440 00:32:10,650 --> 00:32:15,510 När jag säger RedigeraText. det ger mig chansen att komma 441 00:32:15,510 --> 00:32:19,770 en metod såsom Gettext, som kommer att få den aktuella texten 442 00:32:19,770 --> 00:32:23,990 i det RedigeraText och sedan konvertera detta uttryckligen 443 00:32:23,990 --> 00:32:26,520 till en sträng, och vi har sparat meddelandet. 444 00:32:26,520 --> 00:32:32,730 Nu vill vi verkligen göra något med den avsikt vi skapade bara ögonblick sedan. 445 00:32:32,730 --> 00:32:40,250 Jag kommer att lägga extra som det kallas i uppsåt, 446 00:32:40,250 --> 00:32:43,330 vilket, återigen, som jag sagt tidigare, är detta ett sätt att skapa bunten 447 00:32:43,330 --> 00:32:45,980 med en massa data. 448 00:32:45,980 --> 00:32:50,920 Extra budskap är vår tag så vi vet vad vi sparar detta under, 449 00:32:50,920 --> 00:32:56,700 och då jag även meddelandet. 450 00:32:56,700 --> 00:33:04,870 >> Och då kan vi faktiskt börja verksamheten genom att ge den parametern myIntent. 451 00:33:04,870 --> 00:33:10,630 Och detta faktiskt kommer att starta verksamheten, så nu sedan jag uppgraderat till Windows 8 452 00:33:10,630 --> 00:33:15,870 det kan finnas vissa fel som dyker upp snabbt, men försök att ignorera dem. 453 00:33:28,010 --> 00:33:30,310 Och detta är den Android-emulator. 454 00:33:30,310 --> 00:33:33,540 Förhoppningsvis koden faktiskt kommer dyka upp i ett ögonblick. 455 00:33:33,540 --> 00:33:36,680 Återigen, ignorerar alla dessa små saker. 456 00:33:36,680 --> 00:33:42,290 Men Android emulator kan emulera någon version av operativsystemet 457 00:33:42,290 --> 00:33:45,180 från de tidigaste och kära, Donut, pepparkakor. 458 00:33:45,180 --> 00:33:49,640 Detta är Jelly Bean 4.1. 459 00:33:49,640 --> 00:33:53,150 Men som ni kan se just nu, är detta något vi gjorde. 460 00:33:53,150 --> 00:33:55,780 Detta har MainActivity, RedigeraText, knappen. 461 00:33:55,780 --> 00:34:01,550 Jag kan skriva något här, men vad är det vi saknar i detta läge? 462 00:34:01,550 --> 00:34:05,190 Vi gjorde det område i MainActivity som kommer att skicka meddelandet 463 00:34:05,190 --> 00:34:08,570 till den andra verksamheten, men på denna punkt 464 00:34:08,570 --> 00:34:12,330 Vi har inte gjort någonting i den andra verksamheten, så det kommer inte att få någonting. 465 00:34:12,330 --> 00:34:18,800 Låt oss sluta upp att en del innan vi går vidare. 466 00:34:18,800 --> 00:34:25,760 >> Detta resultat aktivitet, vad vi behöver göra är att vi behöver göra är att vi måste- 467 00:34:25,760 --> 00:34:30,070 Vi kan också referera avsikten inom denna verksamhet, 468 00:34:30,070 --> 00:34:33,580 så vi måste fånga uppsåt, vilket är riktigt enkelt. 469 00:34:33,580 --> 00:34:40,780 Det är en funktion som ingår i verksamheten klassen, 470 00:34:40,780 --> 00:34:47,610 så vi kan bara säga "Få meddelandet från uppsåt." 471 00:34:47,610 --> 00:34:56,260 "Intent myIntent = getIntent." 472 00:34:56,260 --> 00:35:00,030 Och detta kommer att ge oss-nu myIntent är ett objekt, 473 00:35:00,030 --> 00:35:05,380 vilket är en referens till den avsiktsförklaring som ledde oss till denna verksamhet. 474 00:35:05,380 --> 00:35:10,130 MainActivity ringer och ger extra information för att leda verksamheten. 475 00:35:10,130 --> 00:35:14,070 Resultat aktivitet tittar nu på den avsiktsförklaring som ledde det här, 476 00:35:14,070 --> 00:35:23,540 och vi kan komma åt det budskap som vi skapade i den andra, 477 00:35:23,540 --> 00:35:26,370 getStringExtra, och detta kommer Komplettera automatiskt för mig. 478 00:35:26,370 --> 00:35:31,190 Och sedan minns, hur vi taggade att databit 479 00:35:31,190 --> 00:35:38,400 var genom att ge det här området just här, detta offentliga sträng, 480 00:35:38,400 --> 00:35:42,080 som är taggen för strängen vi faktiskt ingår. 481 00:35:42,080 --> 00:35:48,450 >> Om jag säger MainActivity.Extra_Message 482 00:35:48,450 --> 00:35:52,200 Det är just där, och det är ungefär som parameternamnet 483 00:35:52,200 --> 00:35:55,330 när vi passerade koden från kontrollenheten till mallen, 484 00:35:55,330 --> 00:35:57,680 när vi skulle säga något titel pil. 485 00:35:57,680 --> 00:36:01,140 Det är samma sorts idé där. 486 00:36:01,140 --> 00:36:07,130 Nu, kom ihåg detta. 487 00:36:07,130 --> 00:36:12,230 Vi hade också denna auto skapat eller auto genererade koden 488 00:36:12,230 --> 00:36:16,410 för resultatet aktivitet, vilket inkluderar texten vyn i mitten 489 00:36:16,410 --> 00:36:19,690 som säger hej världen. 490 00:36:19,690 --> 00:36:27,510 Vi skulle kunna göra det större. 491 00:36:27,510 --> 00:36:33,980 Låt oss göra det först. 492 00:36:33,980 --> 00:36:39,550 Vi skulle kunna göra det 40 densitet oberoende pixlar. 493 00:36:39,550 --> 00:36:42,670 Låt oss se, det är super enorma. Det kommer att bli okej. 494 00:36:42,670 --> 00:36:48,180 Och sedan för att referera till denna person textvy inom vår kod 495 00:36:48,180 --> 00:36:53,890 Vi måste ge den ett ID, 496 00:36:53,890 --> 00:36:58,350 och för att göra det vi säger @ + id, vilket innebär att vi tilldelar det ID. 497 00:36:58,350 --> 00:37:02,480 Om vi ​​bara sa @ id det skulle anta att vi refererar ett ID som redan finns, 498 00:37:02,480 --> 00:37:07,760 och låt oss kalla detta vår resultTextView. 499 00:37:07,760 --> 00:37:10,570 Och märker att i XML finns det inget behov av semikolon eller något. 500 00:37:10,570 --> 00:37:12,380 Allt är inom dessa taggar. 501 00:37:12,380 --> 00:37:15,530 Det är väldigt likt HTML i många sinnen. 502 00:37:15,530 --> 00:37:22,760 >> Det tar lite tid att vänja sig, men så småningom kommer du att känna ganska bekväm med det. 503 00:37:22,760 --> 00:37:31,320 Låt oss uppdatera texten för vårt resultat text vy, 504 00:37:31,320 --> 00:37:35,650 och som vi gjorde när vi fick att redigera textfält i vår övriga verksamhet 505 00:37:35,650 --> 00:37:46,630 i MainActivity Här kommer vi också på samma sätt- 506 00:37:46,630 --> 00:37:54,890 Vi hittar vyn av ID. 507 00:37:54,890 --> 00:37:59,640 Och R, ifall jag inte nämnde det förut, är hänvisningen till våra resurser mappen, 508 00:37:59,640 --> 00:38:05,350 och sedan ID är en referens till allt i resurser mappen, alla ID, 509 00:38:05,350 --> 00:38:10,060 och resultTextView. 510 00:38:10,060 --> 00:38:13,010 Och precis som tidigare, är resultTextView ett objekt, 511 00:38:13,010 --> 00:38:15,780 vilket innebär att den har alla dessa egenskaper som är associerade med det. 512 00:38:15,780 --> 00:38:20,610 När vi använder gettext för edit text för textfältet eller texten vy 513 00:38:20,610 --> 00:38:23,980 Vi kan faktiskt använda setText, 514 00:38:23,980 --> 00:38:26,960 och sedan fann vi redan budskapet från uppsåt, 515 00:38:26,960 --> 00:38:35,760 så jag kan säga budskapet, och det kommer faktiskt in meddelandet. 516 00:38:35,760 --> 00:38:41,820 >> Det tar en stund att starta, och då kan vi se om det kraschar, 517 00:38:41,820 --> 00:38:48,670 men några frågor om denna process just där, den sortens interaktion? 518 00:38:48,670 --> 00:38:51,490 På många sätt är det enkelt. 519 00:38:51,490 --> 00:38:53,960 Anledningen till att jag går igenom något relativt enkelt 520 00:38:53,960 --> 00:38:57,330 är, återigen, eftersom du får se samspelet mellan layout, 521 00:38:57,330 --> 00:38:59,520 källkoden hur du refererar till saker 522 00:38:59,520 --> 00:39:07,680 och kanske få en liten exponering mot hur Java fungerar det. 523 00:39:07,680 --> 00:39:16,500 Om jag faktiskt skriva något här, liksom ohai, och då jag klickar på knappen, 524 00:39:16,500 --> 00:39:22,260 det startar en ny verksamhet, och att textvy säger ohai. 525 00:39:22,260 --> 00:39:27,640 Det är väldigt enkelt, men förhoppningsvis efter det exemplet 526 00:39:27,640 --> 00:39:32,310 du slags se hur detta samspel fungerar, och nu röra av filer 527 00:39:32,310 --> 00:39:36,870 på vänster sida för alla dessa projekt mappar, förhoppningsvis du vet var du ska leta nu. 528 00:39:36,870 --> 00:39:38,700 Detta är din källkod område. 529 00:39:38,700 --> 00:39:41,760 >> Layout är egentligen det enda du ska ta itu med tills du inkludera bilder 530 00:39:41,760 --> 00:39:46,370 och drawables eller vad, och värderingar, kommer att innehålla strängar, 531 00:39:46,370 --> 00:39:51,960 som vi nämnt, och sedan stilar är något som är ungefär som CSS. 532 00:39:51,960 --> 00:39:56,410 Adress när du vill, men tills du känner dig bekväm med att lägga till extra stil 533 00:39:56,410 --> 00:40:02,520 att din ansökan finns det ingen anledning att oroa sig för mycket. 534 00:40:02,520 --> 00:40:07,410 Bara att slå upp en annan sak du kommer definitivt vill inkludera- 535 00:40:07,410 --> 00:40:13,010 antar att du vill integrera häftiga funktioner och spara lite extra kodning- 536 00:40:13,010 --> 00:40:16,460 skulle vara att inkludera 3: e parts bibliotek. 537 00:40:16,460 --> 00:40:19,840 Här är den lilla Android killen med Sherlock Holmes hatt. 538 00:40:19,840 --> 00:40:23,040 Detta är en åtgärd bar Sherlock bibliotek, 539 00:40:23,040 --> 00:40:25,390 vilket i princip innebär att åtgärder bar du såg tidigare, 540 00:40:25,390 --> 00:40:29,590 som nu är standard i Ice Cream Sandwich och Jelly Bean, 541 00:40:29,590 --> 00:40:33,100 om du vill ta med den sortens användarupplevelse för användare på äldre versioner 542 00:40:33,100 --> 00:40:39,290 och rädda dig från att behöva oroa hur användaren ska navigera 543 00:40:39,290 --> 00:40:42,490 på äldre versioner när det där inte är där du kan inkludera detta bibliotek 544 00:40:42,490 --> 00:40:46,770 och sedan är det bara att referens-snarare än standard Android 545 00:40:46,770 --> 00:40:50,250 bibliotek för åtgärden bar, refererar du detta stöd bibliotek. 546 00:40:50,250 --> 00:40:53,090 >> Saker som Scoreloop, det är bra om du ska inkludera ett spel. 547 00:40:53,090 --> 00:40:57,280 Det låter dig lägga poängtavlor och prestationer till spel. 548 00:40:57,280 --> 00:41:00,900 AdMob är ett sätt att sätta annonser i dina applikationer 549 00:41:00,900 --> 00:41:02,900 om du vill göra lite pengar på det. 550 00:41:02,900 --> 00:41:05,730 Naturligtvis finns det Facebook och Twitter för att integrera det 551 00:41:05,730 --> 00:41:08,170 Om du vill dela saker lätt, et cetera. 552 00:41:08,170 --> 00:41:15,120 Dropbox, likaså, och Google Analytics är att diagrammet ser man där. 553 00:41:15,120 --> 00:41:19,070 Det kommer att vara mycket viktigt om du verkligen vill se vem som interagerar 554 00:41:19,070 --> 00:41:25,800 med din app eller vem det är, hur de interagerar, et cetera. 555 00:41:25,800 --> 00:41:30,650 Google, som standard, berättar en hel del statistik om vem som har installerat din app 556 00:41:30,650 --> 00:41:35,020 och vilka telefoner de har, vilket operativsystem versioner de har. 557 00:41:35,020 --> 00:41:38,080 Men om du vill se vem som använder det på en daglig basis och hur de använder det 558 00:41:38,080 --> 00:41:42,860 då du vill att inkludera någon form av tracking system sånt. 559 00:41:42,860 --> 00:41:44,990 >> När du är redo att distribuera din app 560 00:41:44,990 --> 00:41:46,930 Jag behöver inte gå in på det för mycket djup. 561 00:41:46,930 --> 00:41:49,090 Klicka på länken här, Google Play. 562 00:41:49,090 --> 00:41:51,080 Det brukade vara den Android marknaden. 563 00:41:51,080 --> 00:41:53,470 De skyltas allt med Google Play, 564 00:41:53,470 --> 00:41:55,230 så nu du skickar det. 565 00:41:55,230 --> 00:41:57,140 Det är mycket enkelt. 566 00:41:57,140 --> 00:42:01,070 Du måste inkludera en beskrivning, några skärmdumpar. 567 00:42:01,070 --> 00:42:05,660 Som sagt, det finns ingen godkännandeprocess som iOS. 568 00:42:05,660 --> 00:42:07,270 Och vart man ska gå härifrån? 569 00:42:07,270 --> 00:42:09,450 Jag visade dig en riktigt enkelt exempel. 570 00:42:09,450 --> 00:42:13,270 Förhoppningsvis om det verkar fruktansvärt enkelt 571 00:42:13,270 --> 00:42:15,740 så det är nog ett gott tecken. 572 00:42:15,740 --> 00:42:20,080 Om du alls kändes lite förvirrad eller osäker på exakt vad jag skriver 573 00:42:20,080 --> 00:42:26,160 det är också bra, men härifrån går till Google Guides. 574 00:42:26,160 --> 00:42:28,330 Detta är ett bra ställe att börja. 575 00:42:28,330 --> 00:42:31,460 Det kommer att prata igenom vad de förväntar sig när det gäller ansökan design, 576 00:42:31,460 --> 00:42:33,380 hur användarna interagerar normalt med det. 577 00:42:33,380 --> 00:42:36,450 Det är mycket mer fri form än iOS, skulle jag säga, 578 00:42:36,450 --> 00:42:41,330 där det verkar som om bord vyer-Jag vet inte, det är deras bröd och smör. 579 00:42:41,330 --> 00:42:44,690 Allt är en tabell vy glida upp och ner. 580 00:42:44,690 --> 00:42:48,160 Med Android de uppmuntrar definitivt folk att titta på det från 581 00:42:48,160 --> 00:42:51,720 en hel massa olika perspektiv. 582 00:42:51,720 --> 00:42:56,000 >> När du inkludera Software Development Kit i ADT 583 00:42:56,000 --> 00:43:03,010 Som standard har du en hel massa prov projekt i Android. 584 00:43:03,010 --> 00:43:05,470 Just här, Android, Android provet Project. 585 00:43:05,470 --> 00:43:11,870 Om jag klickar på det, så jag kan välja en version för vilken av provet projekt tillämpas. 586 00:43:11,870 --> 00:43:13,300 Det finns en hel massa olika saker här. 587 00:43:13,300 --> 00:43:16,690 Det börjar med action bar kompatibilitet, 588 00:43:16,690 --> 00:43:24,610 accelerometer lek, säkerhetskopiering och återställning, Bluetooth, gest byggmästare. 589 00:43:24,610 --> 00:43:28,930 Jetboy är ett urval spel de ger dig, som är LunarLander. 590 00:43:28,930 --> 00:43:31,250 Det finns en hel massa exempelprogram här, 591 00:43:31,250 --> 00:43:35,290 och de är alla inriktade på olika aspekter av Android API, 592 00:43:35,290 --> 00:43:41,520 och tanken är att när du gör din ansökan 593 00:43:41,520 --> 00:43:44,110 Du behöver inte lära dig allt om Android att göra en Android-app. 594 00:43:44,110 --> 00:43:47,300 Du behöver bara lära sig om de delar som du faktiskt kommer att använda. 595 00:43:47,300 --> 00:43:49,340 Titta på dessa exempel på bibliotek. 596 00:43:49,340 --> 00:43:51,510 Känn dig fri att kopiera och klistra in koden och återanvända den. 597 00:43:51,510 --> 00:43:53,850 Det är en stor sak att titta på svårare koden 598 00:43:53,850 --> 00:43:57,060 och försöka förstå det, är som naturligtvis varför CS50 599 00:43:57,060 --> 00:44:01,510 Vi ger ofta du stora mängder källkod. 600 00:44:01,510 --> 00:44:04,620 Titta på några av dessa om du ska använda liknande bibliotek 601 00:44:04,620 --> 00:44:08,630 och sedan tillämpa den på din egen kod. 602 00:44:08,630 --> 00:44:10,430 Och naturligtvis, det finns tutorials. 603 00:44:10,430 --> 00:44:12,690 Sök efter tutorials. 604 00:44:12,690 --> 00:44:17,020 Jag hittade en hel del bra sådana på nätet som kan ge dig upp till hastigheten 605 00:44:17,020 --> 00:44:20,080 med vilka fragment egentligen är och hur du kan använda dem. 606 00:44:20,080 --> 00:44:22,240 >> Några av dessa nya designen saker, som fragment, 607 00:44:22,240 --> 00:44:26,840 du verkligen behöver inte vara orolig om du gör en 608 00:44:26,840 --> 00:44:30,560 ganska stora i omfattning projektet. 609 00:44:30,560 --> 00:44:32,510 De är saker som Google försöker att fasa in 610 00:44:32,510 --> 00:44:35,570 Stackoverflow är naturligtvis din vän. 611 00:44:35,570 --> 00:44:37,930 Förhoppningsvis jag sålde dig lite på Android, 612 00:44:37,930 --> 00:44:41,640 inser att det är mycket lättare att närma sig i termer av just det kodspråk. 613 00:44:41,640 --> 00:44:45,970 Java är Jag skulle säga mycket lättare att förstå än Objective-C. 614 00:44:45,970 --> 00:44:50,780 Android växer Jag tror mycket mer än iOS. 615 00:44:50,780 --> 00:44:54,890 Jag menar, är uppgifterna där också, bortsett från vad jag tror. 616 00:44:54,890 --> 00:44:56,920 Det kommer att vara runt ett tag, 617 00:44:56,920 --> 00:45:00,880 och de är några år efter när det gäller deras konstruktion cykler, 618 00:45:00,880 --> 00:45:04,690 så det är slags förståeligt att de fortfarande jobbar igenom några av dessa 619 00:45:04,690 --> 00:45:09,080 konsistens frågor, som denna åtgärd bar är en ny sak för dem ändå, 620 00:45:09,080 --> 00:45:16,010 sorts skapa liknande användarupplevelse i alla sina program. 621 00:45:16,010 --> 00:45:20,650 Förhoppningsvis kan du gå vidare nu och öppna upp Eclipse 622 00:45:20,650 --> 00:45:22,870 och göra din egen Android-appar. 623 00:45:22,870 --> 00:45:30,240 >> Har någon några frågor innan vi avsluta vad som helst? 624 00:45:30,240 --> 00:45:34,410 Jag kan berätta svaret är 42. 625 00:45:34,410 --> 00:45:41,990 Tja, glad kodning alla, och lycka till. 626 00:45:41,990 --> 00:45:44,990 [CS50.TV]