開啟旅程-我的第一行Android代碼
第一章
一、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找到它。 下載下傳位址:https://developer.android.google.cn/studio/index.html Ps:需要科學上網才能通路。 相關網盤:https://pan.baidu.com/s/1nuABMDb(永久有效,URL中是數字1不是字母l)
下載下傳完成後,安裝時一直點選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 有如下代碼: <activity android:name=".HelloWorldActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> 表示對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 快速輸入 過濾器 自定義過濾器 級别控制 關鍵字過濾 (支援正規表達式)