第一章
安卓應(yīng)用開發(fā)特色:
? 四大組件
Activity,Service,Broadcast Receiver,Content Provider
?? SQLite 數(shù)據(jù)庫
輕量級,運算速度極快的嵌入式關(guān)系型數(shù)據(jù)庫,不僅支持sql語句,還可以通過安卓封裝好的API進行操作,讓存儲和讀取數(shù)據(jù)變得特別方便。
??地理位置定位
Android手機都內(nèi)置GPS,結(jié)合強大的地圖功能,LBS這一領(lǐng)域潛力無限。
需要準備的工具:
?Java JDK
?Android SDK
?Android Studio
Project結(jié)構(gòu)模式下目錄介紹:
無需更改區(qū)域:
? .gradle & .idea 自動生成文件
? build 編譯時自動生成的文件
? gradle
。。。一堆,不過多贅述
開發(fā)者設(shè)計區(qū)域:
【app文件夾下】
1. build
無需關(guān)心
?2. libs
使用到的第三方j(luò)ar包都會放在libs目錄下,放在這個目錄下的jar包就會自動被添加到構(gòu)建路徑中去
?3. android Test
此處是用來編寫Android Test 測試用例用的
?4. java
毫無疑問,所有java代碼放置到該目錄下
?5. res
項目中使用到過的所有圖片、布局、字符串等資源都要存放在這個目錄下。
①圖片放在drawable目錄下
②布局放在layout目錄下
③字符串放在valves目錄下
?6. AndroidManifest.xml
這是整個Android項目的配置文件,程序中定義的四大組件都要在這個文件中注冊,另外還可以再擇個文件中給應(yīng)用程序添加應(yīng)用權(quán)限聲明。
7. test
自動化測試
?8. build.gradle
這是app模塊的gradle構(gòu)建腳本,這個文件會制定很多項目構(gòu)建相關(guān)的配置
9. proguard-rules.pro
代碼打包后如果不希望別人進行破解,通過這個文件讓代碼混淆,從而讓閱讀者難以閱讀
首先了解一下AndroidManifest.xml文件的這個部分,從中可以找到這段代碼:

這段代碼用于對MainActivity這個活動進行注冊,沒有在AndroidMainfest內(nèi)注冊的活動是不能使用的。
往下出現(xiàn)兩個<intent-filter>,其中的內(nèi)容非常重要
這兩行加起來的總效果就是MainActivity是這個項目的總活動,所謂總活動就是點擊應(yīng)用圖標后進入的第一個活動。
標識符【.Main】
接下來看一下這段MainActivity.java中的代碼,這是安卓四大組件中活動的代碼。
凡是在應(yīng)用中看得到的東西都是要放在Activity中的。

首先要注意MainActivity是繼承AppCompatActivity類的,這是一種向下兼容的Activity
可以將Activity在各個版本中增加的特性和功能最低兼容到Android 2.1系統(tǒng)
Activity是Android系統(tǒng)提供的一個活動基類,我們項目中的所有活動必須繼承它或者他的子類才能擁有活動特性。
這里AppCompatActivity就是Activity的子類。
然后注意到MainActivity中存在的onCreate()方法
這個方法是一個活動被創(chuàng)建時必須要執(zhí)行的方法
注意onCreate函數(shù)中第二行代碼:setContentView(R.layout.activity_main);
在這里我們要了解Android程序的設(shè)計其實是邏輯和視圖是分離的
因此通用的做法是:在布局文件中編寫界面,然后在活動中引進來
那么在此處就是這個setContentView()方法給當前的活動引入了一個main_activity布局。
布局文件都定義在res/layout目錄下,activity_main.xml文件中你能看到以下代碼:

