메인 콘텐츠로 건너뛰세요

Capacitor 앱에서 구글 플레이 오버플로우 25% 이하 해결

Google Play의 25% 이상의 암호화 확인을 통과하는 Capacitor 안드로이드 앱을 만들려면 R8를 활성화하고 사용하지 않는 DEX를 줄이고 릴리스 앱 번들을 배포하세요.

Google Play의 25% 이하의 암호화 확인을 통과하는 Capacitor 앱을 고쳐주세요.

Play 콘솔은 Capacitor 안드로이드 앱을 앱 최적화이 우리의 기준 이하입니다., 종종 obfuscation 어디서부터 시작했는지 3%. 구글은 최소한 25% obfuscation, optimization, 및 shrinking. 시행이 시작되는2027년 2월

, 그리고 실패하면 가시성과 배포 옵션을 줄일 수 있습니다.

Android vitals에서 경고가 나타납니다.

구글 플레이 콘솔 Android vitals 경고가 나타납니다. 3%의 obfuscation, 25%의 앱 최적화 threshold 아래, 2027년 2월의 수정 날짜 Capgo __CAPGO_KEEP_0__

live updates도 이 점수를 변경하지 않습니다. Android Gradle release build에서 수정하고 새로운 App Bundle을 업로드하세요. 구글은 측정하는 것에 대해 무엇입니까?

Google Play는 Android 앱 번들을 검사합니다: 컴파일된 Java 및 Kotlin, __CAPGO_KEEP_0__, 플러그인 및 AndroidX. DEX Android 앱 번들에 포함된 컴파일된 Java 및 Kotlin, Capacitor, 플러그인, AndroidX 포함. 2027년 2월부터 100만 개 이상의 다운로드를 받은 앱은 10MB 모두에 대해 25% 메트릭

이것이 무슨 뜻인가? __CAPGO_KEEP_0__의 일반적인 원인 일반 Capacitor 낮은 점수 원인
가장 낮은 점수 가장 낮은 점수 minifyEnabled 가장 낮은 점수 false
최적화 R8는 바이트코드를 inline, merge, rewrite합니다. 기본 proguard-android.txt 포함 -dontoptimize
축소 사용되지 않는 클래스 및 메서드가 제거됩니다. 리소스 code 압축이 절대 켜지지 않았습니다.

플레이는 r8.json Android Gradle Plugin 8.10 이상 버전으로 빌드할 때 사용됩니다. mapping.txt, then DEX heuristics. A Capacitor app shipped with minification off has almost no mapping file, so Play sees readable names and reports a few percent obfuscation (often leftover from already-obfuscated library AARs). That matches a 3% 공식 정책:

이용 구글 플레이 오류 방지Implementation detail: DEX code optimization 그리고 앱 최적화를 R8로 활성화.

왜 Capacitor 앱이 이 검사를 통과하지 못하는가

The Capacitor Android template still ships release builds 그렇지 R8:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

이는 android-template/app/build.gradle에서 기본 설정이다 android-template/app/build.gradlewithout

Vite 또는 webpack으로 이미 자바스크립트를 압축했으니, 그건 구글 플레이에 포함되지 않습니다. native DEX 이름, 사용되지 않는 native code, R8 최적화만 구글 플레이에 포함됩니다.

1. — 릴리즈에 R8를 켜세요

열기 android/app/build.gradle (Groovy는 Capacitor 기본값입니다) 그리고 릴리즈 블록을 변경하세요 릴리즈 블록:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

모듈이 Kotlin DSL을 사용하는 경우 (build.gradle.kts):

buildTypes {
    getByName("release") {
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard-rules.pro"
        )
    }
}

