1.0 安卓學習之開始啟程
文章目錄
前言
參考書:第一行程式碼
開發環境:AS
安卓歷史
- 安卓公司被Google收購
- 安卓OS基於Linux開發
- 安卓作業系統2010年被Linux團隊從Linux核心主線中除名
- 安卓OS程式碼開源,可自由使用和定製(如Flyme系統)
- Google為安卓建立了完善的生態系統
- 安卓5.0版本用ART執行環境替代了Dalvik虛擬機器,提升執行速度
安卓系統架構
分為四層架構,具體見書
- Linux核心層
安卓系統是基於Linux核心,該層為安卓裝置的各種硬體提供底層驅動 - 系統執行庫層
- 該層通過一些C++/C庫為安卓系統提供了主要的特性支援,如SQLite庫提供資料庫的支援
- 該層還有安卓執行時的庫,包括一些核心庫,ART執行環境
(使得每個APP執行在獨立的程序當中,擁有自己的Dalvik虛擬機器【相較於JVM,優化後更適合移動裝置】例項)
- 應用框架層
提供了建立APP的API - 應用層,例如各類APP
安卓四大元件
- 活動:APP中看得到的東西都放在活動中
- 服務:後臺執行,即使退出也可能在執行
- 廣播接收器:允許應用接收或傳送廣播訊息,如電話,簡訊
- 內容提供器:為APP間共享資料提供可能,如讀取電話簿的聯絡人
除了四大元件,還有SQLite資料庫(輕量級運算速度極快的嵌入式關係型資料庫),LBS(基於位置的服務),多媒體(音樂),系統控制元件(button等)
建立安卓專案
- 公司域名:example.com
- 安卓系統通過包名區分APP,所以要有唯一性
- 最小版本SDK設定為API 15可覆蓋98%的移動裝置
- 命名規範: 活動名HelloWorld 佈局名 hello_world_layout
- tips
- 錘子:編譯專案
- 下拉列表:選擇執行哪個專案
- 三角形:執行專案
Android專案結構
- Gradle目錄下包含了gradle wrapper的配置檔案,使用該方式不需要提前將gradle下載好,而會自動根據本地的快取情況決定是否下載,預設不啟用該方式
- Gitignore為版本控制檔案,將某些檔案排除在版本控制之外
- Build. Gradle:專案全域性的gradle構建指令碼,不需修改(專案型別)
- Gradle.properties是全域性的gradle配置檔案,在這裡配置的屬性會影響專案中所有的gradle編譯指令碼
- local.properties指定安卓SDK的位置,會自動生成,除非改變位置,一般不修改
- Settings. Gradle指定專案中所有引入的模組,自動完成,不需手動修改
APP目錄下內容
1) Libs:專案中使用到第三方包,將jar包放入該目錄下,則這些包自動新增到構建路徑中
2) AndroidManifest.xml:安卓專案的配置檔案 首先用於註冊四大元件,四大元件一定要註冊後才能使用,其次新增APP許可權
3) build.gradle:APP模組的構建指令碼,指定構建時配置
4)res目錄下包括drawable目錄(圖片),layout目錄(佈局),values目錄(字串,樣式,顏色),mipmap(應用圖示)
5)Build. Gradle:app模組的gradle構建指令碼,指定專案構建的相關配置
AndroidManifest.xml
<activity android:name=".MainActivity" android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
指定該活動為主活動,首先啟動的活動
android:icon="@mipmap/ic_launcher"//指定應用圖示
android:label="@string/app_name" //指定應用名稱
活動基類
引用專案的字串
- 引用其他資源,string同理可替換為drawable,mipmap
- setContentView()方法為當前活動引入佈局
build.gradle檔案(兩個)
- AS採用gradle構建專案
- Gradle是專案構建工具
- 該專案構建工具使用一種基於groovy的DSL(領域特定語言)來宣告專案配置,摒棄基於XML(如Ant和Maven)的各種繁瑣配置
外層檔案
-
不需要修改,除非新增全域性的專案構建配置
內層檔案
- 參考build.gradle
- 關於目標版本:該項指明的版本值表明你在該版本進行充分測試,則系統會為你APP引入該版本所對應的最新特性和功能,否則就不引入
- 通過AS生成的APK檔案都是測試版APK檔案
repositories {
jcenter()
maven { url “https://maven.google.com” }
maven { url “https://jitpack.io” }
}
閉包中宣告jcenter()這行配置,jcenter()是程式碼託管倉庫,聲明後可以用該倉庫的開源專案
classpath ‘com.android.tools.build:gradle:2.2.2’
表示gradle來構建的是安卓專案
defaultConfig {
applicationId "com.bestlucky.graph" 指定專案包名
minSdkVersion 15
targetSdkVersion 27
versionCode 1 專案版本號
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {指定生成APK的配置
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ 專案混淆規則
} }
dependencies閉包
指定專案依賴關係,共三種
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//屬於本地依賴(本地的jar包或目錄)
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:27.+'
//屬於遠端依賴,對jcenter庫上的開源專案新增依賴關係
compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
//屬於遠端依賴,對jcenter庫上的開源專案新增依賴關係
testCompile 'junit:junit:4.12'
//宣告測試用例庫
}
安卓日誌工具Log
Log.v():列印最為瑣碎的、意義最小的日誌資訊。(verbose)
Log.d():列印除錯資訊。(debug)
Log.i():列印重要的日誌資訊。(info)
Log.w():列印一些警告資訊。(warn)
Log.e():列印程式中的錯誤資訊。(error)
Log.d(tag,msg);可以看見程序號
Logt+tab的快捷鍵,快速日誌記錄
總結與重點
- 安卓系統架構四部分
- APP目錄下內容(libs,res,AndroidManifest.xml,gitignore,build.gradle)
第二章:
1)活動是可以包含UI的元件,主要用於和使用者互動
Launcher activity:將當前活動設定為主活動
2)Backwards compatibility表示為專案啟用向下相容的模式
3)在XML中引用一個ID,使用@id/id_name的語法
定義一個ID,則為@+id/id_name
4) setContentView方法給當前活動載入一個佈局,引數為佈局檔案的ID(如R.layout.first_layout)
5) 專案中新增的任何資源都在R檔案中生成相應的資源ID
6) 所有活動在AndroidManifest.xml中註冊才能生效
活動的註冊宣告放在標籤內,通過標籤來對活動進行註冊(–:name指明哪個活動)
配置主活動通過標籤
Android:label:指定活動中標題欄的內容和APP名稱
7) 若APP中未宣告任何活動為主活動,則表示該程式作為第三方服務供其他應用在內部呼叫,如快捷支付服務
8) 靜態方法Maketext建立一個toast物件,該方法要求傳入三個引數,第一個引數為上下文,活動本身就是上下文物件
9) findViewById()獲取佈局檔案中元素例項
10) 重寫方法ctrl+O快捷鍵
11) Res下建立menu資料夾,作為選單(右上角小點)資原始檔,該資原始檔中標籤來建立具體的某個選單項
12) getMenuInflater().inflate(R.menu.main,menu);
getMenuInflater()得到MenuInflater物件,呼叫該物件的inflate方法,給當前活動建立選單,return true表示允許建立的選單顯示出來
11)public boolean onOptionsItemSelected(MenuItem item)///P40
重寫該方法,定義選單項的邏輯處理
13) 銷燬活動
Finish()方法銷燬當前活動,同按下back鍵,直接呼叫
14) INTENT是Android程式各元件互動的方式,可以指明元件需要執行的動作以及在各個元件間傳遞資料
15) 顯式intent:(指明具體的activity)
Intent構造器:第一個引數是啟動活動的上下文,第二個是要啟動的活動
隱式intent:
指定抽象的action和category資訊,系統分析幫我們找到活動,這些資訊在標籤中書寫,只有當限定條件都滿足才能響應intent
利用intent的另一個建構函式,把action的字串傳入,每個intent只能指定一個action卻能指定多個category
利用隱式intent啟動其他系統程式,setData()方法接收一個URL物件(字串傳遞到parse方法中解析產生),指定當前intent正在操作的資料
利用intent傳遞資料