본문 바로가기

Android/gRPC

[M1/M2] Android gRPC 적용 가이드

728x90

android gRPC 를 사용하기 위해서 아래와 같은 단계를 진행하면서 gRPC 를 적용한다. 이때 Mac M2 Chip 에서 이슈가 있었던 부분을 정리하였다.

1. libs.version.toml 에 android protobuf plugin 버전 등록 및 plugin 적용

protobufPlugin = "0.9.4"
...
protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" }

2. app > gradle kts 에 protobuf plugin 적용하기

plugins {
    alias(libs.plugins.protobuf)
}

protobuf {
    protoc {
        artifact = libs.protobuf.protoc.get().toString()
        // Set the location of generated source code by protoc compiler
        generatedFilesBaseDir = "$projectDir/gen-src"
    }

    plugins {
        create("grpc") {
            artifact = "io.grpc:protoc-gen-grpc-java:1.53.0"
        }
    }

    generateProtoTasks {
        all().forEach { task ->
            task.builtins {
                register("java") {
                    option("lite")
                }
                register("kotlin") {
                    option("lite")
                }
            }
            task.plugins {
                register("grpc") {
                    option("lite")
                }
            }
        }
    }
}

android {
    namespace = "${your_namespace}"

    sourceSets.getByName("main") {
        java.srcDirs("gen-src/main/java", "gen-src/main/grpc")
    }
}

dependencies {
    api(libs.protobuf.kotlin.lite)
}

gRPC 적용 중 발생한 문제 상황

protoc-grpc-gen-java 를 실행하지 못하는 문제

protoc-gen-grpc-java: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--grpc-java_out: protoc-gen-grpc-java: Plugin failed with status code 1.

해결 방법

1. app > gradle kts 에서 protoc 에서 os architecture 에 따라 artifact 를 구분한다. (나의 경우 수정되지 않음)

protobuf {
  protoc {
    if (osdetector.os == "osx") {
      artifact = 'com.google.protobuf:protoc:3.14.0:osx-x86_64'
    } else {
      artifact = 'com.google.protobuf:protoc:3.14.0'
    }
  }
}

 

 

2. maven download 된 grpc java 실행 파일을 직접 수행해 보고 BAD CPU 에러가 발생할 경우 Rosetta update 를 진행한다.(나의 경우 정상 동작 함)

java.io.IOException: Cannot run program "/Users/aweinzettl/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protoc/3.0.0/31a580cdff228f572e27920c0abcfa71cd3d95e4/protoc-3.0.0-osx-x86_64.exe": error=86, Bad CPU type in executable

-> 위와 같이 에러가 발생할 경우 터미널에서...

softwareupdate --install-rosetta --agree-to-license

실행한다.

 

2번 과정 수행 시 gRPC 빌드 시 gRPC Service Stub 생성을 위한 Class 가 정상적으로 나온다.

728x90

'Android > gRPC' 카테고리의 다른 글

Android gRPC Client 구현(2) - Connection  (0) 2021.10.01
Android gRPC Client 구현(1) - gradle 환경 설정  (0) 2021.10.01