세 가지 중요한 점이 있습니다:

  1. minifyEnabled true R8를 실행하는 실제 파일입니다 (축소 + 암호화 + 최적화).
  2. shrinkResources true 사용되지 않는 안드로이드 리소스를 제거합니다. 최적화에 필요한 것은 압축입니다.
  3. 이 R8 설정을 사용하세요 proguard-android-optimize.txt. proguard-android.txt 배송 -dontoptimizeR8 최적화를 차단하고 AGP 9에서 오류를 일으키는 Capacitor은 Play에서 어떤 shrinker도 허용합니다. Capacitor 앱은 R8의 기본 최적화 옵션을 사용해야 합니다. Capacitor 플러그인 AGP 9 빌드 오류 해결 __CAPGO_KEEP_0__ 플러그인이 여전히 이전 파일을 참조하는 경우

Do not set minifyEnabled true on debug__CAPGO_KEEP_0__ 플러그인이 여전히 이전 파일을 참조하는 경우

__CAPGO_KEEP_0__ 플러그인이 여전히 이전 파일을 참조하는 경우

Open android/gradle.properties __CAPGO_KEEP_0__ 플러그인이 여전히 이전 파일을 참조하는 경우

android.enableR8.fullMode=false

__CAPGO_KEEP_0__ 플러그인이 여전히 이전 파일을 참조하는 경우

Also search android/app/proguard-rules.pro __CAPGO_KEEP_0__ 플러그인이 여전히 이전 파일을 참조하는 경우 -include 파일)으로:

-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }

이 규칙들은 플레이 점수를 낮추기 때문에 플립을 하더라도 점수가 낮아질 것입니다. minifyEnabledStep 3 — __CAPGO_KEEP_0__ 플러그인만 유지하십시오, 앱 전체는 삭제하십시오

Capgo는 Capacitor 플러그인을 유지하고 전체 앱을 유지하지 않습니다.

R8은 reflection metadata를 사용합니다. Capacitor 플러그인은 어노테이션으로 발견되므로 규칙을 유지해야 합니다. Capacitor 3.2.3부터, Capacitor 3.2.3 이후 @capacitor/android keep: 클래스, , 권한 및 활동 콜백

  • @CapacitorPlugin ships @PluginMethodthat
  • 확장 클래스 com.getcapacitor.Plugin
  • 기존 @NativePlugin Cordova 플러그인 클래스

현재 Capacitor 6/7/8 라인에 머물러 있으므로 소비자 규칙이 적용됩니다.

추가 규칙을 추가하세요 android/app/proguard-rules.pro 단지 release 빌드에서 재현할 수 있는 오류로 인한 충돌을 피하기 위해

# Good: one misbehaving plugin package
-keep class com.mycompany.myplugin.** { *; }

# Bad: this will tank obfuscation and shrinking
-keep class com.getcapacitor.** { *; }
-keep class ** { *; }

좁은 범위가 넓은 범위보다 낫다: 세 번째-party 플러그인이 타겟팅된 유지 규칙에도 충돌을 일으킨다면, 플러그인을 업데이트한 후 유지 관리되는 대안을 Capgo 플러그인 디렉토리에서 찾거나, Capgo Consulting에 문의하세요., 또는 요청합니다. Capgo __CAPGO_KEEP_0__

공식 Capacitor 공지: ProGuard 사용.

4단계 — 실제 릴리즈 번들을 빌드

디버그 APKs는 ~0%의 암호화만 보여줄 것입니다. Play는 업로드한 것만 평가합니다.

프로젝트 루트에서:

npm run build
npx cap sync android
cd android
./gradlew bundleRelease

