Firefox GeckoView로 WebView 변경 방법

개요

Android System WebView는 Chromium 기반으로 어플리케이션에서 사용되는 WebView의 실제 구현을 담당하고 있습니다.
서드파티 어플리케이션 개발자가 임의로 WebView 구현체를 바꿀 없기 때문에 개발자는 꽤 복잡한 과정을 통해 구현체를 변경 가능합니다. (Bromite 같은 서드파티 구현체들이 있음) 그럼 왜 Firefox GeckoView 변경을 고려하게 되는 것 일까요? 

기본 System WebView는 주기적으로 자동 업데이트되는데, 가끔 업데이트가 예상치 못한 버그가 발생하기 때문입니다. 유명한 사례로 몇 달전 한국 안드로이드 어플리케이션들이 단체로 작동되지 않았던 적이 있었는데 문제의 주역은 System WebView 였습니다. 그리고 서드파티 어플리케이션 개발자 입장에서 웹 페이지를 표시하고 싶지만 WebView를 쓰고 싶지 않는 경우가 있을 수 있습니다. (위와 같은 업데이트 문제, 브라우저 버전을 고정하고 싶은 경우 등) 이 중 적절한 후보중 하나가 이번에 설명할 GeckoView입니다.


 

모질라는 다음과 같은 경우 GeckoView 사용을 추천

  1. 브라우저 앱을 만드는 경우
  2. Web API 접근이 보장되어야 하는 웹앱
  3. 웹 기술을 사용한 게임 앱

 

GeckoView

GeckoView는 모질라가 만든 안드로이드 경량 브라우저입니다. 실제로 안드로이드 몇몇 파이어폭스앱에서 사용중입니다. GeckoView의 큰 특징 중 하나는 데스크탑 파이어폭스의 꽤 많은 기능을 지원하면서 동시에 Browser Extension도 지원한다는 점입니다. 그래서 안드로이드 파이어폭스 브라우저는 자체 Browser Extension을 지원하고 있습니다. GeckoView는 오픈소스이고 서드파티 어플리케이션 개발자들도 프로덕션 앱에 쓸 수 있습니다. 추가시 어플리케이션 용량에 약 30~100 메가정도를 추가하므로 경우에 따라 정말로 필요한지 심사숙고 할 필요가 있습니다.

 

GeckoView 설치 및 웹페이지 띄우기

1. 다음과 같이 GeckoView 의존성을 gradle에 추가

maven {
    url "https://maven.mozilla.org/maven2/"
}

implementation "org.mozilla.geckoview:geckoview:${geckoview_version}"

 

2. layout xml에서 WebView가 있던 자리를 GeckoView로 대체

<org.mozilla.geckoview.GeckoView
        android:id="@+id/geckoview"
        android:layout_width="match_parent" 
        android:layout_height="match_parent"/>

 

3. Activity에서 GeckoView를 얻어오기

val geckoView = findViewById(R.id.geckoview)

 

4. Gecko 엔진의 모든 상태를 관리하는 GeckoRuntime , 브라우저의 탭 하나에 대응하는 GeckoSession을 하나씩 초기화

val runtime = GeckoRuntime.create(this)
val session = GeckoSession()

 

5. GeckoSession을 런타임에 연결

geckoSession.open(runtime)

 

6. GeckoSession을 GeckoView에 등록

geckoView.setSession(geckoSession)

 

7. 마지막으로 GeckoSession에서 url을 로드

geckoSession.loadUri("https://example.com")

 

 

 

  • share