我的第一個Android程序

成都網(wǎng)絡公司-成都網(wǎng)站建設公司創(chuàng)新互聯(lián)十余年經(jīng)驗成就非凡,專業(yè)從事成都網(wǎng)站制作、做網(wǎng)站,成都網(wǎng)頁設計,成都網(wǎng)頁制作,軟文發(fā)稿,廣告投放平臺等。十余年來已成功提供全面的成都網(wǎng)站建設方案,打造行業(yè)特色的成都網(wǎng)站建設案例,建站熱線:18982081108,我們期待您的來電!
今天給大家分享一下我的第一個Android項目:helloword
首先我們開發(fā)Android程序需要一個開發(fā)環(huán)境,下面先分享一下環(huán)境搭建的方法
Android開發(fā)環(huán)境搭建非常簡單,google為我們提供了一套完整的開發(fā)工具包下載
點擊Download the SDK就會出現(xiàn)下面的頁面,選擇同意以上條款,并根據(jù)自己的系統(tǒng)選擇對應的版本,我的電腦是32位的所以就選擇了32-bit的,然后點擊下面藍色的按鈕就可以開始下載啦~~
下載好了之后呢是一個510M的壓縮文件,選擇好目錄解壓縮之后能我們會得到
這三個東西,這里呢我們看到了我們熟悉的Eclipse文件夾了,沒錯,這個文件夾下呢就是我們的開發(fā)工具啦,但是不要著急,但開始之前呢,我們需要先配置一下我們的環(huán)境變量
將SDK下的platform-tools和tools兩個文件夾的完整路徑呢配置到我們的環(huán)境變量PATH中
我的系統(tǒng)是window7的,配置環(huán)境變量的方法呢:右擊我的電腦-屬性-高級設置-環(huán)境變量-雙擊Path將連個文件夾的路徑追加進去,注意中間要用分號隔開,點擊確定。
配置好所有的環(huán)境變量后,打開我們的Eclipse文件夾下的eclipse.exe,
第一次打開會彈出一個對話框,設置我們的工作路徑,也就是我們保存項目的地方
經(jīng)過加載之后呢,我們就看到操作界面了。
首先先創(chuàng)建一個Android的虛擬機,點擊window下的Android Virtual Devices Manager選項
就可以看到我們的Android虛擬機管理界面了
點擊new新建一個虛擬機
選擇好后點擊確定,一個虛擬機就創(chuàng)建好了,選擇我們創(chuàng)建好,選中我創(chuàng)建好的虛擬機,start
加載界面
完成后就能看到我們的虛擬機啦~經(jīng)過漫長的啟動終于看到虛擬機界面了。
準備工作都做好了,下面開始創(chuàng)建一個Android項目啦,萬能的helloword,哈哈!
虛擬機最小化,進入Eclipse界面,菜單欄File-new-Android application project,新建一個Android項目
接著會出現(xiàn)一個界面,選擇一些參數(shù)
接下來就是一路next然后finish,一個新的Android項目就建好了
接著在界面會看到Eclipse的界面了
右擊我們的項目,run as - 選擇Android application,就可以運行到我們的虛擬機上
1、首先我們在搭建 Android 開發(fā)環(huán)境之前,需要一個集成的開發(fā)環(huán)境,一個是 SDK,一個是模擬器。因為編程使用的是JAVA語言,還需要JDK。Java開發(fā)環(huán)境具 體搭建方法請參照:
2、開發(fā)集成環(huán)境選擇eclipse(集成版)
軟件名稱: ? ?Eclipse SDK(跨平臺集成開發(fā)環(huán)境)V3.6.7(x64)
軟件大小: ? ?174.3M
下載地址: ? ?
3、開發(fā)安卓用的插件是ADT,它可以幫助我們完成創(chuàng)建項目,向模擬器部署并運 行程序,調試程序等工作。
4、安裝ADT的方法如下:
(1)啟動eclipse,選擇菜單中的Help - Software Updates
(2)點擊Add Site
(3)點擊Archive…
(4)找到OPhone SDK安裝目錄下tools\ophone\ ADT-0.8.0.zip(因為我已經(jīng)安 裝好了ADT,所以出現(xiàn)了重復URL的提示),點擊OK即可開始安裝
(5)ADT安裝完畢后還要簡單配置一下,打開菜單中的Window - Preferences
(6)找到Android項,通過Browse按鈕指定Android SDK的安裝位置
至此為止,Android的安裝環(huán)境就全部搭建完畢了
一.認識android的架構
Android其本質就是在標準的Linux系統(tǒng)上增加了Java虛擬機Dalvik,并在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基于JAVA的application framework之上。
android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統(tǒng)運行庫層和linux核心層。
二.搭建環(huán)境
搭建開發(fā)環(huán)境
對國內的開發(fā)者來說最痛苦的是無法去訪問android開發(fā)網(wǎng)站。為了更好的認識世界,對程序員來說,會翻墻也是的一門技術,帶你去領略墻外的世界,好了,不廢話了, 國內開發(fā)者訪問(androiddevtools) 上面已經(jīng)有了所有你要的資源,同時可以下載到我們的主角framework
但是這樣的搭建只能去閱讀源代碼,我們無法去更進一步去實現(xiàn)自己的rom,我們看到錘子的系統(tǒng)在早期的開放rom是自己從新實現(xiàn)了framework的代碼,現(xiàn)在看起來他成功了,所以我們還要去搭建android系統(tǒng)的源碼編譯環(huán)境。
搭建源碼編譯環(huán)境
三.開始主題
在一開始寫c程序的時候都有一個運行的入口,比如
#include iostream
#include cmath
#include algorithm
using namespace std;
//這里的main就是應用的入口
int main(int argc, const char * argv[]){
return 0;
}
在計算機網(wǎng)絡原理中我們用socket實現(xiàn)一個服務器端,不斷的接聽客戶端的訪問,而且他的代碼是這樣實現(xiàn)的:
#include winsock2.h
#pragma comment(lib, "WS2_32.lib")
#include stdio.h
void main()
{
WORD wVersionRequested;//版本號
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//加載套接字庫,如果失敗返回
err = WSAStartup(wVersionRequested, wsaData);
if (err != 0)
{
return;
}
//判斷高低字節(jié)是不是2,如果不是2.2的版本則退出
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
return;
}
//創(chuàng)建流式套接字,基于TCP(SOCK_STREAM)
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
//Socket地址結構體的創(chuàng)建
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//轉換Unsigned long型為網(wǎng)絡字節(jié)序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定端口號,除sin_family參數(shù)外,其它參數(shù)都是網(wǎng)絡字節(jié)序,因此需要轉換
//將套接字綁定到一個端口號和本地地址上
bind(socSrv, (SOCKADDR*)addrSrv, sizeof(SOCKADDR));//必須用sizeof,strlen不行
listen(socSrv, 5);
SOCKADDR_IN addrClient;//字義用來接收客戶端Socket的結構體
int len = sizeof(SOCKADDR);//初始化參數(shù),這個參數(shù)必須進行初始化,sizeof
//循環(huán)等待接受客戶端發(fā)送請求
while (1)
{
//等待客戶請求到來;當請求到來后,接受連接請求,
//返回一個新的對應于此次連接的套接字(accept)。
//此時程序在此發(fā)生阻塞
SOCKET sockConn = accept(socSrv, (SOCKADDR*)addrClient, len);
char sendBuf[100];
sprintf(sendBuf, "Welcome %s to JoyChou",
inet_ntoa(addrClient.sin_addr));//格式化輸出
//用返回的套接字和客戶端進行通信
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多發(fā)送一個字節(jié)
//接收數(shù)據(jù)
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
closesocket(sockConn);
}
}
他采用了一個while死循環(huán)去監(jiān)聽客戶端的請求。
先上源代碼
public final class ActivityThread {
public static void main(String[] args) {
SamplingProfilerIntegration.start();
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
EventLogger.setReporter(new EventLoggingReporter());
Security.addProvider(new AndroidKeyStoreProvider());
final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
Process.setArgV0("pre-initialized");
Looper.prepareMainLooper();
//從中可以看到為app開辟了一個線程進入了looper之中
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
}
看到源碼失望了,沒有一個while循環(huán)啊,其實用了他方法實現(xiàn)
//用一個looper的機制循環(huán)監(jiān)聽響應
Looper.prepareMainLooper();
Looper.loop();
進一步深入代碼
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
// 在這里看到了一個循環(huán)監(jiān)聽消息
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
Printer logging = me.mLogging;
if (logging != null) {
logging.println(" Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}
msg.target.dispatchMessage(msg);
if (logging != null) {
logging.println(" Finished to " + msg.target + " " + msg.callback);
}
// Make sure that during the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}
msg.recycleUnchecked();
}
}
android開發(fā)環(huán)境目前主流有兩種,一是eclipse+ADT+SDK,另外一種是Google官方指定的開發(fā)環(huán)境 Android Studio。不管哪種必須先安裝JDK 并配置好環(huán)境變量,這是首要前提。
一、 搭建eclipse+ADT+SDK的開發(fā)環(huán)境。
首先下載eclipse EE版本,ADT 插件和 android SDK (注意ADT和SDK可能版本沖突,如果發(fā)生沖突換掉SDK 或ADT)。打開eclipse點help菜單下的Install New Softwaver,點擊add在彈出的對話框中 name里隨意指定一個名字location里指定你下載的ADT文件,或在線安裝ADT地址,OK。勾選下面新出現(xiàn)的內容
然后點下面的Next。一步步安裝。
安裝好后重啟eclipse此時選擇eclipse的window菜單下Preference,點左邊的Android欄目點右邊的Browser指定你的Android SDK的解壓目錄。
重啟eclipseOK
二、安裝Android Studio
AndroidStudio 配置比較簡單,先安裝好JDK 并在環(huán)境變量中添加JAVA_HOME變量指向JDK根目錄。再安裝AndroidStudio。安裝好后即可打開使用。(必須添加JAVA_HOME變量)。
android開發(fā)環(huán)境非在線搭建方式:
1、JDK安裝配置:下載JDK的安裝包并完成安裝,配置JDK的環(huán)境變量;
2、下載:Eclipse,Android SDK,ADT的下載,下載完畢后把所需壓縮包都放在一個比較空曠的地方(ADT不要解壓哦);
3、Eclipse啟動:不需要安裝,解壓縮即可使用,然后進入解壓后的文件,雙擊eclipse.exe即可啟動eclipse;
4、ADT的安裝:a啟動eclipse后,運行菜單項Help-Install new software。單擊對話框中的Add按鈕;
5、在彈出對話框,單擊Archive(不需要填寫Name,Location)。在彈出對話框中,選擇ADT所在位置,找到ADT壓縮包打開,單擊OK按鈕;
6、勾選Bestart Now,單擊next。在出現(xiàn)對話框中,選擇I accept….項,單擊next。安裝結束,顯示是否重啟Ecllpse,單擊restart;
7、Android SDK配置:重啟Eclipse后,運行菜單Window-Preferences.選擇左側的Android,在右側單擊Browse定位到Android SDK解壓后的所在目錄,單擊OK;
8、安裝配置模擬器:a運行菜單項Windows-Android SDK andAVD Manager,即出現(xiàn)對話框,放大對話框,單擊New按鈕;
9、出現(xiàn)“Create New Android VirtualDevice(AVD)”的對話框,OK大功告成,Android開發(fā)環(huán)境算是搭建完畢,Android 應用可以在模擬器上運行了。
文章標題:android開發(fā)搭建,android構建
網(wǎng)站URL:http://chinadenli.net/article45/dseosei.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站導航、Google、搜索引擎優(yōu)化、網(wǎng)站改版、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)