當前位置:首頁 » 安卓系統 » nettyandroid

nettyandroid

發布時間: 2024-07-25 14:57:52

① Qt C++與Android Netty之間傳輸位元組碼問題

1 技術棧結構

服務端是qt c++寫的,客戶端是android移動設備,程序語言為java

2 技術流

android端連接伺服器,之間的通訊協議用protobuf,傳輸的是位元組碼流。qt :QByteArray; Java : byte[]數組

3 發送數據

Qt:

QTcpSocket conn;

QByteArray ba;

conn.write(ba.data(), ba.length());

Android:

Bootstrap bootstrap =new Bootstrap();

bootstrap.group(group).channel(NioSocketChannel.class)

.option(ChannelOption.TCP_NODELAY,true)

.handler(new ChannelInitializer() {

@Override

                protected void initChannel(SocketChannel ch)throws Exception {

ch.pipeline()

.addLast(new ByteArrayEncoder())//這個很關鍵

.addLast(new ByteArrayDecoder())//這個很關鍵

.addLast(new NettyHandler(new NettyHandler.HandlerCallback() {

@Override

                                public void onError() {

if(mListener !=null){

mListener.onError(ERROR_RECV);

}

}

@Override

                                public void onDataRecv(byte[] data) {

if(mListener !=null){

mListener.onRecvData(data);

}

}

}));

}

});

mChannelFuture =bootstrap.connect(host, port)

.addListener(future -> {

boolean isSuccess = future.isSuccess();

if(isSuccess ==true){

if(mListener !=null){

mListener.onConnectSuccess();

}

}else{

if(mListener !=null){

mListener.onConnectFail();

}

}

})

.sync();

}catch (Exception e){

e.printStackTrace();

group.shutdownGracefully();

if(mListener !=null){

mListener.onError(ERROR_CONNECT);

}

}

② 如何編譯 netty 源碼並導入android studio

2-1基礎准備工作首先你得安裝配置了AndroidStudio,具體不明白的參考《AndroidStudio入門到精通》。接著你得下載好了源碼Code,至於如何下載這里不再說明,比較簡單,上官網查看就行了。其次你需要保證源碼已經被編譯生成了out相關目錄文件。好了,如上就是一些基本准備工作,針對定製源碼或者原生源碼來說,這些准備步驟都是必須的,沒必要再強調了。2-2配置導入及使用2-2-1編譯源碼idegen模塊及生成AS配置文件(*.ipr)在開始編譯idegen模塊前,你一定知道需要先全局編譯出out目錄及相關文件吧,這個不再過多說了,我們通過如下命令編譯idegen模塊:mmmdevelopment/tools/idegen/11這行命令的意思是編譯idegen這個模塊項目,然後生成idegen.jar文件(不信你自己去查看這個模塊的Android.mk的目標吧,不多解釋)。運行完以後如果看到如下信息則說明編譯OK:####makecompletedsuccessfully(7seconds)####1212接著執行如下腳本:development/tools/idegen/idegen.sh11這行命令的意思是在根目錄生成對應的android.ipr、android.imlIEDA工程配置文件。等待片刻得到類似如下信息說明OK:Readexcludes:21msTraversedtree:194799ms1212通過如上操作我們就完成了基本的源碼配置工作。2-2-2導入AndroidStudio前的一些客戶化操作大家都知道使用Eclipse倒入源碼很慢,AndroidStudio導入源碼時也慢,所以建議修改android.iml文件(將自己不用的代碼去掉),然後再導入Studio。

③ android 支持netty嗎

這個是支持的。
什麼是netty,有興趣的朋友可以google一下netty,可以知道這東東做什麼用,當然你也可以選擇mina,一樣的都是java nio框架.
選擇netty是支持protobuf(google內部使用頻率比較高的,之前的android源碼中內含有這一部分的代碼)協議,這樣可以解決網路編程中粘包(也可以理解成傳輸過程中長度的問題,有興趣可以看相關文章).

④ 如何編譯 netty 源碼並導入android studio

一、修改Android Studio(以下簡稱AS)的內存配置

因為在導入源碼時需要消耗大量內存,所以先修改IDEA_HOME/bin/studio.vmoptions中-Xms和-Xmx的值。文檔中使用的是748m, 可自行修改。

二、配置AS的JDK、SDK

在IDE中添加一個沒有classpath的JDK, 這樣可以確保使用源碼里的庫文件

並將其作為要使用的SDK的Java SDK。

三、生成導入AS所需配置文件(*.ipr)

①編譯源碼(為了確保生成了.java文件,如R.java;如果編譯過,則無需再次編譯)

②檢查out/host/linux-x86/framework/目錄下是否有idegen.jar

如果idegen.jar不存在,執行:

mmm development/tools/idegen/
在5.0.1的源碼中會生成res.java的文件夾,導致idegen.jar運行時拋FileNotFoundException,這是idegen的代碼不夠嚴謹造成的。

我的分享里有修改這個bug的patch,或者直接使用我分享的idegen.jar。

③執行

development/tools/idegen/idegen.sh
等待出現類似下面的結果:

Read excludes: 5ms
Traversed tree: 44078ms
這時會在源碼的根目錄下生成android.ipr和android.iml兩個IntelliJ IDEA(AS是基於IntelliJ IDEA社區版開發的)的配置文件

熱點內容
銀行卡輸入密碼超限怎麼辦 發布:2024-11-25 21:09:07 瀏覽:957
編譯指令多發 發布:2024-11-25 20:58:17 瀏覽:750
java上傳文件到伺服器 發布:2024-11-25 20:52:47 瀏覽:740
軸加工編程 發布:2024-11-25 20:52:12 瀏覽:411
手機的媒體存儲 發布:2024-11-25 20:29:42 瀏覽:264
安卓如何關閉手機桌面 發布:2024-11-25 20:24:37 瀏覽:700
腳本也違法嗎 發布:2024-11-25 20:24:24 瀏覽:304
phpeol 發布:2024-11-25 20:16:01 瀏覽:93
您所訪問的頁面升級 發布:2024-11-25 20:00:56 瀏覽:597
快手編程師 發布:2024-11-25 20:00:55 瀏覽:148