Android第一行代碼讀書(shū)筆記 - 第一章

====================================
====== 第一章:開(kāi)始啟程 ======
====================================

Android四層架構(gòu):Linux內(nèi)核層(硬件)、系統(tǒng)運(yùn)行庫(kù)層(底層類(lèi)庫(kù))、應(yīng)用框架層(框架)诵原、應(yīng)用層

繼續(xù)書(shū)籍:學(xué)習(xí)一下JavaSE的基礎(chǔ)案淋。然后就可以直接看“第一行代碼第二版”

四大組件:
活動(dòng)(activity)妓湘、應(yīng)用程序的門(mén)面员咽,看得見(jiàn)摸得著的東西
服務(wù)(service)妆兑、后臺(tái)默默運(yùn)行的就是服務(wù)惹骂,即使用戶(hù)退出了應(yīng)用苏携,仍可以繼續(xù)運(yùn)行
廣播接收器(broadcast receiver)、允許接受各處的廣播消息对粪,電話右冻、短信等
內(nèi)容提供器(content provider)、為應(yīng)用程序之間共享數(shù)據(jù)(比如獲取電話簿中聯(lián)系人)

搭建開(kāi)發(fā)環(huán)境:按照網(wǎng)上的教程即可衩侥。書(shū)籍不一定是最新的国旷。針對(duì)Mac。先安裝JDK即可茫死,我下載的是1.8的跪但。然后安裝Android Studio(Android的開(kāi)發(fā)工具,然后按照步驟峦萎,無(wú)需做額外的設(shè)置就可以運(yùn)行了)

目錄結(jié)構(gòu)解釋?zhuān)?br> 看一下項(xiàng)目的結(jié)構(gòu)屡久,我們的主要活動(dòng)都在src文件夾里面。

.gradle爱榔、.idea目錄:都是放置Android studio這個(gè)開(kāi)發(fā)工具自動(dòng)生成的一些文件被环,無(wú)需關(guān)心,不要手動(dòng)編輯详幽。
App:項(xiàng)目中的代碼資源都在這個(gè)目錄下筛欢,等會(huì)會(huì)詳細(xì)解釋。我們最主要關(guān)心的就是這個(gè)目錄唇聘。
gradle:這個(gè)目錄下包含了gradle wrapper的配置文件版姑。Android studio默認(rèn)沒(méi)有啟用gradle wrapper的方式。不明白迟郎,后面以后可能會(huì)解釋剥险。
.gitignore:很明顯這是用于版本管理控制的忽略文件的。
ActivityTest.iml:iml文件是所有IntelliJ JDEA項(xiàng)目都會(huì)自動(dòng)生成的一個(gè)文件(Android Studio就是基于IntelliJ JDEA開(kāi)發(fā)的)宪肖,這個(gè)用于標(biāo)識(shí)這是一個(gè)IntelliJ IDEA項(xiàng)目)表制。
Build.gradle:項(xiàng)目全局的gradle構(gòu)建腳本健爬,通常這個(gè)文件中的內(nèi)容是不需要修改的。
Gradle.properties:全局的gradle配置文件么介,在這個(gè)文件配置的屬性會(huì)影響到項(xiàng)目中所有的gradle編譯腳本
gradlew和gradlew.bat:用來(lái)在命令行界面中執(zhí)行g(shù)radle命令娜遵,其中g(shù)radlew是在Linux或Mac系統(tǒng)中使用的,gradlew.bat是在Windows系統(tǒng)中使用壤短。
Local.properties:用于指定Android SDK路徑魔熏,通常內(nèi)容都是自動(dòng)生成的,不需要修改鸽扁,除非你本機(jī)中的AndroidSDK位置發(fā)生了改變蒜绽。那么改為新的位置即可。
Settings.gradle:用于指定項(xiàng)目中所有引入的模塊桶现。由于項(xiàng)目中只有一個(gè)app模塊躲雅。因此該文件只引入了app這一個(gè)模塊,通常模塊也是自動(dòng)完成的不需要我們手動(dòng)去修改骡和。

詳細(xì)介紹app目錄:

Build目錄:包含一些在編譯時(shí)自動(dòng)生成的文件相赁,我們無(wú)需關(guān)心。
Libs目錄:如果項(xiàng)目用到了第三方j(luò)ar包慰于,就需要把這些jar包放到libs目錄下钮科,放在這個(gè)目錄下的jar包會(huì)被自動(dòng)添加到構(gòu)建路徑里。
Src目錄婆赠,最主要的目錄:
androidTest:用于編寫(xiě)Android測(cè)試用例的绵脯。
main里面:
Androidmannifest.xml:整個(gè)Android項(xiàng)目的配置文件,你在程序中定義的所有四大組件都需要在這個(gè)文件里注冊(cè)休里,另外還可以給應(yīng)用程序添加權(quán)限聲明等等蛆挫。
Test:編寫(xiě)單元測(cè)試用例的。
proguard_rules.pro:用于指定項(xiàng)目代碼的混淆規(guī)則妙黍。
Java:放置我們素有java代碼的地方悴侵,比如關(guān)聯(lián)我們activity的java代碼就在這里。
Res:資源目錄:
drawable用來(lái)存放圖片的拭嫁。
Mipmap開(kāi)頭的用來(lái)存放圖標(biāo)的可免。(多個(gè)文件夾主要用于適配多種機(jī)型不同分辨率)
Values開(kāi)頭的用來(lái)存放字符串、樣式做粤、顏色等配置的浇借。
Layout用來(lái)存放布局文件的。

看一下Manifest.xml文件驮宴。沒(méi)有在Manifest.xml中注冊(cè)的活動(dòng)是不能使用的逮刨。

Activity是Android系統(tǒng)提供的一個(gè)活動(dòng)的基類(lèi)呕缭,我們項(xiàng)目中所有的活動(dòng)都必須繼承它或它的子類(lèi)才能擁有活動(dòng)的特性)(AppCoompatctivity是Activity的子類(lèi))

onCreate()方法堵泽,是一個(gè)活動(dòng)被創(chuàng)建時(shí)必定會(huì)執(zhí)行的方法修己。

setContentView()方法,就是這個(gè)方法給當(dāng)前的活動(dòng)引入了一個(gè)hello_world_layout布局迎罗,(在res/layout目錄下可以找到hello_world_layout.xml這個(gè)文件)
打開(kāi)這個(gè)xml文件并切換到Text視圖睬愤。(底部可以看到切換“design”和“text”兩種視圖)

再看一下src/res目錄中:
drawable開(kāi)頭的文件夾是用來(lái)存放圖片的。(有多個(gè)文件夾也是為了適配各種設(shè)備纹安,我們也可以自己創(chuàng)建drawable-hdpi尤辱、drawable-xhdpi等等文件夾。)
所有以mipmap開(kāi)頭的文件夾都是用來(lái)存放應(yīng)用圖標(biāo)的厢岂。(之所有有這么多個(gè)文件開(kāi)頭是為了更好的適配各種機(jī)型)
所有以values開(kāi)頭的文件夾都是用來(lái)存放字符串光督、樣式、顏色等配置的塔粒,
layout文件夾是用來(lái)存放布局文件的结借。

當(dāng)程序運(yùn)行時(shí),會(huì)自動(dòng)根據(jù)當(dāng)前運(yùn)行設(shè)備分辨率的高低選擇加載哪個(gè)文件夾下的圖片卒茬。(如果美工只提供給我們一份圖片船老,這時(shí)我們把圖片放在drawable-xxhdpi中即可)

1、修改一下values文件夾下的strings.xml文件
<resources>
<string name=“app_name”>HelloWorld<string/>
</resources>

A圃酵、在代碼中可以通過(guò)R.string.app_name可以獲得該字符串的引用
B柳畔、在xml中通過(guò)@string/app_name可以獲得該字符串的引用

其實(shí)基本語(yǔ)法就是A、B這兩種方式郭赐。其中string部分是可以替換的薪韩,如果是引用圖片資源,可以替換成drawable捌锭。如果是引用應(yīng)用圖標(biāo)躬存,可以替換成mipmap。如果是引用布局文件舀锨,可以替換成

這時(shí)候解釋一下AndroidManifest.xml文件:
<application
android:allowBackup:”true”
android:icon=“@mipmap/ic_la”
android:label=“@string/app_name”
android:supportsRtl=“true”
android:theme=“@style/AppTheme”>

</application>
其中岭洲,HelloWorld項(xiàng)目的應(yīng)用圖標(biāo)是通過(guò)android:icon屬性類(lèi)指定的,應(yīng)用名稱(chēng)由android:label屬性指定的坎匿,

