====================================
====== 第一章:開始啟程 ======
====================================
Android四層架構:Linux內核層(硬件)、系統運行庫層(底層類庫)、應用框架層(框架)、應用層
繼續(xù)書籍:學習一下JavaSE的基礎。然后就可以直接看“第一行代碼第二版”
四大組件:
活動(activity)、應用程序的門面,看得見摸得著的東西
服務(service)、后臺默默運行的就是服務,即使用戶退出了應用,仍可以繼續(xù)運行
廣播接收器(broadcast receiver)、允許接受各處的廣播消息,電話、短信等
內容提供器(content provider)、為應用程序之間共享數據(比如獲取電話簿中聯系人)
搭建開發(fā)環(huán)境:按照網上的教程即可。書籍不一定是最新的。針對Mac。先安裝JDK即可,我下載的是1.8的。然后安裝Android Studio(Android的開發(fā)工具,然后按照步驟,無需做額外的設置就可以運行了)
目錄結構解釋:
看一下項目的結構,我們的主要活動都在src文件夾里面。
.gradle、.idea目錄:都是放置Android studio這個開發(fā)工具自動生成的一些文件,無需關心,不要手動編輯。
App:項目中的代碼資源都在這個目錄下,等會會詳細解釋。我們最主要關心的就是這個目錄。
gradle:這個目錄下包含了gradle wrapper的配置文件。Android studio默認沒有啟用gradle wrapper的方式。不明白,后面以后可能會解釋。
.gitignore:很明顯這是用于版本管理控制的忽略文件的。
ActivityTest.iml:iml文件是所有IntelliJ JDEA項目都會自動生成的一個文件(Android Studio就是基于IntelliJ JDEA開發(fā)的),這個用于標識這是一個IntelliJ IDEA項目)。
Build.gradle:項目全局的gradle構建腳本,通常這個文件中的內容是不需要修改的。
Gradle.properties:全局的gradle配置文件,在這個文件配置的屬性會影響到項目中所有的gradle編譯腳本
gradlew和gradlew.bat:用來在命令行界面中執(zhí)行gradle命令,其中gradlew是在Linux或Mac系統中使用的,gradlew.bat是在Windows系統中使用。
Local.properties:用于指定Android SDK路徑,通常內容都是自動生成的,不需要修改,除非你本機中的AndroidSDK位置發(fā)生了改變。那么改為新的位置即可。
Settings.gradle:用于指定項目中所有引入的模塊。由于項目中只有一個app模塊。因此該文件只引入了app這一個模塊,通常模塊也是自動完成的不需要我們手動去修改。
詳細介紹app目錄:
Build目錄:包含一些在編譯時自動生成的文件,我們無需關心。
Libs目錄:如果項目用到了第三方jar包,就需要把這些jar包放到libs目錄下,放在這個目錄下的jar包會被自動添加到構建路徑里。
Src目錄,最主要的目錄:
androidTest:用于編寫Android測試用例的。
main里面:
Androidmannifest.xml:整個Android項目的配置文件,你在程序中定義的所有四大組件都需要在這個文件里注冊,另外還可以給應用程序添加權限聲明等等。
Test:編寫單元測試用例的。
proguard_rules.pro:用于指定項目代碼的混淆規(guī)則。
Java:放置我們素有java代碼的地方,比如關聯我們activity的java代碼就在這里。
Res:資源目錄:
drawable用來存放圖片的。
Mipmap開頭的用來存放圖標的。(多個文件夾主要用于適配多種機型不同分辨率)
Values開頭的用來存放字符串、樣式、顏色等配置的。
Layout用來存放布局文件的。
看一下Manifest.xml文件。沒有在Manifest.xml中注冊的活動是不能使用的。
Activity是Android系統提供的一個活動的基類,我們項目中所有的活動都必須繼承它或它的子類才能擁有活動的特性)(AppCoompatctivity是Activity的子類)
onCreate()方法,是一個活動被創(chuàng)建時必定會執(zhí)行的方法。
setContentView()方法,就是這個方法給當前的活動引入了一個hello_world_layout布局,(在res/layout目錄下可以找到hello_world_layout.xml這個文件)
打開這個xml文件并切換到Text視圖。(底部可以看到切換“design”和“text”兩種視圖)
再看一下src/res目錄中:
drawable開頭的文件夾是用來存放圖片的。(有多個文件夾也是為了適配各種設備,我們也可以自己創(chuàng)建drawable-hdpi、drawable-xhdpi等等文件夾。)
所有以mipmap開頭的文件夾都是用來存放應用圖標的。(之所有有這么多個文件開頭是為了更好的適配各種機型)
所有以values開頭的文件夾都是用來存放字符串、樣式、顏色等配置的,
layout文件夾是用來存放布局文件的。
當程序運行時,會自動根據當前運行設備分辨率的高低選擇加載哪個文件夾下的圖片。(如果美工只提供給我們一份圖片,這時我們把圖片放在drawable-xxhdpi中即可)
1、修改一下values文件夾下的strings.xml文件
<resources>
<string name=“app_name”>HelloWorld<string/>
</resources>
A、在代碼中可以通過R.string.app_name可以獲得該字符串的引用
B、在xml中通過@string/app_name可以獲得該字符串的引用
其實基本語法就是A、B這兩種方式。其中string部分是可以替換的,如果是引用圖片資源,可以替換成drawable。如果是引用應用圖標,可以替換成mipmap。如果是引用布局文件,可以替換成
這時候解釋一下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項目的應用圖標是通過android:icon屬性類指定的,應用名稱由android:label屬性指定的,
詳解build.gradel文件:
不同于Eclipse,Android Studio是采用Gradle來構建項目的。gradle是一個非常先進的項目構建工具。它使用了一種基于groovy的領域特定語言(DSL)來聲明項目設置,摒棄了傳統基于xml(如ant和maven)的各種繁瑣配置。
HelloWorld項目中有兩個build.gradle文件,一個是最外層目錄下,一個是在app目錄下。這兩個文件對構建android studio項目起到至關重要的作用。
1、最外層的build.gradle文件:
buildscript {
respsitories {
// 代碼托管倉庫,聲明之后,我們就可以在項目中輕松引用jcenter上的開源項目了
jcenter()
}
dependencies {
// 聲明一個gradle插件。因為gradle并不是專門為android而生的,要想使用它構建android項目,就需要聲明以下的插件
classpath ‘com.android.tools.build:gradle:2.2.0’
}
}
allprojects {
repositories {
jcenter()
}
}
這些代碼都是自動生成的。
2、app目錄下的build.gradle文件:
// 定義了一個插件(一般有兩種值可選,com.android.library表示這是一個庫模塊,application表示是一個應用模塊,應用模塊可以直接運行,庫模塊只能作為代碼庫依附于別的應用程序模塊來運行。
apply plugin: ‘com.android.application’
// android閉包
android {
// 編譯版本
compileSdkVersion 24
// 構建工具的版本,如果有更新的版本,android studio會有提示
buildToolsVersion “24.0.2”
defaultConfig {
// 項目的包名,前面其實我們已經指定過包名,如果想在后面對其修改,就是在這里修改。
appliationId “com.example.helloworld”
// 最低sdk的版本,15表示最低兼容到android4.0
minSdkVersion 15
// 表示你在該版本上已經做過了充分的測試,系統將會為你的應用程序啟用一些最新的功能和特性(如果是23以上,系統會為你的程序啟用運行時權限功能)
tragetSdkVersion 24
// 版本號
versionCode 1
// 版本名
versionName “1.0”
}
// 用于指定安裝文件的配置
buildTypes {
release {
// 用于是否對項目代碼進行混淆。true表示混淆,false表示不混淆
minifyEnabled false
// 混淆時使用的規(guī)則文件,這里指定了兩個文件
proguardFiles getDefaultProguardFile(‘proguard-android.txt’),’proguard.rules.pro’
}
// debug表示測試版,可以忽略不寫
}
}
// 可以指定當前項目所有的依賴關系,通常項目一共有三種依賴方式,1、本地依賴。2、庫依賴。3、遠程依賴。
// 本地依賴可以對本地的jar包或目錄添加依賴關系
// 庫依賴可以對項目中的庫模塊添加依賴關系
// 遠程依賴可以對jcenter庫上的開源項目添加依賴關系
dependencies {
// 這是本地依賴,它將libs目錄下所有.jar后綴的文件都添加到項目的構建路徑中。
compile fileTree(dir:’libs’, include: [‘*.jar’])
// 遠程依賴聲明,加上這個聲明,gradle在構建項目時會首先檢查一下本地是否已經有這個庫的緩存,如果沒有的話就會去自動聯網下載,然后再添加到項目的構建路徑中
compile ‘com.android.support:appcompat-v7:24.2.1’
// 用于單元測試用例庫的
testCompile ‘junit:junit:4.12’
}
日志工具類:Log(android.util.Log),以下五個方法供我們打印日志。
Log.v() 用于打印最瑣碎的意義最小的日志信息。對應級別verbose,是android日志里面級別最低的一種。
Log.d() 用于打印一些調試信息,對調試和分析問題有幫助。對應級別debug,比verbose高一級
Log.i() 用于打印一些比較重要的數據,可以幫你分析用戶行為數據。對應界別info,比debug高一級
Log.w() 用于打印一些警告信息,提示程序這個地方可能存在潛在風險。對應級別warn,比info高一級
Log.e() 用于打印一些錯誤信息,比如程序進入了catch語句中,代表你的程序出現嚴重問題了,必須盡快修復。對應級別error,比warn高一級。
貌似還有一個assert,
不建議用System.out.println()來輸出日志,android studio已經不支持syso的快捷輸入了。輸入logd,再點tab鍵,就可以自動補全
如在onCreate()方法的外面輸入logt,然后按下tab鍵,就可以以當前的類名為值自動生成一個Tag常量。
如下所示:
private static final String TAG = "HelloWorldActivity";
Logcat可以輕松添加過濾器,運行項目之后,從Android studio中的底部可以很容易看到logcat。