inblog logo
|
vosw1
    Flutter

    Flutter와 네이티브 간의 통신: 플랫폼 채널

    송민경's avatar
    송민경
    Apr 21, 2024
    Flutter와 네이티브 간의 통신: 플랫폼 채널
    Contents
    Method Channel → Platform Channels

    플러터에서 카메라를 제어하려면 자바의 네이티브 코드를 사용해야 함
    세상을 그림을 그리려면 3가지가 필요함
    x,y,color / 1차원배열
    카메라가 0.025초마다 2차원 배열을 카메라에 던져야 함
    카메라는 받아서 램이 있으면 램에 저장하고 아니면 레지스터에 저장해야함
    저장된 데이터를 가지고 연산을 함
    lcd같은 화면으로 외부에있는 데이터를 컴퓨터가 이해할 수 있는 숫자같은걸로 변환하고
    lcd가 화면에 던져서 표현하는 것
    일꾼의 입장에서
    카메라는 입력장치
    lcd는 출력장치
    하드가 있으면 갑자기 카메라가 꺼져도 데이터가 영구히 저장됨
    일꾼이 카메라를 건드릴때 카메라도 입력포트와 출력포트가 있음
    그걸 건드리기 위해 기계어를 써야 함
    일꾼도 건드리려면 기계어를 써야 함
    그러기 너무 어려움 그래서 직접 건드리는 것이 아니라 os가 필요함
    그래서 os가 무조건 들어가는 것
    직접 건드리는 것은 내가 관리하는 방의 갯수가 10억개 있음
    예약들어오면 일일히 관리하기 어려움
    어느방이 나갔는지 확인하기 위해 풀스캔해야함
    외부에서 누가 들어올때마다 비어있는 방을 스캔해서 찾아야하는데 찾기 힘듦
    os가 어느방이 남아있는지 다 찾아줌
    입력을 일꾼이 받고 출력만 하면 되는데 다이렉트로 건드리는게 임베디듣 개발자들임
    그때도 방의 갯수가 무조건 작아야 함
    3비트는 방이 8개니까 관리할 수 있음
    8비트도 방이 256개니까 관리 가능함
    32비트는 방이 42억9천개라 관리하기 힘듦
    16비트도 6만5천개라 관리하기 힘듦
    비트가 높을 수록 os없이는 방이 너무 많아서 관리하기가 불가능함
     
    자바에서 안드로이드를 사용할때의 HW는 64비트임
    내가 직접 건드릴 수 없어서 안드로이드라는 OS가 있는 것
    하드웨어에는 LCD와 카메라, GPS, 마이크, 스피커, 자이로센서 등이 많이 붙어있음
    자이로센서, 카메라, 마이크, GPS는 입력
    LCD, 스피커 출력
     
    우리는 자바언어로 안드로이드 OS에 요청
    안드로이드는 중개인의 역할을 함
    안드로이드를 구글에서 만들었음
    구글에서는 자바언어로 안드로이드에 요청하기 위해 안드로이드에 라이브러리로 다 만들어 놓음
    원래 마이크 하나도 회사가 다 다르고 회사마다 하드웨어를 건드리는 방법이 다 다름
    그래서 우리에게 라이브러리를 제공해줌
    예를 들어 SDK 내부에
    자바언어로 어떤 클래스에 어떤 메서드를 때리면 카메라 데이터를 받아줄께
     
    메서드에 필요한 매개변수와 결과 값, 계속 되는지, 한번만 되는지 확인이 필요함
    사진은 리턴 한번만 하면 됨
    사진을 계속 주려면 리턴이 계속되어야 함
    레일드? : 버퍼가 종료될때까지 계속 리턴해주는 것도 있음
     
    HTTP로 통신할때
    메세지를 계속 보내면 계속 받음 와일을 돌리면서 계속 리턴해줌

    플러터로 하면 구조가 달라짐!
     
    플러터에 호출 → 자바 : 클래스의 메서드를 때림 → OS를 때림 → HW를 때림
    플러터도 구글이 만들었음
    카메라가 업데이트되면 구글에서 라이브러리를 개발해놓음
    그 기능을 클래스라고 한다면 자바가 카메라 클래스를 가지고 있고 많은 메서드들이 들어있음
    플러터에서도 클래스의 메서드를 때리는게 필요함
    하지만 같은 회사에서 만들어지기 때문에 새로운 기능에 대한 라이브러리를 안드로이드와 플러터 둘다 만들어줌 같이 만들어줘서 사용할 수 있음
    우리는 플러터 클래스의 어떤 메서드를 때림 → 자바 클래스의 어떤 메서드를 때림 → OS 때림 → HW의 카메라를 때림 → 역순으로 리턴해줌
     
    플러터와 자바간의 프로세스 통신이 일어남 = 플러터에서 메소드 채널을 제공해줌
    통신 방법 : HTTP 통신, 소켓 통신, 프로세스간 통신
    → 다른 프로세스의 메서드를 OS를 통해서 때림
     
    만약 카메라가 들고있는 메서드가 1개밖에 없고 사진을 찍어서 한장만 리턴해줌
    연사를 하게 하고 싶을 때 우리는 만들 수 없음
    하드웨어를 건드려야하기 때문에 클래스를 만들어야되고 이건 삼성이나 안드로이드 회사, 구글에서 제공해줘야 함
    인터페이스로 제공해주는 메서드가 아니면 못때림
    우리가 만든 기계가 아니기때문에 인터페이스로 만들어져있기에 걔네가 만들어줄때까지 기다려야함
    자바에는 있는데 플러터가 없다면? 하나의 클래스를 임의로 만들어서 메서드로 때리면 됨
    펍뎃가서 라이브러리를 찾아야함

    Method Channel → Platform Channels

    • 일반적으로 네이티브 코드와 플러터 코드 간의 통신을 위한 메커니즘
    • 플러터와 네이티브 코드(C, Java, Kotlin 등) 간의 통합을 가능
    플러터의 특정 메소드를 호출, 반대로 플러터 코드에서 네이티브 메소드를 호출 가능
     
    • 플러터와 네이티브 코드 간의 통신이 이루어짐
    • 플러터 앱은 네이티브 코드에 요청
    • 네이티브 코드는 해당 요청을 처리하고 결과를 다시 플러터로 반환
     
    • Platform Channels를 설정 단계
      • 네이티브 코드를 작성
      • 플러터 메소드를 호출하거나 플러터에서 네이티브 메소드를 호출
      • 메시지 채널을 사용하여 플러터와 네이티브 코드 간의 통신을 설정
      • 플러터 : MethodChannel을 사용
        네이티브 : 플러터 코드의 요청을 처리하고 결과를 반환하는 코드를 작성
      • 플러터 앱과 네이티브 모듈 간의 통신을 테스트하고 필요한 경우 디버깅
    [Flutter] Flutter Method Channel
    플러터를 사용해 앱을 개발하다보면 네이티브 기능을 호출할 수 없는 경우가 찾아오게 된다.이 때, 두가지 선택지를 고를 수 있는데 하나는 pub.dev에서 원하는 기능에 해당하는 서드파티 패키지를 찾아 활용하는 방법이고, 다른 하나는 오늘 소개할 MethodChannel
    [Flutter] Flutter Method Channel
    https://velog.io/@sunwonsw95/Flutter-Flutter-Method-Channel
    [Flutter] Flutter Method Channel
     
     
     
    Share article
    Contents
    Method Channel → Platform Channels

    vosw1

    RSS·Powered by Inblog