詳解build.gradel文件:

不同于Eclipse盾剩,Android Studio是采用Gradle來(lái)構(gòu)建項(xiàng)目的。gradle是一個(gè)非常先進(jìn)的項(xiàng)目構(gòu)建工具替蔬。它使用了一種基于groovy的領(lǐng)域特定語(yǔ)言(DSL)來(lái)聲明項(xiàng)目設(shè)置告私,摒棄了傳統(tǒng)基于xml(如ant和maven)的各種繁瑣配置。
HelloWorld項(xiàng)目中有兩個(gè)build.gradle文件承桥,一個(gè)是最外層目錄下驻粟,一個(gè)是在app目錄下。這兩個(gè)文件對(duì)構(gòu)建android studio項(xiàng)目起到至關(guān)重要的作用。

1蜀撑、最外層的build.gradle文件:
buildscript {
respsitories {
// 代碼托管倉(cāng)庫(kù)挤巡,聲明之后,我們就可以在項(xiàng)目中輕松引用jcenter上的開(kāi)源項(xiàng)目了
jcenter()
}
dependencies {
// 聲明一個(gè)gradle插件酷麦。因?yàn)間radle并不是專(zhuān)門(mén)為android而生的矿卑,要想使用它構(gòu)建android項(xiàng)目,就需要聲明以下的插件
classpath ‘com.android.tools.build:gradle:2.2.0’
}
}
allprojects {
repositories {
jcenter()
}
}
這些代碼都是自動(dòng)生成的沃饶。

2母廷、app目錄下的build.gradle文件:
// 定義了一個(gè)插件(一般有兩種值可選,com.android.library表示這是一個(gè)庫(kù)模塊糊肤,application表示是一個(gè)應(yīng)用模塊琴昆,應(yīng)用模塊可以直接運(yùn)行,庫(kù)模塊只能作為代碼庫(kù)依附于別的應(yīng)用程序模塊來(lái)運(yùn)行馆揉。
apply plugin: ‘com.android.application’

// android閉包
android {
    // 編譯版本
    compileSdkVersion 24
    // 構(gòu)建工具的版本椎咧,如果有更新的版本,android studio會(huì)有提示
    buildToolsVersion   “24.0.2”
    defaultConfig {
        // 項(xiàng)目的包名把介,前面其實(shí)我們已經(jīng)指定過(guò)包名勤讽,如果想在后面對(duì)其修改,就是在這里修改拗踢。
        appliationId “com.example.helloworld”
        // 最低sdk的版本脚牍,15表示最低兼容到android4.0
        minSdkVersion 15
        // 表示你在該版本上已經(jīng)做過(guò)了充分的測(cè)試,系統(tǒng)將會(huì)為你的應(yīng)用程序啟用一些最新的功能和特性(如果是23以上巢墅,系統(tǒng)會(huì)為你的程序啟用運(yùn)行時(shí)權(quán)限功能)
        tragetSdkVersion 24
        // 版本號(hào)
        versionCode 1
        // 版本名
        versionName “1.0”
    }
    // 用于指定安裝文件的配置
    buildTypes {
        release {
            // 用于是否對(duì)項(xiàng)目代碼進(jìn)行混淆诸狭。true表示混淆,false表示不混淆
            minifyEnabled false
            // 混淆時(shí)使用的規(guī)則文件君纫,這里指定了兩個(gè)文件
            proguardFiles getDefaultProguardFile(‘proguard-android.txt’),’proguard.rules.pro’
        }
        // debug表示測(cè)試版驯遇,可以忽略不寫(xiě)
    }
}
// 可以指定當(dāng)前項(xiàng)目所有的依賴(lài)關(guān)系,通常項(xiàng)目一共有三種依賴(lài)方式蓄髓,1叉庐、本地依賴(lài)。2会喝、庫(kù)依賴(lài)陡叠。3、遠(yuǎn)程依賴(lài)肢执。
// 本地依賴(lài)可以對(duì)本地的jar包或目錄添加依賴(lài)關(guān)系
// 庫(kù)依賴(lài)可以對(duì)項(xiàng)目中的庫(kù)模塊添加依賴(lài)關(guān)系
// 遠(yuǎn)程依賴(lài)可以對(duì)jcenter庫(kù)上的開(kāi)源項(xiàng)目添加依賴(lài)關(guān)系
dependencies {
    // 這是本地依賴(lài)枉阵,它將libs目錄下所有.jar后綴的文件都添加到項(xiàng)目的構(gòu)建路徑中。
    compile fileTree(dir:’libs’, include: [‘*.jar’])
    // 遠(yuǎn)程依賴(lài)聲明预茄,加上這個(gè)聲明兴溜,gradle在構(gòu)建項(xiàng)目時(shí)會(huì)首先檢查一下本地是否已經(jīng)有這個(gè)庫(kù)的緩存,如果沒(méi)有的話就會(huì)去自動(dòng)聯(lián)網(wǎng)下載,然后再添加到項(xiàng)目的構(gòu)建路徑中
    compile ‘com.android.support:appcompat-v7:24.2.1’
    // 用于單元測(cè)試用例庫(kù)的
    testCompile ‘junit:junit:4.12’
}

