protobufandroid
1. 目前的pomelo android client api支持protobuf壓縮和route壓縮么
pomelo這次在數據壓縮和網路協議上做多優化。其中的protobuf壓縮解決方案比npm上其它mole都要好, 在配置上做到極簡, 無需生成任何代理對象。
這是通用的數據壓縮mole, 任何項目都可以使用。
#Pomleo 數據壓縮協議
在pomelo 0.3中,為了減少數據傳輸帶寬,提高傳輸效率,我們支持了基於字典的route壓縮和基於protobuf的傳輸數據壓縮。
##基於字典的route壓縮
2. android studio怎麼編譯proto
方案是:
1、在build.gradle中增加
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile group:'com.google.protobuf',name:'protobuf-java',version:'2.5.0'
//這個是關鍵的一句話,對於這個version是從你的本地maven存放的目錄, 進入到 \.m2\repository\com\google\protobuf\protobuf-java目錄下,看到的那個數字文件夾的名字,就是你的version,
3. android中怎麼利用protobuf協議進行與伺服器間的數據傳輸
1. 從http://maven.apache.org/download.cgi下載apache-maven-3.3.9-bin.zip,解壓至D:\AndroidDevelop目錄。
配置環境變數:
MAVEN_HOME:D:\AndroidDevelop\apache-maven-3.3.9;
Path=%MAVEN_HOME%bin;
2.從https://github.com/google/protobuf/releases下載protobuf-Java-3.1.0.zip,protoc-3.1.0-win32.zip。
將protobuf-java-3.1.0.zip解壓至D:\AndroidDevelop目錄,將protoc-3.1.0-win32.zip中的protoc.exe解壓至D:\AndroidDevelop\protobuf-3.1.0\src目錄,並復制到D:\AndroidDevelop\protobuf-3.1.0\java目錄,打開命令行cd到此目錄,執行protoc --java_out=../src/java -I ../src/google/protobuf/descriptor.proto,
4. 如何對 protobuf-lite編程,c++ android
protocol buffer編譯器生成 Foo 類,公開地(publicly)派生自 google::protobuf::Message。Foo類是一個實體類;禁止遺留下純虛的方法沒有被實現。除了 Message 中的虛方法之外,非純虛的方法可以由 Foo 類重載也可以不重載,取決於優化模式。預設,為了最高的速度, Foo 實現特定protocol buffer版本的所有方法。不管怎樣,如果 .proto 文件包含下列行:
1 option optimize_for = CODE_SIZE;
Foo 將僅重載運行必需的最小方法集合,和依賴於基於反射實現的剩餘部分。這意味著減小了生成代碼的大小,但也減小了性能。或者,如果 .proto 文件包含:
1 option optimize_for = LITE_RUNTIME;
Foo 將包含所有方法的快速實現(fast implementations),但是是實現 google::protobuf::MessageLite 介面,僅包含 Message 中所有方法的一個子集。尤其,它不支持描述符(descriptors)或反射。不管怎樣,以這種方式生成的代碼只需要連接 libprotobuf-lite.so (Windows上是 libprotobuf-lite.lib) 而不是 libprotobuf.so(libprotobuf.lib)。"lite"庫比 "full"庫(完整的庫)要小很多,更適用於資源受限的系統,比如手機。
你不應該創建 Foo 的子類。如果你子類化 Foo ,並且重載虛方法,重載可能被忽略,就像很多生成的方法為了提高性能被去虛擬化(de-virtualized)。
5. android 使用protocol buffer 需要後台支持嗎
在網上查了一下,雖然有很多文章介紹Protocol Buffer,但是實際使用起來,還是會遇到很多問題,所以我想應該有一個指南一樣的東西,讓新手很快就能使用它。
Protocol Buffer簡寫為Protobuf,是Google開發的一種儲存數據的方式,功能與XML一樣,但更方便,數據量更小,速度更快,在序列化和反序列化的時候使用,有很大的優勢。比如,網路游戲的通訊協議編寫。更重要的是,它是一個開源項目。
由於Protobuf不能生成C#代碼,所以就要用到另外一個開源項目protobuf-net,
用法是,在命令行用protoc.exe依據你自己定義的.proto文件,來生成.cpp文件
用protobuf-net的protogen.exe來生成.cs文件,可以寫一個批處理,如下:
protoc -I=. --cpp_out=. Net.proto //在當前目錄下,以cpp方式編譯Net.proto
protogen -i:Net.proto -o:Net.cs //在當前目錄下,用Net.proto生成Net.cs
其實兩句功能是一樣,只是分別生成了Net.proto的cpp文件和cs文件,這樣就可以在兩種語言編寫的應用程序間通信了。
6. android 怎麼使用protobuf庫
protobuf庫作為數據傳輸,跨平台跨語言非常實用,在windows下,首先要編寫.proto文件
package CMD;
enum COMMAND
{
//登錄
CMD_USER_LOGIN_REQ = 0x1000;
CMD_USER_LOGIN_RSP = 0x1001;
}
在cmd下 定位到protobuf的安裝位置,然後編譯 編譯後的文件在CMD目錄下,名稱是Command.java
7. android 怎麼使用protobuf庫
一、 下載protobuf-net 及配置
下載之後解壓到你的硬碟的某個目錄 , 最好是將 Precompile\precompile.exe 以及 ProtoGen\protogen.exe 兩個文件加入到環境變數中 , 之後方便使用。
我們還需要CoreOnly\ios中的三個文件,之後會用到,而且最終會放到unity工程下。
二、生成cs代碼
使用protogen 命令行來生成代碼 (precompile以及protogen都只能在windows下運行,在mac上可能可以通過mono來運行這個exe,但是沒有試過。)
使用例子如下:
protogen -i:Test1.proto -i:Test2.proto -i:Test3.proto -o:Output.cs -ns:com.fbmly.model
-i 是輸入文件,可以有多個
-o 輸出的cs文件, 只能有一個..如果-i有多個 會將所有的代碼生成到這一個cs文件當中
-ns 命名空間 最好使用,如果不使用每次生成的默認命名空間是proto的文件名。
通常來說 只要把所有的數據結構生成到一個cs就行了(要不然使用多個-i , 要不就把所有protobuf定義寫在一個proto文件中),這樣之後之後操作比較方便一些。
經過這一步你就得到了生成之後的cs文件。
三、編譯dll庫
使用MonoDevelop工具 將上一步生成的cs文件編譯成dll庫.
1.創建一個新的工程 (File->New->Solution)
2.在彈出的對話框中選擇 C# 再選擇 Library.
3.在下方填寫好工程的名字 (這個名字是生成dll的名字,所以要起好)
4.點擊forward (之後還要點一次ok)
5.刪掉默認生成的MyClass.cs文件,有必要的話在AssemblyInfo.cs里填寫一些版權信息。
6.將上一步用protogen生成的cs文件 加入到工程 (在左邊工程名 上右鍵 就可以添加)
7.添加protobuf-net引用庫
點擊工程的References->Edit References
然後選擇剛才的CoreOnly\ios下的dll庫 , 雙擊庫文件就可以加到右邊
最後檢查下References裡面如果有protobuf-net.dll就正確了。
8.都做好後, 點擊Build->Build All就可以在當前工程生成dll了
不要忘記 debug 和 release的選擇 ,測試完後應該重新拿release再編譯一次的。
9. 左下角提示成功 就 會在當前工程目錄下生成dll文件了 (我這里是 TestModel.dll)
這個dll存放的是你所有的數據結構。
四、預編譯序列化庫
上一步生成了數據的dll文件,這一步需要用到上一步的dll文件來生成專門序列化的dll文件。
首先要保證TestModel.dll和編譯時所使用的庫在同一目錄 ( 上一步生成的dll文件目錄,會自動把protobuf-net庫文件也復制過來 , 所以只需要記住這一點就行了。 比如你要是復制到其他目錄進行操作, 這點會很重要 )
然後打開命令行, 定位到dll工程目錄下的bin\Debug 或 bin\Release目錄
然後執行以下命令(修改成你所設置的名字):
precompile TestModel.dll -o:ProtobufSerializer.dll -t:com.fbmly.ProtobufSerializer
TestModel.dll就是上一步生成的dll文件,-o是生成的文件名 -t是在ProtobufSerialize.dll中所生成的序列化類的類名 支持命名空間,不用命名空間就直接寫類名就可以了。
如果最後有 All Done 提示, 就代表生成成功了。
D:\protobuf-net\Precompile\Model>precompile TestModel.dll -o:ProtobufSerializer.
dll -t:com.fbmly.ProtobufSerializer
protobuf-net pre-compiler
Detected framework: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Resolved C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll
Resolved C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll
Resolved protobuf-net.dll
Adding Fbmly1.Fbmly...
Compiling com.fbmly.ProtobufSerializer to ProtobufSerializer.dll...
All done