標籤:
說明:本筆記節奏,嚴格按照圖書章節,望見諒,所以代碼會上傳github,特別簡單,我會省略!android的由來,android的曆史,以及它的野史,請百度,Google
對於這種知識,個人認為知道就好...............................................
Android 系統架構
Android 可以大致分為四層架構,五塊地區。
1. Linux核心層
Android系統是基礎Linux2.6核心的,這一層為android裝置的各種硬體提供了底層的驅動,如顯示 驅動,音頻驅動,照相機驅動,藍牙堆疊,wi-fi驅動,電源管理器等。
2. 系統運行庫層
這一層通過一些c/c++庫來為android系統提供主要的特性支援。如SQLIte庫提供了資料庫的支援,OpengGL|ES庫提供了3D繪圖的支援,Webkit庫提供了瀏覽器核心的支援等。
同樣在這一層還有android執行階段程式庫,主要提供一些核心庫,能夠容許開發人員使用java語言來編寫應用。另外android運行時中還包含Dalvik虛擬機器,它使得每個android應用都能運行在獨立的進程中,並且擁有自己的Dalvik虛擬機器執行個體。相對於java虛擬機器,Dalvik是專門為行動裝置定製的,它針對手機memory,cpu效能做出了最佳化處理。
3. 應用程式框架層
這一層主演是提供了構建應用程式時可能用到的各種API,android內建的一些核心應用就是使用這些API完成的,開發人員也可以通過使用這些API來構建自己的應用程式。
4. 應用程式層
所有安裝在手機上的應用程式都是屬於這一層,如系統內建的連絡人,簡訊等程式,或者從第三方市場下載的app。
Android發行的版本
由於android版本發展太迅速!這裡不做具體說明,從2008年9月,Google正式發布Android系統1.0系統, 到寫筆記這一天是Android 6.0
Android應用開發特色
1. 四大組件
Android系統的四大組件分別是活動(Activity),服務(Service),廣播接收器(Broadcast Receiver)和內容提供者(ContentProvider),其中活動是所以android應用程式的門面,凡是在應用中你看到的東西,都是放在活動中的。而服務就比較低調,你無法看到它,但它一直在後台默默地運行,即使使用者退出了應用,服務仍然是可以繼續啟動並執行,廣播接收器可以容許你的應用接收各處的廣播訊息,比如電話,簡訊等,當然你的應用同樣也可以向外發出廣播訊息。內容提供器則為應用程式之間共用提供了可能,比如你想要讀取系統電話本的連絡人,就需要通過內容提供器來實現。
2. 豐富的系統控制項
Android系統為開發人員提供了豐富的系統控制項,使得我們可以很輕鬆地編寫好看的介面,當然也也可以自訂控制項。
3. SQLite資料庫
Andriod系統內建了這種輕量級,運算速度快的嵌入式關係型資料庫。它支援標準的SQL文法,還可以通過Android封裝好的API進行操作,讓儲存和讀取資料變得方便。
4. 地理位置定位
行動裝置和PC相比起來,地理位置定位可以算是很大的一個亮點,現在的Android手機都內建了GPS,走到哪裡都可以定位自己的位置,再結合功能強大的地圖功能,LBS這一領域潛力無限。
5. 強大的多媒體
Android系統還提供了豐富的多媒體服務,如音樂,視頻,錄音,拍照等等,這一切都可以在程式中通過代碼進行控制,讓你的應用變得豐富多彩。
6. 感應器
Android手機都會有內建多種感應器,如加速感測求,方向感應器等等,這也算是行動裝置的一大亮點。通過靈活的使用這些感應器,可以做出很多在pc上根本無法實現的應用。
手把手帶你搭建開發環境
本書採用android studio 2.0進行開發,大家可以參看 Android Studio入門到精通 http://blog.csdn.net/yanbober/article/details/45306483
第一個Andriod程式
書上的例子,Hello World! 如有需要請下載:https://github.com/RelocationTime/First_Row_Code.git
1.3.3 分析你的項目
由於本人使用的是android studio 2.0作為開發工具,所以不對eclipse + adt 做 介紹,但是我會介紹一下一個主要的目錄及檔案。1. src 這個目錄是放置我們所有的Java代碼的地方,它這這裡的含義和普通的java項目下的src目錄是完全一樣的2. libs 這裡放置的是所有用到的libs,以後的各種開源庫都放置在其中。3. res 這裡面放置,我們項目裡,所有要用到的資源,包括圖片,各種布局,動畫,選取器等等4. AndroidManifest.xm 這個目錄,個人覺得是最重要的,是整個項目的設定檔,四大組件都需要註冊,但在AS中會自動註冊,不需要我們手動註冊,還可以給應用程式添加許可權聲明,指定最低 相容版本和目標版本,這個目錄需要大家用心多多體驗!以上四個是AS 和 Eclipse都有的,其他不做介紹,要是深入學習AS, 請百度http://blog.csdn.net/yanbober/article/details/45306483開始簡單分析代碼:
package com.example.rescue.firstcode; //1import android.support.v7.app.AppCompatActivity; //2import android.os.Bundle; ///2.1public class MainActivity extends AppCompatActivity { //3 @Override protected void onCreate(Bundle savedInstanceState) { //4 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //5 }}
詳細講述,以後將不做說明:
// 1 : 為我們的包定義
// 2:是我們代碼中用到的類,進行匯入
// 3 : 是我們的主類,java文法不會,請繞行,extends 繼承的是Activitiy的子類,書上是繼承Activity,這裡用到的是AS環境下,本質上是一樣的,都是Activity的子類
// 4 : 是我們必須重寫的方法
// 5 : 是我們設定頁面所顯示的布局, 可以理解為顯示的是什麼介面放在我們的手機頁面中,R.layout.activity_main, 是什嗎?下面我們介紹
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.rescue.firstcode.MainActivity"> // 1 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:text="Hello World!" /> // 2</RelativeLayout>
進行個人認識,進行講解:
xml語言不會,請自行百度,大家只要知道,開始標籤,結束標籤,屬性它的本質認識,就可 以,比如RelativeLayout這個標籤,必須有自己的開始和結束標籤 ,以及它的屬性<–
android:layout_width=”match_parent”
android:layout_height=”match_parent” ><–/>
對書上的認識點,清楚之後,請看我的總結
1. 每個組件必須指定它的寬高
2. 為什麼有的屬性定義為”@+id/tv”,有點卻是”@id/tv”
認識: @+:是自己的屬性標籤,請記住是自己的,針對自己做的標示,而@/是引用的標示,意思就是,它不是自己的,是引用別人的,注意是別人的!這下大家應該知道@+和@/的原理吧,這是我自學過程中,不懂的地方
3. id 請不要用數字,特殊符號,大寫字母,我說的是最好
4. xmlns:android=”http://schemas.android.com/apk/res/android”是什麼意思?它是xml的網域名稱空間,大家深入學習一下xml知識,就懂了,我只是提示一下
前行必備,掌握日誌工具的作用
日誌很重要,很重要,很重要
通過上一節的學習,大家應該成功建立自己的第一個程式了,對目錄結構,運行流程也有一定的認識了, 也許會有一點不懂,但沒關係,慢慢來,隨著代碼的不斷練習,你會熟練的,加油!
日誌的介紹
Log.v()
v:verbose :冗長地,囉唆地,累贅地,是它的英文意思,也是它的等級,是最低的,列印的東西,就是冗長地,囉唆地,累贅地
Log.d()
d: debug :調試資訊; 除蟲; 診斷; 是它的英文意思,比verbose高一級,用於列印一些調試資訊,很有用。
Log.i()
i : info;資訊的英文意思,列印的比較重要,可以協助你分析使用者行為的那種,比debug高一級。
Log.w()
w : warn: 警告的英文意思,這個是提示程式在這個地方會有潛在的風險,最好修複一下警告的地方,比info高一級.
Log.e()
e: error:錯誤的意思,這個是必須處理的任務,是出現了嚴重的問題,導致程式無法運行
注意事項:
1. 如何eclipse logcat下方列印不出來,肯定是裝置失去焦點,或者模擬器掉線了
解決: 進入DDMS視圖,在Devices視窗中點擊當前裝置,就可以
2. [2016-01-06 14:11:18 - Note] The connection to adb is down, and a severe error has occured.
[2016-01-06 14:11:18 - Note] You must restart adb and Eclipse.
[2016-01-06 14:11:18 - Note] Please ensure that adb is correctly located at ‘D:\Users \LYP\AppData\Local\Android\sdk\platform-tools\adb.exe’ and can be executed.
這個問題很常見,本質上是adb裝置的連接埠被佔用,解決方案,可以看我的另一個部落格:blog.csdn.net/android_lyp/article/details/50469031
3.為什麼使用Log, 而不使用System.out
其實我一開始是,特別喜歡使用syso,因為我java基礎很好,善於調試,但是慢慢的,我喜歡上了LogCat,理由很簡單,LogCat強大,會比syso好太多,大家慢慢使用,就會有深刻的認識
第一章結束
第一章 開始啟程,你的第一行Android代碼