在Android中如何使用Protobuf上傳協議

在 Android 中使用 Protobuf(Protocol Buffers)主要分為以下幾個步驟:


? 1. 添加 Protobuf 插件和依賴

在項目的 build.gradle(Project 級)文件中添加 Google 的 Maven 倉庫(通常默認已有):

buildscript {dependencies {classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.4' // 最新版本可查 MavenCentral}
}

在模塊級的 build.gradle(通常是 app/build.gradle)中:

plugins {id 'com.android.application'id 'com.google.protobuf'
}android {// ...
}dependencies {implementation 'com.google.protobuf:protobuf-javalite:3.24.0' // 推薦使用 javalite 版本
}protobuf {protoc {artifact = 'com.google.protobuf:protoc:3.24.0' // 對應版本}generateProtoTasks {all().each { task ->task.builtins {java {option 'lite' // 使用 lite 版本更適合 Android}}}}
}

? 2. 創建 .proto 文件

src/main/proto/ 目錄下創建 .proto 文件,例如:

person.proto

syntax = "proto3";option java_package = "com.example.myapp"; // 替換為你的包名
option java_outer_classname = "PersonProto"; // 生成的外部類名message Person {string name = 1;int32 id = 2;string email = 3;
}

? 3. 編譯生成 Java 類

構建項目(Build > Rebuild Project./gradlew build)后,Gradle 會自動生成 Java 類(在 build/generated/ 目錄下)。

你可以這樣使用:

// 創建對象
PersonProto.Person person = PersonProto.Person.newBuilder().setName("Alice").setId(123).setEmail("alice@example.com").build();// 序列化
byte[] bytes = person.toByteArray();// 反序列化
PersonProto.Person parsed = PersonProto.Person.parseFrom(bytes);

? 4. Protobuf 使用建議(在 Android 中)

  • 推薦使用 protobuf-javalite:因為它是為移動端優化的,體積更小,依賴更少。

  • 避免嵌套太多層次的 message:保持結構簡單,便于維護和性能更好。

  • 可以結合 Room 使用 Protobuf 類型作為字段:需要自定義 TypeConverter。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903090.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android學習總結之ANR問題

一、ANR 基礎概念與核心原理(必考題) 1. 什么是 ANR?為什么會發生 ANR? 答案要點: 定義:ANR(Application Not Responding)即應用無響應,是 Android 系統檢測到主線程&…

視頻監控從安裝到優化的技術指南,視頻匯聚系統EasyCVR智能安防系統構建之道

在當今數字化安防時代,監控系統的安裝與配置對于保障各類場所的安全起著至關重要的作用。從前期規劃到實際安裝,再到后期的功能實現與維護,每一個環節都不容小覷。本文將詳細闡述監控安裝過程中的關鍵要點,并結合EasyCVR平臺功能&…

如何避免IDEA每次打開新項目都重復配置Maven?

每次打開新項目都要重新設置Maven路徑?每次導入工程都要手動調整settings.xml?如果你也受夠了IDEA這種“健忘”行為,那么這篇文章就是為你準備的!今天我們就來徹底解決這個問題,讓IDEA記住你的Maven配置,一…

PostgesSQL外部數據封裝FDW

PostgesSQL外部數據封裝FDW 1. FDW外部數據配置(單表)1.1 遠端數據庫創建測試表1.2 安裝擴展postges\_fdw1.3 創建外部服務SERVER1.4 創建用戶映射USER MAPPING1.5 創建遠程表FOREIGN TABLE1.6 數據庫更新測試 2. FDW外部數據配置(用戶&#…

策略模式(Strategy Pattern)詳解

文章目錄 1. 什么是策略模式?2. 為什么需要策略模式?3. 策略模式的核心概念3.1 策略(Strategy)3.2 具體策略(Concrete Strategy)3.3 上下文(Context) 4. 策略模式的結構5. 策略模式的…

在 Vue3 中封裝的 Axios 實例中,若需要為部分接口提供手動取消請求的功能

核心思路 封裝接口時返回 Promise 和 abort 方法: 為需要支持取消的接口返回一個對象,包含 promise 和 abort 方法,用戶可通過 abort 主動中斷請求。使用 AbortController 或 CancelToken: 推薦 AbortController(瀏覽…

Flink介紹——實時計算核心論文之Dataflow論文詳解

引入 在過去的幾篇文章里,我們看到了大數據的流式處理系統是如何一步一步進化的。從最早出現的S4,到能夠做到“至少一次”處理的Storm,最后是能夠做到“正好一次”數據處理的MillWheel。我們會發現,這些流式處理框架,…

Python自動化解決滑塊驗證碼的最佳實踐

1. 引言:滑塊驗證碼的挑戰與自動化需求 滑塊驗證碼(Slider CAPTCHA)是當前互聯網廣泛使用的反爬機制之一,它要求用戶手動拖動滑塊到指定位置以完成驗證。這種驗證方式可以有效阻止簡單的自動化腳本,但對爬蟲開發者來說…

路由與OSPF學習

【路由是跨網段通訊的必要條件】 路由指的是在網絡中,數據包從源主機傳輸到目的主機的路徑選擇過程。 路由通常涉及以下幾個關鍵元素: 1.路由器:是一種網絡設備,負責將數據包從一個網絡傳輸到另一個網絡。路由器根據路由表來決定…

(done) 吳恩達版提示詞工程 5. 推理 (情緒分類,控制輸出格式,輸出 JSON,集成多個任務,文本主題推斷和索引,主題內容提醒)

url: https://www.bilibili.com/video/BV1Z14y1Z7LJ?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 別人的筆記 url: https://zhuanlan.zhihu.com/p/626966526 5. 推理任務(Inferring) 這個視頻是關于…

MySQL VS SQL Server:優缺點全解析

數據庫選型、企業協作、技術生態、云數據庫 1.1 MySQL優缺點分析 優點 開源免費 社區版完全免費,適合預算有限的企業 允許修改源碼定制功能(需遵守GPL協議) 跨平臺兼容性 支持Windows/Linux/macOS,適配混合環境部署 云服務商…

Pycharm 代理配置

Pycharm 代理配置 文章目錄 Pycharm 代理配置1. 設置系統代理1.1 作用范圍1.2 使用場景1.3 設置步驟 2. 設置 python 運行/調試代理2.1 作用范圍2.2 使用場景2.3 設置步驟 Pycharm 工具作為一款強大的 IDE,其代理配置在實際開發中也是必不可少的,下面介紹…

maven打包時配置多環境參數

1. pom配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

國產三維CAD皇冠CAD在機械及汽車零部件設計建模教程:斜滑動軸承

在線解讀『斜滑動軸承』的三維建模流程&#xff0c;講解布爾運算、旋轉凸臺/基體、異型導向孔、裝飾螺紋線等操作技巧&#xff0c;一起來皇冠CAD&#xff08;CrownCAD&#xff09;直播間學習制作步驟吧&#xff01; 斜滑動軸承憑借其獨特的工作原理和廣泛的應用領域&#xff0c…

linux(操作系統概述和虛擬機的安裝)

1.操作系統 一、主流服務器操作系統 Windows server 市場地位&#xff1a;適合傳統企業&#xff08;主要以中小型企業、金融機構和教育機構為主&#xff09; 核心特點&#xff1a; 企業級功能&#xff1a;活動目錄、組策略、IIS/Web服務器、Exchange郵件服務 易用性&#xff1a…

鴻蒙生態新利器:華為ArkUI-X混合開發框架深度解析

鴻蒙生態新利器&#xff1a;華為ArkUI-X混合開發框架深度解析 作者&#xff1a;王老漢 | 鴻蒙生態開發者 | 2025年4月 &#x1f4e2; 前言&#xff1a;開發者們的新機遇 各位鴻蒙開發者朋友們&#xff0c;是否還在為多平臺開發重復造輪子而苦惱&#xff1f;今天給大家介紹一位…

數據結構初階:二叉樹(四)

概述&#xff1a;本篇博客主要介紹鏈式結構二叉樹的實現。 目錄 1.實現鏈式結構二叉樹 1.1 二叉樹的頭文件&#xff08;tree.h&#xff09; 1.2 創建二叉樹 1.3 前中后序遍歷 1.3.1 遍歷規則 1.3.1.1 前序遍歷代碼實現 1.3.1.2 中序遍歷代碼實現 1.3.1.3 后序遍歷代…

Electron Forge【實戰】桌面應用 —— AI聊天(下)

此為系列教程&#xff0c;需先完成 Electron Forge【實戰】桌面應用 —— AI聊天&#xff08;上&#xff09;Electron Forge【實戰】桌面應用 —— AI聊天&#xff08;中&#xff09; 會話列表按更新時間倒序加載 src/db.ts db.version(1).stores({// 主鍵為id&#xff0c;且…

[架構之美]Ubuntu源碼部署APISIX全流程詳解(含避坑指南)

[架構之美]Ubuntu源碼部署APISIX全流程詳解(含避坑指南) 一、離線安裝場景需求分析 1.1 典型應用場景 金融/政務內網環境生產環境安全合規要求邊緣計算節點部署1.2 離線安裝難點 #mermaid-svg-B25djI0XquaOb1HM {font-family:"trebuchet ms",verdana,arial,sans-s…

多頭注意力(Multi?Head Attention)

1. 多頭注意力&#xff08;Multi?Head Attention&#xff09;原理 設輸入序列表示為矩陣 X ∈ R B L d model X\in\mathbb{R}^{B\times L\times d_{\text{model}}} X∈RBLdmodel?&#xff0c;其中 B B B&#xff1a;批大小&#xff08;batch size&#xff09;&#xff0c…