android伺服器源碼
❶ android怎麼修改源碼
在Android界面的系統status bar上添加home,back,menu三個菜單,並完成對應的系統功能。並有higlight效果,修改status bar 高度和status bar上的文字尺寸。
這需要修改android sdk才能完成,我用的是eclair.下面就我的操作進行敘述。
1.首先完成界面顯示效果。
需要修改文件
./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java,仿照mBatteryIcon等icon的添加方式添加自定義的icon,圖片名稱指定就好了。另外還要記得修改./frameworks/base/core/res/res/values/arrays.xml,這里定義了icon的slot,並且決定了icon的擺放順序。
這樣,你需要的icon按鍵就可以顯示在系統的status bar上面了。
2.判斷touch event是否按動了某個icon
需要修改的文件
./frameworks/base/services/java/com/android/server/status/StatusBarView.java
首先在onTouchEvent函數中,獲取當前event的坐標,然後比較是否在某個按鍵范圍之內。由於系統對於statusBar的范圍已經有了定義,所以這里只需要比較橫坐標就可以了。
其次,也是這一步最關鍵的,怎麼獲取具體某一個icon的左右邊界坐標呢?系統的status bar左邊顯示的圖標都是notification, 右邊顯示的是系統icon. 也就是說左邊icon屬於mNotificationIcons,右邊的icon屬於mStatusIcons. 在文件StatusBarView.java中出現的offset = getViewOffset(mStatusIcons),得到mStatusIcons的最左邊的icon的left橫坐標。用N = mStatusIcons.getChildCount()得到共有幾個系統icon,其中包含visibility為false的icons.用mStatusIcons.getChildAt(N-i)得到的是從右邊數第i個的icon view. 這個view的getLeft()+offset就是這第i個icon的左邊橫坐標,對應的getRight()+offset就是這第i個icon的右邊橫坐標。本例中home鍵是右邊第2個icon.
3.定義icon響應事件
這里使用的方法是在StatusBarView.java中向
./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java發送一個Broadcast,讓StatusBarPolicy來完成具體的事件操作。這里需要注意的是不僅要在./frameworks/base/core/java/android/content/Intent.java中定義intent,還要在StatusBarPolicy的構造函數中添加該intent的過濾動作,即filter.addAction(Intent.ACTION_BACKICON_CHANGED).例如,按動了back鍵,如果當前事件為action_up,就向系統發送一個keyEvent,keyCode為KeyEvent.KEYCODE_BACK. 這里借用的是./frameworks/base/cmds/input/src/com/android/commands/input/Input.java中的sendKeyEvent函數,直接拷貝過來,按照需要稍微修改一下形參就可以了,過程不要修改。
需要說明的是,當點擊statusBar可以拉出來一個notification列表,當這個列表顯示出來的時候,這三個back, menu, home鍵的響應速度會非常慢,所以這時不響應事件並隱藏這三個鍵。具體做法是在StatusBarView的onTouchEvent()中判斷mService.mExpanded或者 mService.mTracking為真時就不做響應。mService是StatusBarService對象。隱藏三個鍵也是用Broadcast來做的,但這個intent是由StatusBarServie發出來的,當mExpandedVisible = false時顯示,當mExpandedVisible = true時隱藏。
這里還同時完成了highlight換圖的動作,也是用Broadcast來做得,處理過程一樣,就是需要區分action_down和action_up就可以了。
4.調整status bar的高度
如果你需要顯示較大的屏幕尺寸,同時statusBar的高度要拉大,上面的icon的size也需要調大。為了協調一致,顯示時間的字體和notification顯示的日期的字體也需要調大。具體做法如下:
a.調節status bar icon的size: 只調節status_bar.xml的textSize標簽似乎不起作用,同時又修改了./base/services/java/com/android/server/status/StatusBarIcon.java的t.setTextSize(32);語句才成功。不知道修改status_bar.xml的<com.android.server.status.AnimatedImageView>標簽下的layout_height值是不是必須的,反正我是一起都給改了。
b.調節status bar height: ./base/core/res/res/values/dimens.xml 找得我好辛苦!不知道還需不需要修改./base/core/res/res/values/themes.xml中的Window attributes的windowTitleSize值,反正我也給改了。
c.調節notification顯示日期字體的大小,修改status_bar.xml的<com.android.server.status.DateView>的textSize值。
到這里,就完成了所有工作,看看效果吧。
❷ Android使用POST訪問伺服器上的PHP文件 得到結果後為什麼顯示的是源碼而不是執行PHP程序 怎麼解決 謝謝啦
這種原因出現是PHP伺服器端返回的值不對!
出現這種情況,可能是以下原因。移動端(請求端)所傳參數不符合PHP端要求或者PHP邏輯不夠嚴謹,沒有考慮你所傳這種參數的情況(你倆商量誰改比較好)。
❸ java代碼實現Android的視頻 那伺服器的代碼的代碼是
{
/**
*.
*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
RelativeLayoutrl=newRelativeLayout(this);
//創建TextView1
TextViewtv1=newTextView(this);
tv1.setText("111111111111111111111111111");
tv1.setTextSize(20);
//設定tv1的id,後面規則要用到
tv1.setId(1);
//將tv1加入布局
rl.addView(tv1);
//創建TextView2
TextViewtv2=newTextView(this);
tv2.setText("2222222222222222222222222222");
tv2.setTextSize(20);
//創建RelativeLayout.LayoutParams
RelativeLayout.LayoutParamsparams=newRelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
//添加規則1為tv1的id
params.addRule(RelativeLayout.BELOW,1);
//將tv2加入布局傳入參數params
rl.addView(tv2,params);
setContentView(rl);
}
❹ 求帶有客戶端和伺服器端的Android應用程序源代碼(能運行的),謝謝
這是我個人的一個項目,客戶端,服務端以及資料庫都有。
❺ 如何部署android伺服器端的java代碼
Java平台般三版本:Java ME(微型版用於某些手機)、Java SE(標准版用於台式電腦)、Java EE(企業版用於伺服器端應用)談Java我通指Java SE版本包含虛擬機編譯器
首先Java代碼編譯稱位元組碼間格式位元組碼目標電腦運行虛擬機快速解析目標電腦硬體操作系統所需要本機格式
除發者提供編寫處運行優勢Java能通垃圾收器(GC)實現自內存管理發者免手代碼釋放用象內存雖功能非用且降低代碼引入內存問題風險增加運行銷需要停執行垃圾收進程
本文比較Java SE用於Android發Java間差異首先我介紹發者習慣Java
SE語言結構及何Android運行其我介紹何優化AndroidJava代碼何優化內存配及何恰處理線程
比較AndroidDalvik JavaJava SE
雖遠Android現前發者能用Java編程語言移設備編寫應用程序Java功能極限版本稱Java
ME(微型版)同移設備需編寫同代碼寫應用程序能支持Java
ME任何手機運行幾乎能外由於存線商店應用發布程極其復雜
Android問世發者提供構建智能手機強應用機發者需用Java編程語言及熟知標准Java
API編寫代碼盡管Android發者仍使用Java SE編譯器編譯應用程序發現James
Gosling發JavaAndroid設備Java存許同處
Android設備運行VM(虛擬機)稱Dalvik初由谷歌Dan
Bornstein發適用於CPU內存受限移設備Java SEDalvik Java存些差異主要體現虛擬機Java
SE使用棧機設計Dalvik設計基於寄存器機器Android SDKdx工具Java
SE棧機器位元組碼轉換基於寄存器Dalvik機器位元組碼該轉換步驟由IDE自完
基於棧虛擬機基於寄存器虛擬機定義及差異列入我討論范圍由於歷史原Android使用基於寄存器虛擬機雖基於寄存器虛擬機比基於棧虛擬機快32%限於執行解釋位元組碼虛擬機(說解釋型虛擬機)Android
2.2版本(稱Froyo)前Dalvik虛擬機都純解釋型Froyo版本引入JIT編譯器(即編譯)Java
SE早優勢
JIT編譯稱態翻譯執行前位元組碼翻譯本機代碼(圖1所示)主要兩處首先消除些純解釋型虛擬機銷;其能本機代碼執行優化通靜態編譯代碼做例JIT編譯器運行CPU選擇合適優化根據應用程序輸入析代碼何運行便進行步優化
圖1Android JavaJava SE翻譯步驟
雖AndroidDalvik JIT編譯器發展前景要達Java SEJIT編譯器般穩定、熟度尚需段間Dalvik JIT現Android提供巨性能優勢且斷改善
JAVA
SE虛擬機Dalvik虛擬機另區別者進行優化運行同機器實例機啟叫做zygote進程該進程創建第Dalvik實例由實例創建所其實例應用程序啟zygote進程收創建新虛擬機實例請求並給該應用程序創建新進程(圖2所示)發者已習慣於Java
SE發設計能看起切實際優勢避免由應用程序運行失敗導致Dalvik虛擬機崩潰繼引發應用程序崩潰
圖2Android啟新Dalvik虛擬機實例
AndroidJava
SE除運行虛擬機同外實現API式Android屬於javajavax包API都自Apache
Harmony(源項目旨重新實現Java SE軟體棧該項目201111月再維護)發面些APIJava
SE包類似存些差別例谷歌HttpUrlConnection類進行Java SE版本所沒重升級
外Android平台移除Java
SE關API例Swing/AWT包完全移除Android使用同UI框架其移除APIRMI、CORBA、ImageIOJMX或者替換特定Android版本(android包空間內)或者些實際原根本存
優化AndroidJava代碼
經改進Java
SE具備些簡化編寫復雜代碼結構新特性其些特性讓整流程變更簡單發者需要解何及何確使用另外由於Java
SE用於伺服器端發(使用Java企業版API)發員專門伺服器端Java代碼進行優化註解Java虛擬機腳本語言支持伺服器端發進行優化例證雖些工具構建端發強發Android客戶端代碼些特性作用甚至起反作用Java發者已經習慣於限量RAMCPUAndroid發需要密切關注性能內存配簡單說發者需要使用稍微同待Android端發
隨著Android首發布情況所改變曾經些Android盡量用Java規范重新推薦主要Android目前JIT編譯器解決些規范導致性能問題
本文討論編寫Android應用程序需要解Java代碼我深究Java編程語言細節重點關注Android發重要東西發者仍需解數適用於Java SE規則建議同適用於AndroidDalvik虛擬機
Android類型安全枚舉
Java SE 5.0新增許便發者新特性其值期待引入類型安全枚舉枚舉代碼用表示屬於某組幾選擇早期版本Java用整型量解決問題雖技術行容易錯請看面代碼:
public class Machine {
public static final int STOPPED = 10;
public static final int INITIALIZING = 20;
public static final int STARTING = 30;
public static final int RUNNING = 40;
public static final int STOPPING = 50;
public static final int CRASHED = 60;
private int mState;
public Machine() {
mState = STOPPED;
}
public int getState() {
return mState;
}
public void setState(int state) {
mState = state;
}
}
問題雖些量期望沒機制保證setState()接收同值要設置添加檢查旦非預期值發者需要處理錯誤發者所需要編譯檢查非賦值類型安全枚舉解決問題所示:
public class Machine {
public enum State {
STOPPED, INITIALIZING, STARTING, RUNNING, STOPPING, CRASHED
}
private State mState;
public Machine() {
mState = State.STOPPED;
}
public State getState() {
return mState;
}
public void setState(State state) {
mState = state;
}
}
注意聲明同類型安全值新加內部枚舉類編譯解決非賦值問題所代碼更容易錯
Dalvik虛擬機沒JIT編譯器優化代碼建議Android平台使用枚舉類型使用整型量相比種設計帶內存性能損失更些版本Android
API存整型量原今更強JIT編譯器及斷改進Dalvik虛擬機發者必再擔問題放膽使用類型安全枚舉即
仍存些情況使用整型量更選擇像intJava基本類型增加GC銷外Android SDK許已API仍依賴基本類型比Handler類——種情況沒太選擇
Android增強版for循環
Java SE 5.0引入增強版for循環提供通用縮寫表達式遍歷集合數組首先比較五種:
void loopOne(String[] names) {
int size = names.length;
for (int i = 0; i < size; i++) {
printName(names[i]);
}
}
void loopTwo(String[] names) {
for (String name : names) {
printName(name);
}
}
void loopThree(Collection names) {
for (String name : names) {
printName(name);
}
}
void loopFour(Collection names) {
Iterator iterator = names.iterator();
while (iterator.hasNext()) {
printName(iterator.next());
}
}
// 要ArrayList使用增強版for循環
void loopFive(ArrayList names) {
int size = names.size();
for (int i = 0; i < size; i++) {
printName(names.get(i));
}
}
面顯示四種同遍歷集合數組式前面兩種著相同性能所讀取元素放數組使用增強版for循環Collection象說增強版for循環使用迭代器遍歷元素著相同性能ArrayList象應避免使用增強版for循環
僅需要遍歷元素且需要元素位置定要使用數組或者ArrayList所其Collection類些情況更慢
般情況讀取元素幾乎變數據集性能要求高建議使用規數組數組固定添加數據影響性能所編寫代碼要考慮所素
隊列、同步鎖
通情況應用程序線程產數據另線程使用見例線程獲取網路數據另線程(操作UI主線程)些數據展現給用戶種模式稱產者/消費者模式面向象編程課程發者用算實現該模式能要花幾面介紹些簡化產者/消費者模式實現現類
1. 更智能隊列
雖已現類並能用更少代碼實現該功能許Java發者仍選擇使用LinkedList及同步塊實現隊列功能發者java.util.concurrent包找同步相關類外本包包含信號量、鎖及單變數進行原操作類考慮面使用標准LinkedList實現線程安全隊列代碼
public class ThreadSafeQueue {
private LinkedList mList = new LinkedList();
private final Object mLock = new Object();
public void offer(String value) {
synchronized (mLock) {
mList.offer(value);
mLock.notifyAll();
}
}
public synchronized String poll() {
synchronized (mLock) {
while (mList.isEmpty()) {
try {
mLock.wait();
} catch (InterruptedException e) {
//簡潔起見忽略異處理
}
}
return mList.poll();
}
}
}
雖段代碼確並能考試滿實現測試段代碼浪費間實際所前面代碼用面行代替
LinkedBlockingQueue blockingQueue =
new LinkedBlockingQueue();
面行代碼能像前面例提供相同類型阻塞隊列甚至能提供額外線程安全操作java.util.concurrent包含許選隊列及並發映射類所般情況建議使用像前示例使用更代碼
2. 更智能鎖
Java提供synchronized關鍵字允許發者創建線程安全代碼塊synchronized關鍵字易於使用容易濫用性能造負面影響需要區讀數據寫數據synchronized關鍵字並效幸java.util.concurrent.locks包工具類種情況提供支持
public class ReadWriteLockDemo {
private final ReentrantReadWriteLock mLock;
private String mName;
private int mAge;
private String mAddress;
public ReadWriteLockDemo() {
mLock = new ReentrantReadWriteLock();
}
public void setPersonData(String name, int age, String address) {
ReentrantReadWriteLock.WriteLock writeLock = mLock.writeLock();
try {
writeLock.lock();
mName = name;
mAge = age;
mAddress = address;
} finally {
writeLock.unlock();
}
}
public String getName() {
ReentrantReadWriteLock.ReadLock readLock = mLock.readLock();
try {
readLock.lock();
return mName;
} finally {
readLock.unlock();
}
}
// 重復代碼再贅述
}
面代碼展示使用ReentrantReadWriteLock允許並發線程數據進行讀訪問並確保同間線程寫入相同數據
代碼使用synchronized關鍵字仍處理鎖問題效論何種情況都要考慮ReentrantReadWriteLock否
❻ 如何導入與配置從網上下載的android源代碼及伺服器端源代碼
將Android項目導入import進Eclipse。 注意SDK版本是否匹配 。 伺服器部署到Tomcat下。 你得在資料庫中將這個點菜系統的資料庫和表建好,或者導入。在伺服器的代碼中修改好你的資料庫名和密碼。
❼ 需求:一個android設備通過伺服器遠程式控制制一個linux設備,求源碼或者技術框架思路
我覺得你來錯地方了。。。但是我可以給你提供一個粗略的解決方案。
需要設備:android設備,伺服器,以及接受控制放的PC或者工作站
需要編寫的軟體:android客戶端,伺服器服務端,以及接受控制方linux設備客戶端。
其實基本上就跟即時通信軟體差不多,需要你的android客戶端向伺服器發送一個指令,告訴伺服器你要對哪台電腦進行何種操作;伺服器接收到指令以後便向linux客戶端轉發指令;linux客戶端接收到指令以後響應指令。
全程通信使用socket連接。
希望能夠幫到你!
❽ androidpn服務端源碼修改後怎麼編譯
1.伺服器:
ConfigManager--配置信息載入類,
Config--配置信息管理類,可以得到配置文件中指定屬性的值;
CopyMessageUtil--將IQ中的id得到賦值給回執對象;
AuthManager--提供用戶認證的相關功能;
IQAuthHandler--接收並處理命名空間為「jabber:iq:auth」的消息請求,用於處理用戶驗證業務;
IQRegisterHandler--接收並處理命名空間為 "jabber:iq:register"的消息請求,用於處理用戶注冊業務;
IQRosterHandler--接收處理命名空間為"jabber:iq:roster"的消息請求,用於處理用戶獲取花名冊業務;--未提供實現,如需此功能需要擴展;
PresenceUpdateHandler--接收處理用戶的狀態變更請求信息;
Connection--一個XMPP連接伺服器的實例,提供發送消息及得到伺服器連接相關信息;
ConnectionCloseListener--客戶端與伺服器之間的連接斷開監聽器;
StanzaHandler--一個消息處理類,處理傳入的XML節,把接收到的消息轉換成一個XML的對象;
XmppIoHandler--繼承於MINA中的IOHandler,用於從MINA中接收消息,並把消息交給StanzaHandler類處理;
PresenceManager--用於管理用戶的在線狀態;
NotificationManager--消息通知發送管理類,提供了發送消息給客戶端的功能:
A.sendBroadcast--給所有在線用戶發送消息;
B.sendNotifcationToUser--給指定用戶發送消息 ;
C.sendNotifications--給指定的多個或一個用戶發送消息;
D.sendOfflineNotification--發送離線消息;
IQRouter--IQ請求路由類,繼承了IQHandler的IQ消息處理類需要在IQRouter類中注冊,IQRounter就會跟命名空間把消息路由到相應的處理類中去處理;
MessageRouter--Message消息路由類;
PresenceRouter--Presence消息路由類;
PacketDeliverer--發送到連接的會話;
PacketRouter--Packet路由類,在這個類里有IQRouter、PresenceRouter、MessageRouter三個類的對象,可以對三種類型的消息都可以進行處理路由;
ClientSession--代表一個客戶端與伺服器之間的連接;從這個連接中可以得到這個連接的相關信息,如用戶名,狀態等;
SessionManager--管理所有與伺服器之間的連接;
伺服器端接收客戶端消息處理流程:
2.Android端:
NotificationService類--後台運行並響應來自伺服器的事件推送通知服務;
ServiceManager類--載入客戶端中的配置信息,並管理NotifactionService服務的啟動與關閉;
XmppManager類--管理客戶端和伺服器之間的連接,向伺服器發送連接、注冊、登陸請求任務;
NotificationDetailsActivity --用於終端接收到的通知詳細視圖顯示;
NotificationIQ--通知實體;
NotificationIQProvider--一個xml的處理類,負責把一個xml結構的消息內容轉換成一個NotificationIQ通知實體對象;
NotificationPacketListener---接收從伺服器端推送過來的Packet;
NotificationSettingsActivity--設置信息;
NotificationReceiver--推送通知消息的廣播接收器;
PersistentConnectionListener--監控客戶端與伺服器之間的連接關閉和重新連接事件;
PhoneStateChangeListener--監聽手機狀態;
ConnectivityReceiver--網路變化廣播接收器;
PacketReader--從MINA中讀取推送過來的信息;
PacketWriter--向MINA中寫入回執信息;
接收消息處理流程:
PacketReader
init():
readerThread = new Thread() {
public void run() {
parsePackets(this);
}
};
-》parsePackets
-》processPacket
-》NotificationPacketListener
-》NotificationIQProvider
-》NotificatioIQ
-》Intent
-》發送回執、發出接收到消息的廣播
-》點擊消息的時候,再次給服務端發送一個查看請求,修改伺服器中消息的狀態;
如果服務端發送一個message類型的消息到客戶端後,客戶端是無法處理的。
也就是說客戶端可以發送不同類型的消息到服務端,但是卻不能處理服務端發回的除IQ認證消息以外的其他類型的消息。
如果需要擴展,需要在NotificationPacketListener類中加入處理邏輯,並提供相應的Provider、消息實體及後續處理邏輯。
❾ 求助,開發android客戶端如何搭建伺服器用自己的電腦當伺服器,java,tomcat,mysql.能提供份源碼嗎
android 可以在客戶端用 HttpURLConnection 連接伺服器,數據可以通過json
❿ android 編譯伺服器大概需要什麼配置 5
工欲善其事,必先利其器」,要想提高團隊整體的開發效率,盡可能的提前完成開發任務,必須要配備一套配置給力的開發設備。源碼編譯伺服器硬體配置的高低,直接影響著系統固件升級和ROM版本發布的速度和效率。
由於目前Google發布的最新版本的Android系統源碼體積越來越大,因此,越是定製高版本的系統,對編譯伺服器的硬體配置要求就越高,這里根據調研,給出目前Android
6.0及以下版本源碼定製開發的基本配置,供大家參考。
首先進行一波企業級android源碼編譯伺服器的推薦,這類推薦網上絕無僅有,這還是我進行了很久的調研,詢問很多朋友【其中包括不乏6年以上系統開發的大牛,也有之前公司的主管等】,也查了很多資料才挑選出來,提出需求後讓上級審批,目前上一級已經認可比審批,等待領導簽字。給力。
詳細