Android2.2快速入門(mén)
?
前言
這是前段時(shí)間用于公司Android入門(mén)培訓(xùn)的資料,學(xué)習(xí)Android三周時(shí)間收集整理的,時(shí)間倉(cāng)促,希望能對(duì)像我這樣還沒(méi)入門(mén)就直接上項(xiàng)目的人一點(diǎn)幫助? :)
?
聲明
?
歡迎轉(zhuǎn)載,但請(qǐng)保留文章原始出處:)
博客園:http://www.cnblogs.com
農(nóng)民伯伯: http://www.cnblogs.com/over140/
?
正文
一、 ???????????? 環(huán)境配置和安裝( Android2.2 )
參考文章: 這里
1.1 ???? JDK
1.2 ???? SDK
下載地址: http://dl.google.com/android/android-sdk_r06-windows.zip
1.3 ???? Eclipse 3.5 (Galileo)
下載地址:
1.4 ???? ADT 0.9.7
下載地址: http://dl.google.com/android/ADT-0.9.7.zip
1.5 ???? 安裝
依次下載,按照文章步驟安裝即可,注意安裝 SDK 時(shí),需要如下設(shè)置下:
?
不然更新不下來(lái),那個(gè)鏈接地址被墻了。
?
?
二、 ???????????? Android 系統(tǒng)架構(gòu)
?
2.1 ?? Linux 內(nèi)核 (Linux Kernel)
* Android 運(yùn)行在 linux kernel 2.6 之上,但是把 linux 內(nèi)受 GNU 協(xié)議約束的部分做了取代,這樣在 Android 的程序可以用于商業(yè)目的。
* Linux 內(nèi)核是硬件和軟件層之間的抽象層。 ??
2.2 中間件
* 中間件包括兩部分:核心庫(kù)和運(yùn)行時(shí) (libraries & Android runtime)
* 核心庫(kù)包括, SurfaceManager 顯示系統(tǒng)管理庫(kù),負(fù)責(zé)把 2D 或 3D 內(nèi)容顯示到屏幕; Media Framework 媒體庫(kù),負(fù)責(zé)支持圖像,支持多種視頻和音頻的錄制和回放; SQlite 數(shù)據(jù)庫(kù),一個(gè)功能強(qiáng)大的輕量級(jí)嵌入式關(guān)系數(shù)據(jù)庫(kù); WebKit 瀏覽器引擎等。
* Dalvik 虛擬機(jī):區(qū)別于 Java 虛擬機(jī)的是,每一個(gè) Android 應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都有一個(gè)屬于自己的 Dalvik 虛擬機(jī),這一點(diǎn)可以讓系統(tǒng)在運(yùn)行時(shí)可以達(dá)到優(yōu)化,程序間的影響大大降低。 Dalvik 虛擬機(jī)并非運(yùn)行 Java 字節(jié)碼,而是運(yùn)行自己的字節(jié)碼。
2.3 ?? 應(yīng)用程序框架 (Application Framework)
* 豐富而又可擴(kuò)展性的視圖( Views ),可以用來(lái)構(gòu)建應(yīng)用程序, 它包括列表( lists ),網(wǎng)格( grids ), 文本框( text boxes ),按鈕( buttons ), 可嵌入的 web 瀏覽器。
* 內(nèi)容提供者( Content Providers )使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)), 或者共享它們自己的數(shù)據(jù)。
* 資源管理器( Resource Manager )提供非代碼資源的訪問(wèn),如本地字符串,圖形,和布局文件( layoutfiles )。
* 通知管理器( Notification Manager ) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。
* 活動(dòng)管理器( Activity Manager ) 用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。
2.4 ?? 應(yīng)用程序 (Applications)
??? * Android 系統(tǒng)會(huì)內(nèi)置一些應(yīng)用程序包包括 email 客戶(hù)端, SMS 短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用 JAVA 語(yǔ)言編寫(xiě)的。
?
三、 ???????????? Android 系統(tǒng)包說(shuō)明
android.app :提供高層的程序模型、提供基本的運(yùn)行環(huán)境
android.content :包含各種的對(duì)設(shè)備上的數(shù)據(jù)進(jìn)行訪問(wèn)和發(fā)布的類(lèi)
android.database :通過(guò)內(nèi)容提供者瀏覽和操作數(shù)據(jù)庫(kù)
android.graphics :底層的圖形庫(kù),包含畫(huà)布,顏色過(guò)濾,點(diǎn),矩形,可以將他們直接繪制到屏幕上.
android.location :定位和相關(guān)服務(wù)的類(lèi)
android.media :提供一些類(lèi)管理多種音頻、視頻的媒體接口
android.net :提供幫助網(wǎng)絡(luò)訪問(wèn)的類(lèi),超過(guò)通常的Java.net.* 接口
android.os :提供了系統(tǒng)服務(wù)、消息傳輸、IPC 機(jī)制
android.opengl :提供OpenGL 的工具
android.provider :提供類(lèi)訪問(wèn)Android 的內(nèi)容提供者
android.telephony :提供與撥打電話(huà)相關(guān)的API 交互
android.view :提供基礎(chǔ)的用戶(hù)界面接口框架
android.util :涉及工具性的方法,例如時(shí)間日期的操作
android.webkit :默認(rèn)瀏覽器操作接口
android.widget :包含各種UI 元素(大部分是可見(jiàn)的)在應(yīng)用程序的屏幕中使用
?
四、 ???????????? Android 項(xiàng)目工程說(shuō)明
?
src : ??????? 存放 java 源代碼。
gen : ?????? 存放編譯器自動(dòng)生成的 java 代碼,這個(gè)目錄下的文件是系統(tǒng)自動(dòng)維護(hù)的。
assets : ? 存放在這個(gè)目錄下的文件,無(wú)論是 mp3 還是圖片,都會(huì)被打包到發(fā)布包中。
res : ????? 資源文件目錄,添加到這個(gè)目錄下的文件都會(huì)在 gen 下的 R.ava 文件中顯示出來(lái);如果 res 下存放的資源在應(yīng)用中沒(méi)有使用到,那么在 gen 下的 R.java 的文件中就不會(huì)顯示,那么打包的時(shí)候就不會(huì)將這部分資源打包,減少了應(yīng)用的發(fā)布文件大小。
drawable :存放圖片文件,注意圖片名稱(chēng)必須是 [ a-z0-9_. ] 組成; drawable 目錄下不能分子級(jí)目錄,只能通過(guò)命名方法來(lái)加以區(qū)分。
layout :存放與 UI 相關(guān)的布局文件,都是 xml 文件。
raw : ?????? 直接復(fù)制到設(shè)備中的任意文件,不會(huì)被編譯,可以放數(shù)據(jù)庫(kù)文件。
values : ? 存放字符串,顏色,數(shù)組等常量數(shù)據(jù)。可以任意命名,但是通常命名: color.xml 、 strings.xml 、 array.xml 、 styles.xml 、 dimens.xml( 定義尺寸值 :dimension value)
xml : ?????? 任意的 XML 文件,在運(yùn)行時(shí)可以通過(guò)調(diào)用 Resources.getXML() 讀取。
?
參見(jiàn) http://www.inandroid.cn/bbs/thread-1401-1-1.html 。
?
五、 ???????????? 基本控件
5.1 ???? 文本框 (TextView) 、自動(dòng)完成 ( AutoCompleteTextView )
自動(dòng)完成的效果和代碼: http://android.yaohuiji.com/archives/390
5.2 ???? 編輯框 (EditText)
android:hint ???? 內(nèi)容為空時(shí)提醒的信息,如“請(qǐng)輸入”
5.3 ???? 下拉列表 (Spinner)
android:entries ??????? 可以通過(guò)在 strings.xml 中指定 string-array 來(lái)設(shè)置選項(xiàng)。
5.4 ???? 進(jìn)度條 (ProgressBar)
效果和代碼: http://www.eoeandroid.com/viewthread.php?tid=1081
5.5 ???? 拖動(dòng)條 (SeekBar)
5.6 ???? 評(píng)分條 (RatingBar)
?
5.7 ???? 按鈕 (Button) 、圖片按鈕 (ImageButton)
5.8 ???? 圖片框 (ImageView) 、畫(huà)廊 (Gallery)
畫(huà)廊效果: http://android.yaohuiji.com/archives/565
5.9 ???? 日期和時(shí)間 (DatePicker 、 TimePicker)
5.10? 單項(xiàng)選擇 (RadioGroup 、 RadioButton) 、多項(xiàng)選擇 (CheckBox)
5.11? 表格 (GridView) 、列表 (ListView)
GridView : http://blog.csdn.net/hellogv/archive/2009/09/18/4567095.aspx
ListView : http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html
5.12? 對(duì)話(huà)框 ( AlertDialog ) 、對(duì)話(huà)框中的進(jìn)度條 (ProgressDialog)
AlertDialog : http://android.yaohuiji.com/archives/655
ProgressDialog : http://aina-hk55hk.iteye.com/blog/679134
5.13? 菜單 (Menu)
5.14? 提示 (Toast)
類(lèi)似于 MessageBox ,非模式窗口。如:
Toast.makeText(this, " 信息 ", Toast.LENGTH_SHORT).show();
?
六、 ???????????? 布局和容器
6.1 ?? 幀布局 (FrameLayout)
放入其中的所有元素都被放置最左上的區(qū)域,無(wú)法為這些元素指定一個(gè)確切的位置。如果有多個(gè)子元素,那么后邊的子元素的顯示會(huì)重疊在前一個(gè)元素上。
6.2 ?? 線(xiàn)性布局 (LinearLayout)
???????? 常用布局,子元素按行或列依次排列。
android:layout_gravity 是本元素對(duì)父元素的重力方向。
android:gravity 是本元素所有子元素的重力方向。
6.3 ?? 絕對(duì)布局 (AbsoluteLayout)
可以讓子元素指定準(zhǔn)確的 x/y 坐標(biāo)值, (0, 0) 為左上角,沒(méi)有頁(yè)邊框,允許元素之間互相重疊。
6.4 ?? 相對(duì)布局 (RelativeLayout)
???????? 允許子元素指定他們相對(duì)于其它元素或父元素的位置(通過(guò) ID 指定)
6.5 ?? 表格布局 ( TableLayout )
將子元素的位置分配到行 (TableRow) 中,注意不會(huì)顯示邊框線(xiàn)也不能夠跨行合并單元格。
例子: http://hi.baidu.com/hoyah/blog/item/d9db34275d6f361a8b82a171.html
6.6 ?? 選項(xiàng)卡 ( TabWidget)
?????? 例子: http://fatkun.com/2010/06/android-tabwidget.html
?
七、 ???????????? 常用代碼
7.1 ?? 在當(dāng)前 Activity 中啟動(dòng)另外一個(gè) Activity
???????? startActivity(new Intent(this, 目標(biāo) Activity.class));
?
7.2 ?? 從當(dāng)前 ContentView 從查找控件
? (Button)findViewById(R.id.btnAbout)
R.id.btnAbout 指控件 id 。
?
7.3 ?? 獲取屏幕寬高
DisplayMetrics dm = new DisplayMetrics();
// 獲取窗口屬性
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth =?dm.widthPixels;//320
int screenHeight = dm.heightPixels;//480
?
7.4 ?? 無(wú)標(biāo)題欄、全屏
// 無(wú)標(biāo)題欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 全屏模式
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
注意在 setContentView() 之前調(diào)用,否則無(wú)效。
?
7.5 ?? 注冊(cè) activity
???????? 所有用到的 Activity 都必須在 AndroidManifest.xml 中注冊(cè),否則會(huì)報(bào)空指針錯(cuò)誤。如: <activity android:name="com.common.TestView"> ,注意是包名 + 類(lèi)名。
?
八、 ???????????? Adb 命令行
8.1 ?? DOS 進(jìn)入 android-sdk-windows\tools 目錄
8.2 ?? Linux
登錄 linux 命令: adb shell
列出當(dāng)前文件 : ls
刪除文件 : rm 文件名
8.3 ?? Sqlite
登錄 sqlite 命令: sqlite3
8.4 ?? Adb 命令
列出當(dāng)前有哪些活動(dòng)的模擬器: adb devices
上傳文件: adb push
安裝 ap k文件:adb install android123.apk
?
九、 ???????????? Apk 文件破解
9.1 ?? 獲取 apk 的資源圖片
???????? 直接用 WinRAR 打開(kāi), res/drawable 直接拖拽出來(lái)即可。
?
9.2 ?? 獲取 xml 文件信息
??? 雖然能用 WinRAR 看到里面的 xml 文件,但是 xml 是經(jīng)過(guò)優(yōu)化的,無(wú)法直接查看,需要使用 apktool 工具,下載地址: https://code.google.com/p/android-apktool/ 。
下載 apktool-1.3.1.tar.bz2 和 apktool-install-windows-2.2_r01-2.tar.bz2 解壓到同一個(gè)目錄,然后把待破解的 apk 文件拷貝到同一目錄, DOS 進(jìn)入該目錄,輸入: aapt d 91callinfo.apk 91callinfo ,這里第四個(gè)參數(shù)為破解完存放的路徑。
?
9.3 ?? 反編譯 dex 獲取 Java 源代碼
???????? Apktool 工具只能反編譯成 smali 的中間代碼文件,這里需要借助另外一個(gè)開(kāi)源工具: dex2jar ,下載地址: http://code.google.com/p/dex2jar/ 。這個(gè)工具不能直接翻譯成 java 文件,但是可以把 dex 文件轉(zhuǎn)換成 jar 文件,然后可以通過(guò) jad 工具把 jar 文件反編譯成 Java 源文件,如果只是看看源碼的話(huà)可以用 jd-gui ,下載地址:
http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip 。
dex 文件 (classes.dex) 可以用 WinRAR 從 apk 文件中解壓出來(lái)。
?
十、 ???????????? 小技巧
10.1 ???????? 使用系統(tǒng)的圖標(biāo)
???????? 例如調(diào)用系統(tǒng)打電話(huà)的圖標(biāo):
<ImageView android:src="@android:drawable/ic_menu_call"
圖標(biāo)名稱(chēng)和效果 (Android1.5 和 1.6) :
http://since2006.com/android/1.5-drawables.php
http://since2006.com/android/1.6-drawables.php
?
10.2 ???????? 讓控件透明,如 ImageButton
???????? 設(shè)置 android:background="@null"
?
10.3 ???????? 在 layout 中直接指定 onclick 方法
???????? 不用手動(dòng)綁定,在 layout 中設(shè)置 android:onClick=”methodName” , methodName 為對(duì)應(yīng) Activity 中的方法,如下格式: public void methodName (View view){} (適應(yīng) 1.6 以上版本)
?
10.4 ???????? 用 PC 鍵盤(pán)控制模擬器
PC 鍵盤(pán) |
模擬器按鍵 |
說(shuō)明 |
Home |
Home |
主頁(yè) |
F2 |
Menu |
菜單 |
Esc |
Back |
后退 |
F3 |
Call |
打電話(huà) |
F4 |
Hangup |
掛斷 |
F5 |
Search |
搜索 |
Ctrl+F12 |
? |
橫豎屏切換 |
?
10.5 ???????? 進(jìn)入界面就顯示 / 隱藏軟鍵盤(pán)
???????? 在 AndroidManifest.xml 中設(shè)置 activity 的
???????? android:windowSoftInputMode="stateHidden"
?
10.6 ???????? 界面可視化布局工具
???????? 系統(tǒng)提供可視化布局并不好用,這里推薦一款,布局完后點(diǎn)生成代碼即可:
???????? DroidDraw : http://www.droiddraw.org/
?
10.7 ????????? 在 Eclipse 中看 Android 的源碼
???????? 將源代碼拷貝至 android-sdk-windows\platforms\android-4\sources 下即可。注意源碼版本對(duì)應(yīng) android-4 文件夾,這里指 Android1.6 的源碼。
?
十一、 ????? Q & A
11.1 ????????? 用模擬器調(diào)試頻繁連不上,或者報(bào) emulator-5554 disconnected 的錯(cuò)誤?
???????? ???????? Window( 窗口 ) -> Show Views( 顯示視圖 ) -> device -> view menu( 視圖菜單 )
-> Reset adb
?
11.2 ????????? 匿名類(lèi)中如何使用 this ?
???????? classname( 類(lèi)名 ).this
?
11.3 ????????? 程序出錯(cuò)后模擬器上僅顯示應(yīng)用程序遇到問(wèn)題將關(guān)閉怎么辦?
可以從
LogCat
中檢查錯(cuò)誤,默認(rèn)
LogCat
在
DDMS
視圖中,可以通過(guò)以下方法調(diào)整到
Java
視圖與控制臺(tái)并列顯示:點(diǎn)擊
Eclipse
左下角
,點(diǎn)開(kāi)后在其他里面找到
Android
目錄下的
LogCat
拖拽出來(lái)即可。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
