금융 앱, 메신저, 인증 서비스처럼 민감한 정보를 다루는 애플리케이션에서는 사용자가 화면을 캡처하거나 최근 앱 목록에 화면 내용이 노출되는 것을 원치 않는 경우가 많습니다. 이 글에서는 안드로이드에서 FLAG_SECURE 윈도우 플래그를 사용해 앱 화면의 스크린샷 촬영과 녹화를 차단하는 방법을 단계별로 소개합니다.
FLAG_SECURE란 무엇인가?
WindowManager.LayoutParams.FLAG_SECURE는 해당 윈도우(액티비티)의 화면을 '보안 화면'으로 취급하도록 시스템에 알려주는 플래그입니다. 이 플래그가 설정되면 다음과 같은 효과가 있습니다.
- 스크린샷 버튼을 눌러도 검은 화면만 저장됩니다.
- 화면 녹화 시에도 해당 액티비티 영역은 빈 화면으로 기록됩니다.
- 최근 앱(Recents) 화면에서 앱 미리보기가 가려집니다.
구현 단계
1단계 — 새 프로젝트 만들기
Android Studio에서 File → New Project를 선택하고 필요한 정보를 입력해 새 프로젝트를 생성합니다.
2단계 — 레이아웃 작성(res/layout/activity_main.xml)
아래와 같이 샘플용 TextView 하나가 있는 간단한 레이아웃을 구성합니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/parent"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/openYoutube"
android:text="Open youtube application"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
3단계 — MainActivity.java 코드 추가
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_main);
}
}
핵심 코드 살펴보기
위 코드의 핵심은 onCreate()에서 setContentView()를 호출하기 전에 아래 한 줄을 추가하는 것입니다.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
setFlags()에 같은 플래그를 두 번 전달하는 이유는, 첫 번째 매개변수가 설정할 플래그 값이고 두 번째 매개변수가 변경 대상이 되는 플래그 마스크이기 때문입니다. 즉, FLAG_SECURE 비트만 활성화하겠다는 의미입니다.
참고: 위 예제는 예전 Support Library(android.support.*)를 사용합니다. 최신 Android Studio 프로젝트라면 import 문을 androidx.appcompat.app.AppCompatActivity로 교체하세요. 또한 FLAG_SECURE는 API 1부터 제공되므로 별도의 버전 분기 처리 없이 어느 기기에서든 사용할 수 있습니다.
앱 실행 및 결과 확인
실제 안드로이드 기기를 컴퓨터에 연결한 상태에서 Android Studio 상단의 Run 버튼을 클릭하고, 대상 기기를 선택해 앱을 실행합니다. 앱이 시작되면 아래와 같은 기본 화면이 표시됩니다.

이제 기기의 스크린샷 버튼(일반적으로 전원 + 볼륨 다운)을 눌러 캡처를 시도해 보세요. 캡처는 정상적으로 수행되지만, 갤러리에서 이미지를 열어보면 아래처럼 완전히 검은 화면만 저장된 것을 확인할 수 있습니다.
이처럼 FLAG_SECURE 플래그 한 줄만으로 결제 화면, 개인정보 페이지 등 민감한 화면을 손쉽게 보호할 수 있습니다. 다만 이 설정은 해당 액티비티 전체에 적용되므로, 실제 서비스에서는 필요한 화면에만 선택적으로 적용하는 것이 좋습니다.