android:text="Hello World!";便是HelloWorld的出處。
接下來我們來了解一下build.gradle這個文件。
不同于Eclipse,Android Studio是采用Gradle來構(gòu)建項目的。
Gradle是一個非常先進的項目構(gòu)建工具
它使用了一種基于Groovy(我也不知道這是啥,厲害就完事了)的領(lǐng)域特定語言(DSL)來聲明項目設(shè)置
摒棄了傳統(tǒng)基于XML的各種繁瑣配置。
仔細觀察會發(fā)現(xiàn)有兩個build.gradle文件,一個是最外層的,一個是app目錄下的。
先討論最外層的build.gradle文件
這些代碼都時自動生成的,雖然與法比較難,只看最關(guān)鍵的部分,難度不大。
兩處repositories閉包中都聲明了jcenter()這行配置
jcenter()其實是一個代碼管理倉庫
很多Android開源項目都會將代碼托管到j(luò)center上
聲明了這行配置之后,我們就可以輕松地引用任何jcenter上的開源項目了。
接下來,dependencies閉包中使用了classpath聲明了一個Gradle插件。
聲明這個插件的意義在于Gradle不僅僅服務(wù)于Android項目,還有Java,C++等。
因而我們想要使用它就需要聲明此插件。
這樣外層build.gradle文件中的要點就分析完了,通常情況下并不需要修改這個文件中的內(nèi)容。
除非你想添加全局的項目構(gòu)建配置。
再來看一下app目錄下的build.gradle文件:
我們來一行一行分析:
首先第一行應(yīng)用了一個插件,一般有兩種值可以選:
①com.android.application?表示這是一個應(yīng)用程序模塊。
②?com.android.library?表示這是一個庫模塊。
應(yīng)用程序模塊和庫模塊的最大差別在于,應(yīng)用程序模塊是可以直接運行的,而庫模塊只能作為依附于別的應(yīng)用程序模塊來進行。
接下來是一個大的android閉包
在這個閉包中,我們可以配置項目構(gòu)建的各種屬性,同樣在編輯器或者SDK更新的時候編譯器出現(xiàn)故障時,這里也是故障發(fā)生的集中地。
1.?compileSdkVersion?用于指定項目的編譯版本。
2.?buildToolVersion?用于指定項目構(gòu)建工具的版本。
3.?defaultConfig??閉包
? ? ?在這個閉包中可以對項目中的更多細節(jié)進行配置,其中
? ? ?① applicationID 用于指定項目的包名,在創(chuàng)建項目的時候應(yīng)該已經(jīng)指定過包名了,如果想更改,要在這里更改。
? ? ?② minSdkVersion 用于指定項目最低兼容的Android系統(tǒng)版本
? ? ?③ targetSdkVersion 指定的值表示你在該目標版本上已經(jīng)做了充分的測試,如果測試的版本號較低,較高版本的某些運行時功能權(quán)限不會對App開放
? ? ?④ versionCode & versionName 用于指定項目的版本號和版本名,這兩個文件在生成安裝文件的時候非常重要!
4.?buildTypes 閉包
? ? ?用于指定生成安裝文件的相關(guān)配置,通常只會由兩個子閉包,一個是debug,另一個是release。
debug閉包用于制定生成測試版安裝文件的配置,可以忽略不寫的
? ? ?release閉包用于指定生成正式版安裝文件的配置,下面詳細介紹一下。
? ? ?① minifyEnabled 用于指定是否對項目的代碼進行了混淆(加密)
? ? ?② proguardFiles 用于指定混淆時的規(guī)則文件,這里指定了兩個文件:
? ? ? ? ?第一個 proguard-android.txt 是在Android SDK目錄下的,里面是所有項目通用的混淆規(guī)則
? ? ? ? ?第二個 proguard-rules.pro 是在當前項目根目錄下的,里面可以編寫當前項目的特有的混淆規(guī)則? ?
這樣,整個?android 閉包?中的內(nèi)容就都分析完了。
接下來還剩一個?dependencies 閉包,這個閉包非常強大,它可以指定當前項目所有的依賴關(guān)系
通常 Android Studio 項目一共有三種依賴類型:本地依賴、庫依賴、遠程依賴。
本地依賴可以對本地的 jar包 或者 目錄 添加依賴關(guān)系
庫依賴可以對項目中的庫模塊添加依賴關(guān)系
遠程依賴可以對 jcenter 庫上的開源項目添加依賴關(guān)系。
下面來介紹一下 dependencies 閉包中的配置
1. compile fileTree
? ? ? 是一個本地依賴聲明,它表示將libs目錄下所有 .jar 后綴的文件都添加到項目的構(gòu)建路徑當中。
2. compile
? ? ? 是遠程依賴聲明,后邊標明遠程依賴庫、域名、組名稱、版本號。
安卓日志工具 Log:
1. Log.v() 用于打印那些最為瑣碎的,意義最小的日志信息,對應(yīng)級別verbose。日志級別最低
2. Log.d() 用于打印一些調(diào)試信息,調(diào)試程序常用,對應(yīng)級別debug,比verbose高級一些
3. Log.i() 用于打印一些比較重要的數(shù)據(jù),這些數(shù)據(jù)是開發(fā)者非常想要看到的、可以幫你分析數(shù)據(jù)行為數(shù)據(jù)。對應(yīng)級別info,比debug級別高一些
4. Log.w() 用于打印一些警告信息,提示程序在這個地方可能會出現(xiàn)一些潛在的風險,最好去修復一下這些出現(xiàn)警告的地方,對應(yīng)級別warn,比info高一級
5. Log.e() 用于打印程序中的錯誤信息,比如程序進入到了catch語句中,當有錯誤信息打印出來的時候,一般都代表你的程序出現(xiàn)了嚴重錯誤,對應(yīng)級別error,比warn高一級
如圖所示,可以根據(jù)等級篩選日志。

我們在MainActivity.java中加入此調(diào)試代碼

Log.d(tag,msg); 調(diào)試方法有兩個參數(shù),第一個是標簽,第二個是調(diào)試信息。
此處關(guān)于標簽要強調(diào),logcat中可以很輕松地添加過濾器。
下圖是系統(tǒng)給的默認過濾器

接下來就讓我們嘗試自己創(chuàng)建一個過濾器,點擊上圖中的Edit Filter Configuration,出現(xiàn)下圖創(chuàng)建界面,
給filter起名后,通過更改Lag Tag為“data”(自定義),再將調(diào)試信息第一個參數(shù)改為data即可實現(xiàn)只顯示特定調(diào)試。

?日記級別控制的好處就是能方便快捷地找到你所關(guān)心的那些日志。
第一章完成啦~~~
? ??