第一行代碼,Android Go
一、Android系統架構
1、第一層 Linux內核層
這一層為Android設備的各種硬件提供底層的驅動,如 顯示驅動、音頻驅動、電源管理、Wi-Fi驅動等。
2、第二層 系統運行庫層
這一層通過一些C/C++庫來為Android系統提供瞭主要的特性支持。也就是說利用較底層庫,來實現Android系統。這些庫具有效率更高,更加系統化、專業化,
有商業公司維護等特點。
同樣在這一層還有Android運行時庫(JRE),主要提供一些核心庫,能夠允許開發者使用java語言來編寫Android應用。
Android運行時庫包含Dalvik虛擬機,現在叫ART運行環境。
3、第三層 應用框架層
這一層主要提供瞭構建應用程序時可能需要的各種API,無論是Android自帶的核心應用還是開發者自己開發的application都可以通過調用這些API來完成。
4、第四層 應用層
顧名思義,就是application層。所有安裝在手機上的application都屬於這一層。
二、Android已發佈版本
主要就是2014年,google發佈Android 5.0版本,其中使用ART運行環境替代Dalvik虛擬機,大大提升應用的運行速度。
目前4.0以上的系統已經占據瞭超過98%的Android市場份額,因此以後開發的程序基本隻面向4.0以上的系統。
三、Android應用開發特色
Android系統提供的工具/服務,可供開發者開發出優秀的程序。
1、四大組件
活動(Activity)、服務(Service)、廣播接收器(Broadcast Receiver)和內容提供器(Content Provider).
Activity:所有在應用中能看到的東西,都是放在活動中。
Service:在後臺默默運行,即使用戶退出,Service仍然可以繼續運行。
Broadcast Receiver:它讓應用可以接受來自各處的廣播信息,比如電話,短信等。同樣,應用也可以由此向外發出廣播信息。
Content Provider:為應用程序之間共享數據提供支持。比如要讀取系統電話簿中的聯系人,就需要通過Content Provider來實現。
2、系統控件
Android系統提供非常豐富的系統控件,讓我們可以輕松快速的寫出漂亮的界面。
同樣我們可以開發專屬控件。
3、SQLite DB
Android自帶SQLite DB。它是輕量級、運算速度極快的嵌入式關系型數據庫。
支持標準SQL語法、同時可通過Android封裝好的API進行操作。
4、地理位置定位
移動設備自帶GPS,配合地圖,LBS(Location Based Services)潛力無限。
四、搭建開發環境
1、準備工具
a、Java基礎知識
Java基本語法和特性
b、JDK
包含JRE、工具集合、基礎類庫
Ps、JDK 8以上版本
c、Android SDK
Google提供的Android開發工具包,在開發Android程序時,需通過引入該工具包,來使用Android相關API。
d、Android Studio
在2013年Google退出Android Studio之前,開發Android項目都是用Eclipse,安裝ADT插件之後就可以瞭。
隨著Android Studio的發展,現在普及程度已遠超Eclipse。
2、搭建開發環境
上述軟件並不需要逐個下載,Google為簡化搭建開發環境,將所有工具都集成好瞭,到Android官網下載最新版本Android Studio即可。
Ps:我的情況並不是如此,JDK沒有集成進去,需要自己安裝並幫助Android Studio找到它。
Ps:需要科學上網才能訪問。
下載完成後,安裝時一直點擊Next。其中選擇安裝組件時建議全部勾選。組件包括:Android Studio(默認選擇)、Android SDK、Android Virtual Device
接下來會有選擇Android Studio以及Android SDK安裝地址。根據自己實際情況選擇。註意,如果更改默認地址的話,要記得安裝位置,過會會找不到Android SDK
位置,你要幫助Android Studio找到它。
其它的一路Next下去就好瞭。
五、創建第一個Android項目
1、創建HelloWorld項目
流程略
註意點:
Application name表示應用名稱
Company Domain表示公司域名,個人使用example.com
Package name表示項目包名
Project location表示項目代碼存放位置
Minimun SDK一般指定API 15(Android 4.0以上)
Activity Name:XxxXxxActivity
Layout Name:xxx_xxx_layout
在模擬器中選擇操作系統版本
2、分析Android程序
項目結構模式默認為Android,我們調整為Project。
現階段主要註意gradle與app
gradle是項目自動化構建工具,相關的文件夾暫時不分析。我們重點看app
app:
build:主要包含編譯時自動生成的文件,不重要。
libs:項目中使用到的第三方jar包都要放到libs目錄下,放在該目錄下的jar包都會被自動添加到構建路徑裡去。
androidTest:編寫Android Test測試用例。
java:放置所有Java代碼的地方。
res:項目中所有用到的圖片、佈局、字符串等資源!!資源!!!存放的位置!其下有許多子目錄,圖片放在drwaable目錄下,佈局放在layout目錄下等。為瞭
兼容,有時候需要同一種資源多種格式的文件目錄,比如:mipmap-hdpi、mipmap-mdpi等。
AndroidManifest.xml:整個Android項目的配置文件,程序中定義的四大組件都要在這個文件裡註冊!還可以在這個文件中給應用程序添加權限聲明。
test:Unit Test測試用例
其他文件目錄略。
AndroidManifest.xml 有如下代碼:
表示對HelloWorldActivity這個活動進行註冊,未在AndroidManifest.xml中註冊的活動不能使用。其中 intent-filter裡的兩行代碼表示HelloWorldActivity活動是這個項
目的主活動。
HelloWorldActivity代碼如下:
public class HelloWorldActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInsatanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
}
}
HelloWorldActivity是繼承自AppCompatActivity的,這是一種向下兼容的Activity,可以將Activity在各系統版本中增加的特性和功能最低兼容到Android 2.1系統。
Activity是Android系統提供的一個活動基類,所有的活動都直接或間接繼承自它。
onCreate()方法時一個活動被創建時必定要執行的方法。
Android程序設計講究 邏輯 和 視圖 分離。在佈局文件中編寫界面,然後在活動中引入進來。
3、項目中的資源及build.gradle文件
基本語法:
在代碼中通過 R.string.app_name可以獲得該字符串的引用。
在XML中通過 @string/app_name可以獲得該字符串的引用。
string可以替換成drawable等等。
XML中定義一個時這樣做:@+string/app_name
build.gradle文件解析
不同於Eclipse,Android Studio采用Gradle(項目構建工具)來構建項目。它使用基於Groovy的的“領域特定語言(DSL)(求專不求全)”來聲明項目
設置,拋棄瞭傳統的基於XML的各種繁瑣配置。
respositories {
jcenter()
}
jcenter:代碼托管庫
聲明瞭以上配置後,可以在項目中引入jcenter上的開源項目
dependencies中使用classpath聲明瞭一個Gradle插件 com.android.tools.build:gradle:2.2.0
apply plugin: ”com.android.application"
引入一個插件
com.android.application(直接運行)或者com.android.library(庫模塊)
android閉包
包含配置項目構建的各種屬性
compileSdkVersion指定項目編譯版本
buildToolsVersion指定項目構建工具的版本
defaultConfig閉包
applicationId指定項目包名,以後更改包名都在這裡改
minSdkVersion指定項目最低兼容Android系統版本
targetSdkVersion指定在該版本上已充分測試,系統會為你的應用程序氣筒一些最新的功能和特性。(到targetSdkVersion為止,超過
的新特性就沒瞭。)
VersionCode指定項目版本號
VersionName指定項目名
defaultTypes閉包
用於指定生成 安裝 文件的相關配置
通常包含兩個閉包:debug和release
debug用於指定生成測試版安裝文件的配置
release用於指定生成正式版安裝文件的配置
debug閉包可以省略
release閉包:
minifuEnabled用於指定是否對項目代碼進行混淆,true代表混淆,false代表不混淆
proguardFiles用於指定混淆是使用的規則文件,這裡指定兩個文件,proguard-rules.txt和proguard-rules.pro
.txt是在Android SDK目錄下,裡面是所有項目的混淆規則
.pro是在當前項目的根目錄下,裡面可以編寫當前項目特有的混淆規則
Android Studio直接運行項目生成的都是測試版啊安裝文件
dependencies閉包:
用於指定當前項目所有的依賴關系
Android Studio一共有三種依賴關系:本地依賴、庫依賴、遠程依賴
本地依賴可以對本地的Jar包或目錄添加依賴關系
compile fileTree(dir: 'libs',include:['*.jar'] 它表示將libs目錄下所有.jar文件添加到項目的構建路徑中去
庫依賴可以對項目中的庫模塊添加依賴關系
compile project(':helper') 它表示將一個helper庫模塊添加到項目的構建路徑中去
Ps:此處假設有一個叫helper的庫模塊
庫依賴添加可以百度地址https://jingyan.baidu.com/article/4e5b3e193b96e991901e24f2.html
遠程依賴可以對jcenter庫上的開源項目添加依賴關系
compile ‘com.android.support:appcompat-v7:24.2.1
com.android.support是域名部分
appcompat-v7是組名部分
24.2.1是版本號
六、日志工具
1、Log工具類
Log.v() verbose
Log.d() debug
Log.i() info
Log.w() warn
Log.e() error
Log.x()(x代指具體方法)方法中傳入兩個參數:第一個Tag,一般傳入當前類名,主要用於對打印信息進行過濾;第二個參數是msg,即要打印的信息
2、Log的優勢
System.out.println()雖然方便 syso + Tab就出來 但是 :日志打印不可控、打印時間不確定、不能添加過濾器、日志沒有級別區分
Log配合Logcat可以:
logx + Tab 快速輸入
過濾器
自定義過濾器
級別控制
關鍵字過濾 (支持正則表達式)