引言: 在作Unity開發的時候,發現這麼個問題,雖然Unity是跨平臺的,可以進行Android,IOS,Web,PC等開發,但若是要實現一些稍微系統 層的東西,仍是須要經過通訊,調用原系統的接口(自定義的接口)來進行開發的,因此這仍是須要了解其餘平臺原生態的開發的,以前我Web,IOS開發有了 必定了解,最近要實現一個移動平臺的二維碼掃描功能,因爲IOS我在現有資源的狀況下,不能進行真機調試,但Android平臺開發我又不熟悉,因此感受 非常頭疼,因而就下定決心仍是要了解一下原生態的Android開發,求人不如靠己,求人只能是暫時的,再有耐心的人都通過不起你的反覆的問,他人也有他 人的工做!java
學習一門新的技術,都是從HelloWorld開始!這個是衆所周知的,輸入HelloWorld也就是進入了該開發的大門!下面我就寫一下學習心得!linux
以前我 一直從事的是Visual Stdio軟件下的開發,不管是cocos2dx仍是.net,Unity3d,都離不開VS,感受微軟最成功的不只僅是Windows操做系統,還有一 個就是Visual Stdio集成開發環境,我以前一直沒有觸碰與java相關的開發方向,就是由於習慣使用了VS,而且已經愛上它了,就不習慣Eclipse開發環 境,java開發的程序員或許也會有這感受,習慣上了Eclipse開發環境也就獨愛它同樣。如今因爲不得已仍是要學學Android開發,因此仍是漸漸 習慣用Eclipse吧,Eclipse與其餘兩大集成開發環境(Xcode,VS2010)有明顯不一樣的就是配置繁瑣,不耐心的程序員,或許就已經卡在 配置的路上了,但無論怎樣,耐心、細心、責任心是程序員必備的素質!這裏配置Android開發環境就不介紹了,本身Baidu。接下來就是從 HelloWorld建立開始!android
打開Android SDK目錄,介紹一下重要的adb工具,內部tcp調試橋,會經過socket,模擬器來執行指定的操做
。adb這工具比較重要,咱們常會用它來調試,咱們能夠添加在環境變量,配置操做:個人電腦->右擊->屬性->高級->環境變量
程序員
而後在cmd中就可使用adb工具了shell
adb基本操做
a)將本地文件拷貝到手機中
adb push [源文件] [目標文件]
adb push 1.txt /mnt/sdcard/1.txt
b)將手機文件拷貝到本地
adb pull [源文件] [本地]
adb pull /data/app/Apidemos.apk C:\demo.apk
c)殺死某一進程
adb kill start-server
d)將桌面某一應用(apk)安裝到手機模擬器上
adb install demo.apk
e)卸載某一應用
adb uninstall 包名(進程名)
adb uninstall com.example.android.apis
其實豌豆莢 QQ手機關機 91手機助手這些應用程序就是將這些命令封裝了一下,而後執行了相應操做
f)查看adb的版本
adb version (許多莫名其妙的問題就是可能由於adb的版本緣由致使的)
g)查看當前全部鏈接上來的設備信息
adb devices(若是是真機鏈接上,也會顯示真機的名字)
h)來到模擬器或者真機的控制檯
adb shell
Android手機實際上是Linux操做系統的控制檯
ls查看目錄信息
ps就能夠查看當前正在運行的進程信息
kill就能夠殺死某一進程
#kill 127(pid進程號)
這些都是linux的命令了,就不詳細介紹了!
ctrl+f11切換屏幕橫豎屏
api
File->New->Android Application Projectapp
生成的目錄socket
project.properties 文件夾
指定開發使用的android.jar的版本
android-17 Android 4.2.2
android-8 Android 2.2jsp
API級別與NDK的對應關係以下:tcp
Code name | Version | API level |
---|---|---|
(no code name) | 1.0 | API level 1 |
(no code name) | 1.1 | API level 2 |
Cupcake | 1.5 | API level 3, NDK 1 |
Donut | 1.6 | API level 4, NDK 2 |
Eclair | 2.0 | API level 5 |
Eclair | 2.0.1 | API level 6 |
Eclair | 2.1 | API level 7, NDK 3 |
Froyo | 2.2.x | API level 8, NDK 4 |
Gingerbread | 2.3 - 2.3.2 | API level 9, NDK 5 |
Gingerbread | 2.3.3 - 2.3.7 | API level 10 |
Honeycomb | 3.0 | API level 11 |
Honeycomb | 3.1 | API level 12, NDK 6 |
Honeycomb | 3.2.x | API level 13 |
IceCreamSandwich | 4.0.1 - 4.0.2 | API level 14, NDK 7 |
IceCreamSandwich | 4.0.3 | API level 15 |
AndroidManifest.xml
將咱們應用到的信息給註冊到Android系統上,至關於註冊表
註冊了包名、版本號
<activity>節點是咱們應用程序的主界面
修改圖標,添加節點信息
在res文件加下新建drawable文件夾做爲存放圖片的文件夾,放一個5.png的圖標
android:icon = "@drawable/5"
res文件夾
values文件夾下面的strings.xml是配置app的名字已經啓動文本,這裏修改一下app的名字
layout文件夾下的activity_main.xml是界面佈局的文件,點擊GraphicalLayout就是界面的預覽,
點擊activity_main.xml修改文本信息,改爲「Android開發,我要征服你」
全部res文件下的資源配置信息,咱們在gen目錄包下面都會有一個R.java,這個是由aadt工具自動生成的,都是以一個int類型的引用形式存在 的,咱們在res/values/strings.xml下添加一個節點<string name= "myname">丁小未</string>
而後去看R文件,會發現自動生成了一個
public static final int myname=0x7f050003;與之對應的引用
R文件的做用:爲了方便程序中重複的使用定義的資源文件,作到程序跟資源相分離,而後咱們來解釋一下以前寫的android:icon="@drawable/5",這樣寫的道理
@表明R文件,drawable就是表明R類的內部類,5是指內部類裏面的5所指向的地址的圖標
總而言之就是res資源文件R文件都會自動生成一個int類型的節點信息來贊成管理資源
最後介紹最關鍵的src(源碼文件夾)/MainActivity文件,Android開發每個Activity都是對應這一個與之對應的界面
類比:作jsp開發的時候,.jsp文件都是對應着一個用戶能夠見到的網頁;.net開發中,.aspx文件也是用戶能夠見到的動態網頁,這裏採用了MVC的這種模式,是採用這種Activity類來實現用戶可見的界面
雙擊MainActivity.java文件,看到onCreate方法,是在應用第一次啓動的時候執行的方法,其中有這麼一段代碼
setContentView(R.layout.activity_main);這就是設置activity的佈局,咱們能夠自定義佈局,拖動一些控件到activity上
佈局的就是R文件下layout節點下activity_main的資源,對應於res/layout/activity_main.xml文件,Android開發最重要的就是這個R文件
常見錯誤:1.例如若是註冊表文件 AndroidManifest.xml中android:name寫錯了,系統啓動的時候會報一個加載出錯,由於系統在啓動的時候首先就是去訪問該註冊表的文件,因爲清單文件配置出錯,系統找不到與之對應的activity2.AndroidManifest.xml中<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /></intent-filter>這段配置文件的做用:在luncher程序裏面生成一個應用程序的圖標,若是咱們刪了,從新啓動,log日誌會顯示安裝成功HelloWorlddown,但咱們點擊應用圖標卻會提示咱們沒有安裝應用程序!