搭建androidstudio開發環境
1. 如何安裝android 的開發環境
如何配置安卓開發環境
分步閱讀
安卓開發現在已經成為了眾多編程人員走的一個方向,那麼,在普通的電腦上我們應該怎麼配置和搭建安卓開發環境呢?有別於別的教程,今天,小編就來介紹一種最簡便的方法,幫助你很快的在電腦上配置好安卓的開發環境。
工具/原料
jdk
android sdk bundle
安裝jdk環境
1
進入oracle官網:http://www.oracle.com
2
菜單欄找到download--java for developers
如圖紅框,點擊進入
3
點擊第一個java
4
同意協議,並下載對應版本,如圖
5
下載安裝完畢即可,第一步完成!即你的電腦已經配置了jdk環境
END
安裝安卓環境
網路搜索android sdk bundle,進入第一個網站,或者直接輸入網址進入:http://developer.android.com/sdk/index.html
點擊download下載
同意協議,並按照你電腦的位數下載相應版本
下載完畢,打開壓縮包,解壓裡面的文件夾,建議解壓在某個容量大的盤符
比如我解壓為android,放在f盤,此時我們需要打開android--eclipse,找到並打開裡面紫色的eclipse文件
配置地址
成功打開eclipse,點擊菜單欄window-preference
雙擊左側邊欄的android
確認右側的路徑正確與否,保證與解壓的文件夾位置相同即可,如圖
點擊apply即可生效
步驟閱讀
10
至此,安卓的開發環境已經搭建完成!可以開始安卓程序的開發了
2. 如何搭建安卓開發環境 android studio
安裝: 1、雙擊Android studio的安裝文件,進入安裝界面: 第一個是Android Studio主程序,必選。第二個是Android SDK,會安裝Android5.0版本的SDK,也勾上。 第三個和第四個是虛擬機和虛擬機的加速程序,如果你要在電腦上使用虛擬機調試程序,就勾上。完成後點擊next下一步。 2、選擇Android studio和SDK的安裝目錄 選擇你習慣安裝軟體的磁碟下就可以,C盤D盤都無所謂,下面的SDK路徑回頭配置時還用得上。 3、設置虛擬機硬體加速器可使用的最大內存 如果你電腦配置還不錯,默認設置2G即可,如果配置比較次,選個1G就差不多,否則過大的話也會影響你運行其他軟體。 4、下一步後,就進入自動安裝模式了。 Android Studio的運行需要 VC++ 環境,保持電腦聯網,安裝程序會自己搞定一切。 5、如果沒出什麼意外,一小段時間後你就會看到下面的界面,也就說明安裝成功了。 6、打開Android studio後,進入相關配置界面 這是用於導入Android studio的配置文件,如果是第一次安裝,選擇最後一項:不導入配置文件,然後點擊OK即可。 7、上一步完成後,就會進入如下頁面,這是程序在檢查SDK的更新情況。 由於我國特色社會主義國情,如果你的電腦不能FQ或者沒配置hosts,這個頁面會卡到什麼時候誰也說不好。建議大家通過如下操作: 「在Android Studio安裝目錄下的 bin 目錄下,找到 idea.properties 文件,在文件最後追加disable.android.first.run=true 。」跳過這一步。如果你後期需要更新SDK,可點擊上面的「二、資源下載」中最後的那個紅色鏈接,下載需要的安裝包離線進行配置。 8、如果進入如下界面,說明你離成功不遠了
3. android studio怎麼配置環境
介紹一下Android Studio的安裝步驟及設置。
使用的是Android的最新版本,0.4.2版本,Android Studio可以脫離Eclipse單獨運行,擁有更加優秀(excellent)的界面, 更加優雅(elegant)的調試環境。
首先, 預覽一下,完整的界面:
6. Enjoy Android Studio
安裝完成之後就可以使用Android Studio進行編程了
4. 如何搭建 android 開發環境
一.認識android的架構
Android其本質就是在標準的linux系統上增加了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。
android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
二.搭建環境
搭建開發環境
對國內的開發者來說最痛苦的是無法去訪問android開發網站。為了更好的認識世界,對程序員來說,會翻牆也是的一門技術,帶你去領略牆外的世界,好了,不廢話了, 國內開發者訪問(androiddevtools) 上面已經有了所有你要的資源,同時可以下載到我們的主角framework
但是這樣的搭建只能去閱讀源代碼,我們無法去更進一步去實現自己的rom,我們看到錘子的系統在早期的開放rom是自己從新實現了framework的代碼,現在看起來他成功了,所以我們還要去搭建android系統的源碼編譯環境。
搭建源碼編譯環境
三.開始主題
在一開始寫c程序的時候都有一個運行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
//這里的main就是應用的入口
int main(int argc, const char * argv[]){
return 0;
}
在計算機網路原理中我們用socket實現一個伺服器端,不斷的接聽客戶端的訪問,而且他的代碼是這樣實現的:
#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;
}
//判斷高低位元組是不是2,如果不是2.2的版本則退出
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
return;
}
//創建流式套接字,基於TCP(SOCK_STREAM)
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
//Socket地址結構體的創建
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//轉換Unsigned long型為網路位元組序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定埠號,除sin_family參數外,其它參數都是網路位元組序,因此需要轉換
//將套接字綁定到一個埠號和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必須用sizeof,strlen不行
listen(socSrv, 5);
SOCKADDR_IN addrClient;//字義用來接收客戶端Socket的結構體
int len = sizeof(SOCKADDR);//初始化參數,這個參數必須進行初始化,sizeof
//循環等待接受客戶端發送請求
while (1)
{
//等待客戶請求到來;當請求到來後,接受連接請求,
//返回一個新的對應於此次連接的套接字(accept)。
//此時程序在此發生阻塞
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);//多發送一個位元組
//接收數據
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
closesocket(sockConn);
}
}
他採用了一個while死循環去監聽客戶端的請求。
先上源代碼
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循環啊,其實用了他方法實現
//用一個looper的機制循環監聽響應
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();
// 在這里看到了一個循環監聽消息
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 ring 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();
}
}