Android學(xué)習(xí)項目之簡易版微信為例(一)
這是“Android學(xué)習(xí)之路”系列文章的開篇,可能會讓大家有些失望——這篇文章中我們不介紹簡易版微信的實現(xiàn)(不過不是標(biāo)題黨哦,我會在后續(xù)文章中一步步實現(xiàn)這個應(yīng)用程序的)。這里主要是和廣大朋友們聊聊一個非Java程序員對Android操作系統(tǒng)的理解以及一個Android工程的目錄結(jié)構(gòu),為進(jìn)一步學(xué)習(xí)做準(zhǔn)備。
1 緣起
智能手機(jī)的出現(xiàn)與普及為人們的生活、工作帶來了極大的便利,我們可以用手機(jī)隨時隨地、隨心所欲地購物、玩游戲、聊天、聽音樂等等。一個個精心設(shè)計、體驗良好的移動客戶端應(yīng)用,讓用戶們愛不釋手,人們現(xiàn)在已經(jīng)越來越離不開智能手機(jī)了。這或許是廣大程序員學(xué)習(xí)移動應(yīng)用開發(fā)的一個重要原因吧,這也是我學(xué)習(xí)Android開發(fā)的原因之一。
下面來說說為什么想寫一個關(guān)于Android開發(fā)的系列博文。目前是做PC端軟件的開發(fā),主要做的是使用C++編寫圖像處理與顯示的邏輯,軟件的前端界面采用的是WPF。去年下半年,公司鼓勵前端(WPF)轉(zhuǎn)后端(C++)和后端轉(zhuǎn)前端,作為一個有上進(jìn)心的程序員,當(dāng)然要響應(yīng)領(lǐng)導(dǎo)的號召了^_^。之后就開始WPF學(xué)習(xí)之旅了,學(xué)了一段時間之后,算是有些入門,至少能用WPF做一些簡單的功能了。也是在那個時候開始博主開始接觸Android,畢竟還是希望在工作之余能夠提升一下自己,于是就看了一些博文和相關(guān)的書籍。斷斷續(xù)續(xù)學(xué)了半年,雖然感覺在某些方面與WPF很像,但對Android的理解還是不深刻。于是博主開始思考,怎樣才能更好地理解掌握Android呢?對于一個計算機(jī)(或工科)專業(yè)出身的人來說,所能想到的最好的學(xué)習(xí)方法便是實踐——選擇一個不是太復(fù)雜的項目,把它一步步做出來,一點(diǎn)點(diǎn)完善它?;诖耍瑳Q定寫一個系列博客,記錄自己的學(xué)習(xí)之路和項目開發(fā)之路。微信應(yīng)用是我們?nèi)粘J褂米铑l繁的APK了,簡易版的微信實現(xiàn)起來應(yīng)該不會太復(fù)雜,所以就準(zhǔn)備開發(fā)一個簡易版的微信作為自己Android項目的實踐之旅。
2 一個程序員眼中的Android
關(guān)于Android的介紹、發(fā)展歷程、目前使用情況以及未來趨勢,在這里就不做贅述了,這些對廣大程序員朋友來說肯定都有所了解。本節(jié)主要是講講自己以從程序員的角度對Android的一點(diǎn)淺薄的理解,當(dāng)然,一千個讀者心里有一千個哈姆雷特,每個人對Android的理解都會不一樣,這里介紹的僅是本人的個人見解。
Android是一個基于Linux內(nèi)核改造而來的、面向手機(jī)端(當(dāng)然現(xiàn)在Android已經(jīng)是發(fā)展到各個硬件平臺上了,包括Android TV、Android Wear等等)的操作系統(tǒng)。Android系統(tǒng)本質(zhì)上和普通的Linux桌面PC發(fā)行版沒什么區(qū)別,Android可以視為手機(jī)端Linux的發(fā)行版,只不過Google做了完善的封裝,以至于我們幾乎感覺不到Linux的存在。這里所講的封裝有兩層含義:
(1)對普通用戶而言,Android變得更親民,更大眾化,不像Linux那么高冷,需要良好的計算機(jī)底子的童鞋才能較好地使用;
(2)對應(yīng)用開發(fā)者而言,不需要接觸底層的C代碼和系統(tǒng)庫函數(shù)了,我們面對的是一些用Java寫的類庫,其中包括著名的Android四大組件(后續(xù)我們詳細(xì)闡述)、一套較完備的UI控件和一些輔助的工具類庫。
Android操作系統(tǒng)是分層實現(xiàn)的,其層次結(jié)構(gòu)圖如下圖所示:
這幅框架結(jié)構(gòu)圖,對于一個久經(jīng)沙場的老兵來說,理解起來也許并不是太困難;但對于一個初入職場不久的小白來說,可能一下子還看的不是很明白。不過沒關(guān)系,對于像我們這樣的小菜來說,完全沒必要把所有層次、所有組件都弄清楚:比如Linux Kernel(內(nèi)核)你有必要一開始就去學(xué)習(xí)嗎?—— 一開始去就去看這些不就是在自討苦吃么^_^!?在內(nèi)核層之上那一層,什么SQLite、OpenGL|ES、SGL、libc、WebKit等等都是一些著名的開源項目,大多是用C語言寫的,對開發(fā)上層應(yīng)用的我們來說,也壓根沒必要一開始就去學(xué)習(xí)。最后看最上面一層——Application層,Home、Contacts、Phone……這些其實是系統(tǒng)內(nèi)置的一些應(yīng)用,和我們開發(fā)的應(yīng)用沒什么區(qū)別,所以也沒必要花太多時間去了解。對開發(fā)應(yīng)用的我們而言,學(xué)好下面兩層就好了:
第一層:Application Framework層,也就是應(yīng)用框架層。我們編寫應(yīng)用時所用的大部分組件都來自這里,最主要的包括:
View System,即視圖系統(tǒng),定義了一套UI庫,包括布局類和控件類,用它們就可以定義應(yīng)用程序的界面了,這個庫很龐大,也是我們學(xué)習(xí)Android開發(fā)的一個難點(diǎn);
Activity Manager,即活動管理器,活動(Activity)是Android四大組件之一,它管理著和用戶界面顯示有關(guān)的邏輯和生命周期回調(diào);
Content Provider,即內(nèi)容提供者,同樣是Android的四大組件之一。數(shù)據(jù)是應(yīng)用程序的核心,使用內(nèi)容提供者就可以實現(xiàn)跨進(jìn)程/應(yīng)用的數(shù)據(jù)共享了。
Notification Manager,通知管理器,用于手機(jī)頂部狀態(tài)欄顯示系統(tǒng)通知,它也是Android的四大組件之一。
Resource Manager,資源管理器,顧名思義,即管理應(yīng)用程序資源的,如圖標(biāo)、背景圖片、常量字符串。
圖中還有一些其他組件,如Package Manager(包管理器)、Location Manager(位置管理器)等,這里就不具體介紹了,初學(xué)時接觸的不多。
第二層:Android Runtime層,也就是安卓運(yùn)行時層,其實就是一個Java虛擬機(jī)——Dalvik虛擬機(jī)和一個核心類庫。這部分和普通的Java虛擬機(jī)在使用方面都是一樣的,所以這一層雖然在開發(fā)中會接觸到,但只要學(xué)過Java的,應(yīng)該都懂。
所以,到此為止,我們應(yīng)該清楚了學(xué)習(xí)Android開發(fā)要學(xué)一些什么了,其實就是在學(xué)習(xí)Application Framework層,其他的看看就好,如果想進(jìn)一步深入的話,等到把基礎(chǔ)的學(xué)扎實了再說吧!
3 Android項目的目錄結(jié)構(gòu)
Android開發(fā)使用的IDE,主要有Eclipse + Android SDK(Software Develement Kit,軟件開發(fā)工具包)、Visual Studio + Xamarin(用C#語言開發(fā)Android程序)和Android Studio三種可供選擇,博主采用的是Android Studio 2.0,下載解壓無需安裝,直接就可以使用。關(guān)于Android Studio的JDK的配置,請度娘參考相關(guān)博客,在此就不做贅述了。
有了IDE,我們就可以很方便地創(chuàng)建一個Android工程了(關(guān)于工程創(chuàng)建,直接點(diǎn)擊下一步下一步即可,在此不再贅述)。下面就讓我們在寫代碼前來認(rèn)識一下一個新建的Android工程的目錄結(jié)構(gòu),如下圖:
目錄結(jié)構(gòu)一目了然,我們分別學(xué)習(xí)一下各級目錄結(jié)構(gòu)及其作用。
3.1 清單文件
清單文件即AndroidManifest.xml文件,此文件是Android工程中非常重要的配置文件,用XML來書寫。學(xué)習(xí)過Java Web的童鞋一定知道,在SSH框架中就有許許多多的XML配置文件。Android中的配置文件和SSH框架中的配置文件功能上有些類似,即為框架運(yùn)行提供必要的數(shù)據(jù),新創(chuàng)建工程的AndroidManifest.xml的代碼如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.doll.firstapplicationdemo" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
簡單解釋一下:首先manifest根節(jié)點(diǎn),定義了命名空間和包名;接下來是application結(jié)點(diǎn),代表一個應(yīng)用程序,其中配置應(yīng)用程序的標(biāo)簽、名稱、主題等等;在application結(jié)點(diǎn)里面定義了主Activity(有點(diǎn)類似于Web開發(fā)中的首頁),屬性中定義了類名以及意圖過濾器(這里就不詳細(xì)展開了,在后面詳細(xì)講解activity時會介紹)。這樣,運(yùn)行程序時,Android框架就可以幫我們建立必要的對象實例,讓我們的應(yīng)用程序運(yùn)行起來了。其實,博主覺得這個配置文件和Spring框架中的ApplicationContext.xml配置文件的功能很類似。當(dāng)然,這個配置文件不是一成不變的,和SSH框架的配置文件一樣,隨著項目的不斷完善,我們會向其中寫入各種配置信息。
3.2 代碼文件夾
代碼文件夾包括Java源代碼子文件夾和測試代碼子文件夾,展開后如下:
1.源代碼文件夾
目前該文件夾下,定義一個Activity——MainActivity,這個類在之前介紹的清單配置文件中已經(jīng)提及;以后我們所編寫的程序邏輯類一般都放在這個文件夾下。
2.測試代碼文件夾I(androidTest)
在這個文件夾下放置需要使用Android SDK編寫的測試代碼。當(dāng)然,一般我們的測試代碼都會用到Android SDK,所以大部分的Android測試代碼都放在這一目錄下。
3.測試代碼文件夾II(test)
在這個文件夾下放置不需要使用Android SDK編寫的測試代碼。
3.3 資源文件夾
資源相當(dāng)于我們在程序運(yùn)行之前定義好的數(shù)據(jù),也是應(yīng)用程序的重要組成部分,為此Android Studio專門使用一個文件夾來管理應(yīng)用程序中使用的資源,其具體目錄結(jié)構(gòu)如下:
一個應(yīng)用程序通常有很多類型的資源,比如:
drawable:可繪制的資源,如背景圖片、背景選擇器等;
layout:UI布局資源,用于定義用戶界面;
mipmap:圖片資源,從上圖可以看到,分為hdpi(高分辨率)、mdpi(中等分辨率)、xhdpi/xxhdpi/xxxhdpi(超高分辨率…………)的資源,Android框架會根據(jù)手機(jī)的分辨率自動選擇合適的圖片用于繪制。
values:在這個文件夾下主要放置一些常量資源,比如:顏色常量、維度(尺寸)常量、字符串常量以及樣式常量(定義控件的顯示樣式,類似CSS)等等。
除了上面介紹的這些資源外,Android還支持其他資源,如動畫資源、顏色選擇器資源、菜單資源等,這些在以后博文中都會具體闡述。關(guān)于以上這些資源如何定義以及如何在其他資源文件或程序代碼中引用,也將在之后的博文中做進(jìn)一步介紹。
4 總結(jié)
最后來總結(jié)一下,本文介紹了學(xué)習(xí)Android的緣由、個人對Android操作系統(tǒng)的理解以及目前Android工程的目錄結(jié)構(gòu),其中目錄結(jié)構(gòu)相對比較重要。下一篇將正式開啟我們的APP開發(fā)之旅——實現(xiàn)簡易版微信的登陸、注冊界面的編寫與簡單交互。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中利用App實現(xiàn)消息推送機(jī)制的代碼
Android中利用App實現(xiàn)消息推送機(jī)制的代碼,需要的朋友可以參考下。2011-05-05Android開發(fā)中計算器的sin、cos及tan值計算問題分析
這篇文章主要介紹了Android開發(fā)中計算器的sin、cos及tan值計算問題,結(jié)合實例形式分析了Android三角函數(shù)運(yùn)算中的弧度與角度計算問題與相關(guān)解決方法,需要的朋友可以參考下2017-11-11Android使用BottomNavigationBar實現(xiàn)導(dǎo)航欄功能
這篇文章主要介紹了Android使用BottomNavigationBar實現(xiàn)導(dǎo)航欄功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08Android利用爬蟲實現(xiàn)模擬登錄的實現(xiàn)實例
這篇文章主要介紹了Android利用爬蟲實現(xiàn)模擬登錄的實現(xiàn)實例的相關(guān)資料,希望通過本文能幫助到大家實現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09Ubantu16.04進(jìn)行Android 8.0源碼編譯的流程
這篇文章主要介紹了Ubantu16.04進(jìn)行Android 8.0源碼編譯的相關(guān)資料,需要的朋友可以參考下2018-02-02Android編程設(shè)置TextView顏色setTextColor用法實例
這篇文章主要介紹了Android編程設(shè)置TextView顏色setTextColor用法,結(jié)合實例形式分析了Android設(shè)置TextView顏色setTextColor、ColorStateList等方法的使用技巧與布局文件的設(shè)置方法,需要的朋友可以參考下2016-01-01android studio的使用sdk manager的方法
這篇文章主要介紹了android studio的使用sdk manager的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11