인증 정보가 없는 경우 release 이 작업은 성공하지만, unsigned APK를 생성합니다. Android Studio에서 Play 업로드 전에 APK를 인증하세요. .aab릴리즈 APK를 장치에 설치합니다 (

APK를 에 업로드합니다. 장치에서 ("./gradlew assembleRelease, 그 다음 APK 파일은 app/build/outputs/apk/release/. An .aab 은 구글 플레이 업로드 형식이며, 사용자가 직접 설치하는 것이 아닙니다. native 플러그인을 실행하세요 (카메라, 푸시, 파일, 결제, 인증). R8 버그는 debug 세션에서 나타나지 않습니다. npx cap run android R8 버그는 debug 세션에서 나타나지 않습니다.

Gradle 명령어를 위에 수행한 후 (현재 위치는) android/R8가 실제로 실행되었는지 확인하세요:

  • app/build/outputs/mapping/release/mapping.txt
  • app/build/outputs/mapping/release/configuration.txt
  • AGP 8.10 또는 그 이상의 최신 패치에서 r8.json App Bundle 내부에서

Those release 폴더는 기본 Capacitor 버전입니다. 제품 플래버와 함께 매핑은 버전 이름("mapping/freeRelease/(예를 들어 apk/<flavor>/release/ 만 apk/free/release/).

If mapping.txt 잘못된 버전 폴더에 있으므로, CI가 assemble 한 경우입니다. debug또는 R8가 실행 된 경우 -dontobfuscate. 다시 확인해 주세요. minifyEnabled true 에 release 및 그 규칙이 오버플로를 비활성화하지 않습니다.

Step 5 — 오류 보고서가 읽을 수 있도록 유지하세요

Obfuscation된 스택 추적은 매핑 파일이 없이는 쓸모가 없습니다. 유지 mapping.txt 매핑 파일이 없으면 오버플로된 스택 추적이 쓸모가 없습니다.

  • 각 Play 버전에 대해: Play 콘솔:테스트 및 출시 → 앱 번들 탐색기 → 다운로드 → 자산 mapping.txt , 그 다음 업로드해 주세요. 만약 이미 첨부되어 있다면.
  • Firebase Crashlytics / Sentry: CI에서 동일한 매핑 업로드.

Android Studio / AGP는 매핑을 CI에 포함하는 경우가 많습니다. .aabAssets 탭을 최적화된 업로드 후에도 여전히 확인하십시오.

6단계 — Play에 업로드 및 재검사

업데이트된 .aab 내부 테스트 트랙으로 업로드하십시오 (생산은 점수 갱신을 위해 업데이트할 필요가 없습니다).

  1. 테스트 및 출시 → 앱 번들 탐색기 해당 버전
  2. DEX 크기와 압축 / 최적화 / 축소율
  3. 새로운 버전이 Play에서 분석하는 버전 새로운 버전이 Play에서 분석하는 버전이 필요합니다.

You need 25% 에서 각 세 지표 중 25% 이외의 오버플로우도 포함합니다. R8를 활성화하면 proguard-android-optimize.txt Capacitor 앱이 일반적으로 단일 자릿수 오버플로우에서 25% 이상의 오버플로우로 증가합니다.

플레이 스토어에서만 enforces 25% 이하의 오버플로우를 보유하고 있지만 R8가 활성화되어 있지만 플레이 (또는 로컬 분석기)가 약한 점수를 보여주고 있다면

열기

R8 구성 분석기

  1. Open 그런 다음 그것을 기록합니다 assembleRelease Open configanalyzer.html 다음에 mapping.txt. AGP 9.2 이전 버전에서는 해당 HTML 파일을 건너뛰고 mapping.txt, APK Analyzer, 및 Play의 앱 번들 탐색기 대신 사용하세요.
  2. 앱을 정렬할 때 앱이 멈추는 정도에 따라 규칙을 정렬하세요. 라이브러리 소비자 규칙은 편집할 수 없습니다. 앱 수준 -keep class com.foo.** { *; } 은 아님.
  3. 열기 .aab 을 열고, 큰 .dex 파일을 선택하고, mapping.txt이름을 해제하세요 (
  4. ). 읽을 수 있는 큰 패키지는 패키지를 전부 지우지 말아야 합니다. proguard-android.txtAGP 9에서 아직

을 참조하는 플러그인을 업데이트하세요. 해당 파일은 AGP 9에서 최적화를 막고, 이전 플러그인에서 빨간색으로 표시됩니다. minifyEnabled false 그리고 기대되는 규칙이 바뀌기를 바랍니다. Play는 축소, 최적화, 그리고 가려움.

이것은 다음을 대체하지 않습니다.

  • JavaScript 압축 에서 vite.config.ts 이것은 이 지표를 이동하지 않습니다.
  • Capgo 실시간 업데이트 HTML/JS/CSS를 배달합니다. 그들은 DEX를 재구성하지 않습니다. 스토어 바이너리에서 R8가 활성화된 후, 여전히 오버 더 에어 JS 수정을 배달할 수 있습니다. 가려움 검사 자체는 하나의 네이티브 Play 업로드가 필요합니다.
  • 16 KB 페이지 크기 이는 별도의 Play 네이티브 요구 사항입니다. 자세히 보기 Android 16 KB 페이지 크기.

Google Play의 암호화에 대한 Capacitor Android Capgo 빌드, change android/app/build.gradle 변경 GitHub 액션 안드로이드 빌드다음 클라우드 빌드는 R8를 인식합니다. release이dea가 동일합니다. __CAPGO_KEEP_0__ Actions Android 빌드

: 워크플로우는

R8을 활성화하면 내 Capacitor 플러그인은 깨지지 않을까요?

It can, if a plugin uses reflection and ships no consumer keep rules. Core Capacitor already keeps plugin classes. Test a release build. Add a FAQ 패키지 오류가 발생한 경우에만 규칙을 유지하세요. 플러그인은 유지보수가 되지 않는 경우에, Capgo 컨설팅 fork하고 유지할 수 있습니다.

Does npx cap run 검증을 통과했는지 증명했습니다.

아니요. 그 명령은 R8을 끄고 디버그 빌드를 사용합니다. signed Play 업로드를 사용하세요. bundleRelease 우리는 이미

설정하고 여전히 3%를 보이는데 왜일까요? minifyEnabled true CI가 업로드한 minified AAB를 찾으세요. 오래된 아티팩트가 아닌지 확인하세요.

blanket -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false규칙을 확인하세요. -keep Search for

ProGuard 대신 R8가 필요합니까?

아니요. R8는 Android Gradle Plugin shrinker입니다. ProGuard-style 규칙 파일을 읽습니다. Google Play 문서에서는 어떤 shrinker도 허용합니다. R8는 Capacitor 앱이 사용해야 하는 shrinker입니다.

체크리스트

  • release { minifyEnabled true; shrinkResources true }
  • proguard-android-optimize.txt (아니요 proguard-android.txt)
  • 아니요 -dontobfuscate / -dontoptimize / app-wide -keep class **
  • Capacitor 3.2.3 이상 버전의 소 플러그인 소비자 규칙이 적용됩니다.
  • 자연 플러그인은 릴리즈 설치에 테스트됩니다 mapping.txt
  • 새로운
  • New .aab 압축, 최적화 및 축소 각 25% 이상
  • 새로운

그것은 전체 Play 콘솔 경고입니다: Capacitor R8을 비활성화하고 Play는 DEX 점수를 시작했으며 한 줄의 릴리스 Gradle 변경 및 스토어 업로드가 해결책입니다.

Fix Google Play Obfuscation Below 25% in Capacitor Apps에서 계속 진행하세요.

만약 당신이 사용하고 있다면 Google Play 가전화 방지율 25% 이하로 Capacitor 앱을 수정하세요 Android 스토어 릴리스를 계획하는 경우 __CAPGO_KEEP_0__와 연결하세요. Capgo 원시 빌드 릴리스 앱 번들을위한 __CAPGO_KEEP_0__ Native Builds Capgo CI/CD 업로드 PIPELINE을위한 __CAPGO_KEEP_0__ CI/CD CI/CD 통합 implementation detail을위한 자동화된 Capacitor 안드로이드 빌드와 GitHub 작업 자체 호스팅 PIPELINES 에서도 Capgo 컨설팅 R8 가 활성화 된 후 플러그인이 깨질 경우.

Capacitor 앱에 대한 즉시 업데이트

Capgo를 통해 웹层 버그가 활성화된 경우, 앱 스토어 승인 대기 없이 바로 픽스를 배포하세요. 사용자는 배경에서 업데이트를 받으며 네이티브 변경 사항은 일반 승인 경로를 따릅니다.

최신 블로그 소식

Capgo은 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.