Android 에서 protobuf 를 사용 하 는 구체 적 인 예제
Google Protocol Buffers 는 Protobuf 라 고 부 르 는데 json 이나 XML 과 유사 하 며 직렬 화 된 구조 데이터 의 메커니즘 이지 만 그것들 보다 더 작고 빠 르 며 간단 하 다.다 중 언어,크로스 플랫폼 도 지원 합 니 다.
현재 주로 두 가지 큰 버 전이 있 는데 그것 이 바로 proto 2 와 proto 3 이다.
그 중에서 proto 2 는 자바,Python,Objective-C,C++를 지원 합 니 다.
proto 3 는 Go,JavaNano,Ruby,C\#에 대한 지원 을 추가 했다.
proto 예
syntax = "proto3";
package tutorial;
import "google/protobuf/timestamp.proto";
option java_package = "com.katyusha.aron.demo";
option java_outer_classname = "AddressBookProtos";
message Person {
string name = 1;
int32 id = 2;
string email = 3;
enum PhoneType{
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}
Protobuf 는.proto 파일 을 사용 하여 데이터 형식 을 정의 하고 컴 파일 러 를 제공 하여 이 파일 들 을 각종 언어의 소스 코드 로 컴 파일 합 니 다.message 형식 은 매우 간단 합 니 다.각 유형의 message 는 하나 이상 의 유일한 인 코딩 필드 를 포함 하고 있 으 며,각 필드 는 이름과 값 형식 으로 구성 되 어 있 으 며,값 유형 은 숫자(성형 또는 부동 소수점 형),불 값,문자열,원시 바이트,심지어 다른 message(상기 참조)일 수 있 습 니 다.Protobuf 는 메시지 에 message 를 포함 하여 레이 어 링 을 허용 합 니 다.
주의해 야 할 것 은 모든 속성 에 유일한 tag 가 있 습 니 다.위의 0,1,2...등 이 tag 들 은 매우 중요 합 니 다.Prodobuf 인 코딩 을 할 때 사용 하 는 모든 속성 에 대한 유일한 식별 자―Prodobuf 는 속성 명(name,id,email...)을 사용 하지 않 습 니 다.따라서 하나의 message 를 정의 한 후에 원칙적으로 모든 속성의 tag 를 수정 해 서 는 안 됩 니 다.수정 하면 새로운 오래된 데이터 버 전의 해석 에 오류 가 발생 할 수 있 기 때 문 입 니 다.
키워드
syntax:성명 버 전.예 를 들 어 위의 syntax="proto 3"은 성명 이 없 으 면 기본적으로 proto 2 입 니 다패키지:성명 패키지 명
Android 에서 의 사용
먼저 프로 토 콜 이 안 드 로 이 드 에서 사용 하 는 프로 세 스 를 살 펴 보 겠 습 니 다.
먼저 proto 파일 을 만 듭 니 다.이 파일 은 사용 할 데이터 형식 을 정의 합 니 다.
proto 파일 을 통 해 proto 자바 class 를 컴 파일 하여 생 성 합 니 다.생 성 된 클래스 에는 당신 이 필요 로 하 는 getter/setter 가 포함 되 어 있 습 니 다.이 자바 class 는 우리 가 평소에 사용 하 는 자바 bean 과 유사 하지만 다른 기능 함수 도 많이 포함 되 어 있 습 니 다.안 드 로 이 드 에서 우 리 는 Gradle Plugin for Protobuf 를 통합 하여 proto 파일 을 컴 파일 할 수 있 습 니 다.
Android Studio 설정
프로젝트 루트 의 gradle 파일 에 다음 과 같은 내용 을 추가 합 니 다.
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
}
}
app module 의 gradle 파일 에서:1.apply plugin:'com.android.application'에 apply plugin:'com.google.protobuf'를 추가 합 니 다.
2,protobuf 블록 추가(android 와 동급):
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.5.1' //
}
generateProtoTasks {
all().each { task ->
task.builtins {
remove java
}
task.builtins {
java {}// java
}
}
}
}
3,.proto 파일 의 경 로 를 지정 합 니 다:
sourceSets {
main {
java {
srcDir 'src/main/java'
}
proto {
srcDir 'src/main/proto' // .proto
}
}
}
4,의존 도 추가:
api 'com.google.protobuf:protobuf-java:3.5.1'
api 'com.google.protobuf:protoc:3.5.1'
여기까지 안 드 로 이 드 gradle 환경 이 설정 되 었 습 니 다.이 때 프로젝트 를 컴 파일 할 수 있 습 니 다.proto 자바 class 가 생 성 됩 니 다.이 종 류 는 바로 우리 app 뒤에 사용 할 것 입 니 다.코드 예제
proto 파일 정의:
syntax = "proto3";
package tutorial;
message Person {
string name = 1;
int32 id = 2;
string email = 3;
string phone = 4;
}
네트워크 를 통 해 데이터 흐름 을 가 져 온 다음 proto 파일 정의 형식 으로 해석 합 니 다.
Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
Response response = call.execute();
if (response.isSuccessful()) {
ResponseBody responseBody = response.body();
if (responseBody != null) {
return Person.parseFrom(responseBody.byteStream());
}
}
Person 실체 클래스 가 있 으 면 인터페이스 에서 표시 할 수 있 습 니 다.
textView.setText(person.toString());
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.