1.1.Android簡介
1.1.1.Android系統架構
自下而上:Linux內核層(爲硬件提供底層驅動。eg:顯示驅動、音頻驅動等)、系統運行時層(C/C++庫和android運行時庫,前者有Sqlite和OpenGL等,後者有ART虛擬機和核心庫等)、應用框架層(系統API,譬如ActivityManager、WindowManager、ContentProvider)、應用層(應用程序,譬如聯繫人、短信、自己開發的app等)。
2020.3月逐漸推出Android 11版本。5.0使用ART虛擬機代替DVM虛擬機,提出Material Design來優化界面設計,5.0以上佔比超過85%。
1.1.2.Android應用開發特色
(1)四大組件:Activity、Service、BroadcastReceiver、ContentProvider。Activity是應用程序顯示的界面;Service後臺默默運行,即使用戶退出app;BroadcastReceiver使得app接受各處廣播消息,也可以向外發出消息;ContentProvider可以使得app之間的數據共享。譬如:讀取聯繫人;
(2)豐富系統控件:Android界面系統控件和自定義控件。
(3)SQLite數據庫:輕量級、運算速度極快的嵌入式關係型數據庫。支持SQL語法和系統API。
(4)強大多媒體:音樂、視頻、錄音、拍照等。
1.2.搭建開發環境
JDK(java運行環境、工具集合、基礎類庫)+SDK(android開發工具包)+Android studio
1.3.創建Android項目
1.3.1.文件結構解析
1.build:編譯自動生成的文件
2.gradle:gradle wrapper配置文件
3..gitignore:哪些文件排除在版本控制之外
4.Build.gradle:項目全局gradle腳本
5.Grale.properties:全局gradle配置文件,配置相關屬性
6.gradlew和gradlew.bat:命令行界面執行gradle命令
7.Local.properties:本機SDK路徑
8.Setting.gradle:制定項目所有引入的模塊,目前只有app模塊
9.app目錄:項目代碼、資源
9.1.build:系統自動生成文件
9.2.libs:第三方jar包
9.3.androiTest:Android test自動化測試用例
9.4.Java:所有java代碼放置地方,MainActivity.java
9.5.res:圖片、佈局、字符串等
9.6.AndroidManifest.xml:項目配置文件,譬如四大組件的定義
9.7.Test:unit test自動化測試用例
9.8.Build.gradle:app模塊的gradle構建樣本,項目構建相關配置
9.9.Progurad-reles.pro:執行項目混淆規則
10.res目錄:圖片、佈局、字符串等
10.1.drawable:圖片
10.2.Mipmap:圖標(不同後綴更好兼容設備)
10.3.Vaules:字符串、樣式、顏色等。以下爲values的內容
通過R.string.app_name或者@string/app_name獲得該字符串的引用。
1.3.2.詳解build.gradle文件
最外層目錄的build.gradle
//Gradle是基於Groovy領域特定語言(DSL)來進行項目設置的。
buildscript {
ext.kotlin_version = '1.3.71'
//閉包聲明瞭兩個代碼倉庫
repositories {
google() //google擴展依賴庫
jcenter()//第三方開源庫
}
//使用classpath聲明瞭兩個插件
dependencies {
//Gradle插件的目的是構建android項目,與AS版本一致
classpath 'com.android.tools.build:gradle:3.6.3'
//Kotlin插件
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
app目錄的build.gradle
apply plugin: 'com.android.application'//應用程序模塊,也可以設置爲庫模塊
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'//kotlin模塊和擴展功能
//項目構建的各個屬性
android {
compileSdkVersion 28 //指定項目編譯版本
buildToolsVersion "29.0.3" //Android10.0SDK編譯
//項目更多細節配置
defaultConfig {
applicationId "com.example.myapplication"//應用唯一標識符
minSdkVersion 21///項目最低兼容版本,最低兼容5.0
targetSdkVersion 28//目標版本,在該版本充分測試,啓用新特性,9.0
versionCode 1 //項目版本號
versionName "1.0"//項目版本名
//啓用Junit測試用例
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//生成安裝文件的相關配置
buildTypes {
//一般一個release包(正式版安裝文件配置),一個debug包(測試版安裝文件配置)。
release {
minifyEnabled false//是否對項目混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//選擇混淆規則
}
}
}
//指定項目所有依賴關係。本地依賴(jar包或者目錄)、庫依賴(項目中的庫模塊)和遠程依賴(jcenter倉庫開源項目)。
dependencies {
//implementation fileTree本地依賴,libs目錄底下的所有jar包
implementation fileTree(dir: 'libs', include: ['*.jar'])
//implementation遠程依賴聲明,標準遠程庫格式,androidx.appcompat:爲域名部分,appcompat爲工程名,1.0.2是版本號
//Gradle構建時會檢查本地是否有庫緩存,沒有會自動聯網下載並添加到項目構建路徑
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
//implementation project是庫依賴,譬如一個庫名叫help,可以聲明爲(implementation project('help'))
//聲明測試用例庫的
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
1.4.日誌工具
Android中日誌工具類是log。五個級別:log.v(verbose,瑣碎的、意義最小的信息)、log.d(debug,調試信息)、log.i(info,重要信息,譬如分析用戶數據行爲信息)、log.w(warn,警告信息,潛在風險需要修復)、log.e(error,錯誤信息)。譬如:Log.d("MainActivity1","onCreate Create")。一個tag是傳入當前類名,一個msg是打印具體內容。打印內容包括時間、進程號、類名和內容等。Logv可以看所有log信息。Logd可以看debug及以上級別的信息,依次類推。
System.out.println相較於log,日誌開關不可控、沒有級別劃分、不能添加日誌標籤。有四個過濾器。Show only selected applications顯示當前選中程序的日誌;firebase是開發者工具和基礎架構平臺,不用管。No filter沒有過濾器,所有日誌都會顯示;edit fileter config自定義過濾器。