linux搭建android開發環境
A. linux怎麼搭建android開發環境
在ubuntu下搭建android開發環境,准備學習一下android開發。經過2個多小時,終於搭建成功。
1、安裝JDK
首先到oracle的官網上下載linux版本的JDK(網址為:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html),這里選擇 Linux x86 - Self Extracting Installer。直接運行安裝,先把這個文件cp到你的安裝目錄下,然後在你的安裝目錄直接執行:
./jdk-6u26-linux-i586.bin
如果執行失敗是因為沒有執行許可權,那麼還需要加上執行許可權:
chmod +x ./jdk-6u26-linux-i586.bin
安裝程序會自動給你安裝到當前目錄的jdk1.6.0_26目錄下。程序安裝好了,接著需要設置環境變數。執行:
sudo gedit /etc/profile
執行中提示:(gedit:4849): Gtk-WARNING **: Attempting to store changes into `/root/.local這個錯誤,從網上搜索了一下,sudo mkdir -p /root/.local/share/ 也就是表示以超級用戶(sudo命令)身份創建目錄,這樣解決了這個問題。
在配置文件最後加入如下部分:
export JAVA_HOME=/home/jackwong/jdk1.6.0_26
export JRE_HOME=/home/jackwong/jdk1.6.0_26/jre
export PATH=/home/jackwong/jdk1.6.0_26/bin:$PATH
export CLASSPATH=.:/home/jackwong/jdk1.6.0_26/lib:/home/jackwong/jdk1.6.0_26/jre/lib
保存,然後注銷當前用戶,重新登錄,環境變數就生效了。
驗證是否安裝成功:
執行:
java -version
如果出現:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b06)
Java HotSpot(TM) Server VM (build 20.0-b11, mixed mode)
這樣的信息,就說明OK了。
注意,ubuntu默認已經安裝了openjdk,所以你就算不安裝jdk,執行java -version也不會報錯,但是報告的信息和安裝了jdk是不一樣的,請注意區分。
2.安裝eclipse
目前官方推薦開發環境是eclipse+ADT。當然你完全可以採用其他任何一種開發環境,但是我還是選擇了官方的推薦,因為一切都是免費的。下載eclipse的地址是:http://www.eclipse.org/downloads/我下載的是32bit linux :
Eclipse IDE for Java Developers。
我下載下來的文件是eclipse-java-juno-SR1-linux-gtk.tar.gz
當然首先是解壓,執行命令:
tar zvxf eclipse-java-juno-SR1-linux-gtk.tar.gz
解壓成功之後,就出現了一個eclipse目錄。這個目錄就是安裝好的eclipse了,進入這個目錄,執行eclipse文件,即可啟動eclipse。
自己建立桌面啟動快捷方式,即桌面右鍵創建啟動器。
3.下載安裝Android SDK Starter Package
Android SDK Starter Package這個只是SDK的核心基本工具,有了它,再利用它的管理工具下載其他你需要到部分。看到這個目錄中有個android腳本文件了嗎?執行它,就會啟動Android SDK and AVD Manager,這個工具可以幫你下載其他你需要的部分,還可以創建模擬機。
下載地址是:http://developer.android.com/sdk/index.html
一般是下載最新版,我下載的:android-sdk_r21.1-linux.tgz。
接下來當然是解包了:tar zvxf android-sdk_r21.1-linux.tgz
解包完畢,就會在當前目錄下出現android-sdk-linux_x86目錄了。這個目錄下就是sdk的基本工具了。記住這個目錄,因為以後你運行工具或者設置ADT的時候,會需要這個目錄的!
4.安裝ADT(Android Development Tools)插件
ADT插件是google官方開發的Eclipse的一個插件,專門為Android應用開發而准備的。 啟動 Eclipse, 然後選擇 Help > Install New Software....。單擊右上角的Add按鈕,在彈出的 Add Repository 對話框中,Name一欄目填寫 "ADT Plugin",在Location一欄就有兩個選擇,一個是填入下載網址:https://dl-ssl.google.com/android/eclipse/,這樣就可以網上下載安裝。第二個選擇是如果我已經下載了ADT Plugin,那麼就單擊旁邊的Archive按鈕,直接找到插件所在到包即可。這里我用的是第一種方法。比如我用的就是第二種,把Developer SDK Tools前面的checkbox選上,然後單擊下面的next按鈕,然後就等著安裝進度條完成吧,其中會出現安裝軟體的列表,你單擊Next即可,然後會出現license,你必須選擇agree才行,然後單擊finish就完成了。安裝完成之後,重啟eclipse即可。
5.配置ADT 插件
配置的內容就是要修改在eclipse中到ADT插件的引用指向,需要指向前面安裝好的Android SDK目錄,還記得這個目錄嗎?
啟動eclipse,選擇Window > Preferences..
在彈出的Preferences對話框中左邊選擇Android標簽,右邊SDK location選擇你當初Android SDK的目錄即可。比如我到目錄是:/home/AAA/android-sdk-linux_x86(AAA這里是我的用戶名),然後單擊apply,再單擊ok即可。
在這個過程中會彈出一個對話框問你是否要參加google的滿意度調查報告。你可以選擇參加還是不參加。單擊process按鈕即可。
安裝好之後,你可以常用Help > Check for Updates選項來保持ADT保持最新。
6.添加Android操作系統和部件
到目前為止,基本配置都差不多了,但是為了開發android應用,還必須添加一個android操作系統,用於模擬器模擬你的應用程序。當然還有一些其他部件需要安裝。其實就是通過SDK 工具包中的Android SDK Manager來完成。當然在eclipse中可以直接啟動這個程序:Window > Android SDK Manager.
當然也可以直接運行sdk目錄下的tools目錄下的android腳本來啟動。
推薦的部件一般是:
SDK Tools,這個你安裝了sdk starter package實際上已經裝好了。
SDK Platform-tools,這個要裝。
SDK platform,這個至少需要一個。也就是操作系統,你可以下載多個,比如2.2,3.1你可以都下載,但是至少必須一個,因為模擬器運行的時候是必須要的。所以,如果你想各種平台都模擬測試一下,那麼你就需要各種版本的android都下載一個。
我下載了SDK Platform-tools和Android 2.3.3,Android 4.1,Extras幾個包。
下載完成之後,Android的開發環境就搭建好了。
7.對模擬器進行設置
選擇windows->Android Virtual Device Manager 點擊new,具體配置如圖.
完成後點擊start,虛擬機運行後,可將語言調整為中文簡體。
8.hello,android測試程序
啟動eclipse,選擇File->New->Project...,選擇android下Android Application Project.
Application name:Hello,Android 這是應用程序名字,也是程序運行的時候顯示在屏幕上方的文字,注意第一個字母要大寫。
project name:HelloAndroid 這是項目名稱,也就是包含文件的目錄名稱
Package Name:my.android 這個不用解釋,學過java的都應該知道,這是類的包名。
其它地方默認就可以了。
然後一路next,在Activity name處設置為:Helloandroidactivity(注意要求第一個字母大寫)就可以了。
完成後,在my.android下找到Helloandroidactivity.java,打開後,把裡面的onCreate方法的代碼更新如下:
import android.widget.TextView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hello, Android!=你好,安卓!");
setContentView(tv);
}
然後運行,等一段時間,會出現android虛擬機,並運行該程序。
B. android開發環境配置怎麼做
在Windows系統中進行Android開發環境配置時,首先需要安裝JDK並配置環境變數。解壓Eclipse後即可直接使用。Android SDK需要解壓後運行更新,過程較為緩慢。至於ADT,可以下載安裝包或通過網路安裝,在Eclipse的help菜單中選擇install new software。而在Linux系統中,同樣需要安裝JDK,並通過修改/etc目錄下的profile文件來配置環境變數。使用Eclipse rcp版則更為合適,因為它包含更多的插件,適合於開發需求較多的場景。解壓後同樣可以使用。Android SDK的安裝步驟與Windows類似,同樣需要解壓後運行更新。安裝ADT的方式與Windows相同,可以在Eclipse的幫助菜單中找到install new software的選項。
在Windows系統中,開發Android應用時,首先確保JDK已經安裝,並且已經配置了環境變數。接下來,可以下載並解壓Eclipse,開始Android開發之旅。對於Android SDK,解壓後運行更新操作,但可能會比較耗時。另外,ADT的安裝可以通過下載安裝包或利用網路安裝,具體步驟是打開Eclipse的幫助菜單,然後選擇install new software。而在Linux環境下,同樣需要安裝JDK,並進行環境變數的配置。對於Eclipse,推薦使用rcp版本,因為它包含更多的插件,可以滿足開發需求。安裝Android SDK同樣需要解壓後運行更新。至於ADT的安裝,依舊可以通過下載安裝包或網路安裝的方式,選擇Eclipse的幫助菜單中的install new software即可。
在Windows系統中配置Android開發環境時,首先要安裝JDK並配置環境變數。接著,可以下載Eclipse並解壓使用。Android SDK的安裝需要解壓後運行更新,這個過程可能會比較緩慢。至於ADT的安裝,可以選擇下載安裝包或通過網路安裝,在Eclipse的幫助菜單中選擇install new software。而在Linux系統中,也需要安裝JDK,並在/etc目錄下的profile文件中配置環境變數。推薦使用Eclipse rcp版本,因為它包含更多的插件。安裝Android SDK同樣需要解壓後運行更新。安裝ADT的方式與Windows相同,可以在Eclipse的幫助菜單中選擇install new software。
在Windows系統中配置Android開發環境時,首先要安裝JDK並配置環境變數。接著,可以下載Eclipse並解壓使用。安裝Android SDK需要解壓後運行更新,這個過程可能會比較緩慢。安裝ADT可以選擇下載安裝包或通過網路安裝,具體步驟是打開Eclipse的幫助菜單,然後選擇install new software。而在Linux系統中,也需要安裝JDK,並在/etc目錄下的profile文件中配置環境變數。推薦使用Eclipse rcp版本,因為它包含更多的插件。安裝Android SDK同樣需要解壓後運行更新。安裝ADT的方式與Windows相同,可以在Eclipse的幫助菜單中選擇install new software。
在Windows系統中配置Android開發環境時,首先需要安裝JDK並配置環境變數。接著,可以下載Eclipse並解壓使用。Android SDK的安裝需要解壓後運行更新,這個過程可能會比較緩慢。安裝ADT可以選擇下載安裝包或通過網路安裝,具體步驟是打開Eclipse的幫助菜單,然後選擇install new software。而在Linux系統中,同樣需要安裝JDK,並在/etc目錄下的profile文件中配置環境變數。推薦使用Eclipse rcp版本,因為它包含更多的插件。安裝Android SDK同樣需要解壓後運行更新。安裝ADT的方式與Windows相同,可以在Eclipse的幫助菜單中選擇install new software。配置環境的過程雖然繁瑣,但是一旦完成,開發Android應用將變得輕松許多。
在Windows系統中配置Android開發環境時,首先需要安裝JDK並配置環境變數。接著,可以下載Eclipse並解壓使用。安裝Android SDK需要解壓後運行更新,這個過程可能會比較緩慢。安裝ADT可以選擇下載安裝包或通過網路安裝,具體步驟是打開Eclipse的幫助菜單,然後選擇install new software。而在Linux系統中,同樣需要安裝JDK,並在/etc目錄下的profile文件中配置環境變數。推薦使用Eclipse rcp版本,因為它包含更多的插件。安裝Android SDK同樣需要解壓後運行更新。安裝ADT的方式與Windows相同,可以在Eclipse的幫助菜單中選擇install new software。配置環境的過程雖然繁瑣,但是一旦完成,開發Android應用將變得輕松許多。無論是Windows還是Linux系統,配置Android開發環境的過程都大同小異,關鍵是需要耐心和細心,確保每個步驟都准確無誤。
C. 如何搭建 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();
}
}