profile image

L o a d i n g . . .

반응형

안드로이드 9 webView Directory 관련 이슈 및 Crash

Android WebView Error or Crash ~ crbug.com/558377

 

안드로이드 9버전 이상부터는 WebView에서 디렉토리 공유를 금지하였다. 자세한 내용은 안드로이드 디벨로퍼를 이용..

그래서 타겟 버전 혹은 안드로이드 9버전 이상에서 WebView를 사용시 아주 종종 Directory관련 크레쉬가 발생을 한다.

크레쉬의 로그를 확인해 보면 Using WebView from more than one process at once with the same data directory is not supported. crbug.com/558377

이렇게 나오고 있다. 자주 나오는 에러인지, 구글쪽에서도 WebView버그로 인정한 것인지 메시지에 뭔 사이트 주소도 있다.

구글링을 해보면 생각보다 많은 사람들이 겪고 있으며, 해결법 또한 모두가 같은 방법이다.

    private void webViewSetPath() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            String processName = getProcessName(this);
            String packageName = this.getPackageName();
            if (!packageName.equals(processName)) {
                WebView.setDataDirectorySuffix(processName);
            }
        }
    }

    private String getProcessName(Context context) {
        if (context == null) {
            return null;
        }
        ActivityManager manager
                = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == android.os.Process.myPid()) {
                return processInfo.processName;
            }
        }
        return null;
    }

위 코드를 MainActivity 혹은 BaseActivity에 작성 후 onCreate() 부분에서 webViewSetPath()를 호출해주도록 한다.

코드로도 알 수 있지만 조건문에서 걸린다면 강제로 setDataDirectorySuffix()를 사용하여 강제로 접두어(?)접미사(?)를 붙이고 있다. 아직 재현하지 못하였고 실제로 나오는 현상을 보지 못했지만 디버깅을 해보면 일단 작동은 제대로 하는 것 같다.

 

문제는 이렇게 했어도, 계속 크레쉬가 발생하는 사람들도 여럿있고, 실제로 내 주변에도 어떠한 방법을 써도 잡지 못했다고 하는 안드로이드 고수 분이 계신다.

 

구글링을 통해서 여러 게시글들을 보았을 때 위 방법이 구글에서 제시한 해결책 이라고 하는데 (정확하게 확인은 못함)이렇게 해도 안된다면 webView 버그라고 해도 되지 않을까 싶다.

 

이제 타겟팅 버전도 강제로 29이상으로 해야 하니 지금 당장에는 터지지 않더라도 WebView를 사용한다면 혹시 모르니 미리 조치를 하면 좋다고 생각이 든다. 

반응형
복사했습니다!