日志工具類(lèi):Log(android.util.Log)拙徽,以下五個(gè)方法供我們打印日志刨沦。
Log.v() 用于打印最瑣碎的意義最小的日志信息。對(duì)應(yīng)級(jí)別verbose斋攀,是android日志里面級(jí)別最低的一種。
Log.d() 用于打印一些調(diào)試信息梧田,對(duì)調(diào)試和分析問(wèn)題有幫助淳蔼。對(duì)應(yīng)級(jí)別debug,比verbose高一級(jí)
Log.i() 用于打印一些比較重要的數(shù)據(jù)裁眯,可以幫你分析用戶(hù)行為數(shù)據(jù)鹉梨。對(duì)應(yīng)界別info,比debug高一級(jí)
Log.w() 用于打印一些警告信息穿稳,提示程序這個(gè)地方可能存在潛在風(fēng)險(xiǎn)存皂。對(duì)應(yīng)級(jí)別warn,比info高一級(jí)
Log.e() 用于打印一些錯(cuò)誤信息逢艘,比如程序進(jìn)入了catch語(yǔ)句中旦袋,代表你的程序出現(xiàn)嚴(yán)重問(wèn)題了,必須盡快修復(fù)它改。對(duì)應(yīng)級(jí)別error疤孕,比warn高一級(jí)。
貌似還有一個(gè)assert央拖,

不建議用System.out.println()來(lái)輸出日志祭阀,android studio已經(jīng)不支持syso的快捷輸入了。輸入logd鲜戒,再點(diǎn)tab鍵专控,就可以自動(dòng)補(bǔ)全
如在onCreate()方法的外面輸入logt,然后按下tab鍵遏餐,就可以以當(dāng)前的類(lèi)名為值自動(dòng)生成一個(gè)Tag常量伦腐。
如下所示:
private static final String TAG = "HelloWorldActivity";

Logcat可以輕松添加過(guò)濾器,運(yùn)行項(xiàng)目之后失都,從Android studio中的底部可以很容易看到logcat蔗牡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嗅剖,隨后出現(xiàn)的幾起案子辩越,更是在濱河造成了極大的恐慌,老刑警劉巖信粮,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黔攒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)督惰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)不傅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人赏胚,你說(shuō)我怎么就攤上這事访娶。” “怎么了觉阅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵崖疤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我典勇,道長(zhǎng)劫哼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任割笙,我火速辦了婚禮权烧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伤溉。我一直安慰自己般码,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布乱顾。 她就那樣靜靜地躺著侈询,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糯耍。 梳的紋絲不亂的頭發(fā)上扔字,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音温技,去河邊找鬼革为。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舵鳞,可吹牛的內(nèi)容都是我干的震檩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜓堕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抛虏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起套才,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迂猴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后背伴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體沸毁,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡峰髓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了息尺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片携兵。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖搂誉,靈堂內(nèi)的尸體忽然破棺而出徐紧,到底是詐尸還是另有隱情,我是刑警寧澤炭懊,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布并级,位于F島的核電站,受9級(jí)特大地震影響凛虽,放射性物質(zhì)發(fā)生泄漏死遭。R本人自食惡果不足惜广恢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一凯旋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钉迷,春花似錦至非、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至舰蟆,卻和暖如春趣惠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背身害。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工味悄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塌鸯。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓侍瑟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親丙猬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涨颜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容