프레임워크

[React-Native] Error: Failed to parse APK file 해결

React Native Error: Failed to parse APK file

React Native 프로젝트를 빌드하여 테스트하려 할 때 다음 에러가 나타나면서 빌드에 실패하는 경우가 있습니다.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 40s

error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
Note: C:\project\my-project\android\app\src\debug\java\com\myproject\ReactNativeFlipper.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Unable to install C:\project\my-project\android\app\build\outputs\apk\debug\app-debug.apk
com.android.ddmlib.InstallException: Unknown failure: Exception occurred while executing 'install':
java.lang.IllegalArgumentException: Error: Failed to parse APK file: /data/local/tmp/app-debug.apk: Failed to parse /data/local/tmp/app-debug.apk
at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:581)
at com.android.server.pm.PackageManagerShellCommand.doRunInstall(PackageManagerShellCommand.java:1337)
at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:1303)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:193)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManager
Service.java:24612)
at android.os.Binder.shellCommand(Binder.java:950)
at android.os.Binder.onTransact(Binder.java:834)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4818)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:8506)
at android.os.Binder.execTransactInternal(Binder.java:1184)
at android.os.Binder.execTransact(Binder.java:1143)
Caused by: java.io.FileNotFoundException: AndroidManifest.xml
at android.content.res.ApkAssets.nativeOpenXml(Native Method)
at android.content.res.ApkAssets.openXml(ApkAssets.java:379)
at android.content.pm.parsing.ApkLiteParseUtils.parseApkLiteInner(ApkLiteParseUtils.java:302)
at android.content.pm.parsing.ApkLiteParseUtils.parseApkLite(ApkLiteParseUtils.java:283)
at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:575)
... 12 more

{{중략}}

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:installDebug'.
> java.util.concurrent.ExecutionException: com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Unknown failure: Exception occurred while executing 'install':
 java.lang.IllegalArgumentException: Error: Failed to parse APK file: /data/local/tmp/app-debug.apk: Failed to parse /data/local/tmp/app-debug.apk     
  at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:581)
  at com.android.server.pm.PackageManagerShellCommand.doRunInstall(PackageManagerShellCommand.java:1337)
  at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:1303)
  at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:193)
  at android.os.Binder.shellCommand(Binder.java:950)
  at android.os.Binder.onTransact(Binder.java:834)
  at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4818)
  at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:8506)    
  at android.os.Binder.execTransactInternal(Binder.java:1184)
  at android.os.Binder.execTransact(Binder.java:1143)
  Caused by: java.io.FileNotFoundException: AndroidManifest.xml
  at android.content.res.ApkAssets.nativeOpenXml(Native Method)
  at android.content.res.ApkAssets.openXml(ApkAssets.java:379)
  at android.content.pm.parsing.ApkLiteParseUtils.parseApkLiteInner(ApkLiteParseUtils.java:302) 
  at android.content.pm.parsing.ApkLiteParseUtils.parseApkLite(ApkLiteParseUtils.java:283)      
  at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:575)
  ... 12 more

내용이 상당히 긴 것을 확인할 수 있는데 여기서 하단부의 ‘What went wrong’ 부분을 보시면 주요 원인을 파악할 수 있습니다. 여기서는 아래 메시지가 주요 원인이 되겠습니다.

Execution failed for task ':app:installDebug'.
> java.util.concurrent.ExecutionException: com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Unknown failure: Exception occurred while executing 'install':
 java.lang.IllegalArgumentException: Error: Failed to parse APK file: 

대략 디버깅용 APK 파일을 설치하는 도중 데이터 파싱 에러가 발생하여 설치에 실패했다는 내용인데, 이에 대한 주요 해결책은 다음과 같습니다.

해결 방법

먼저 이 과정을 하기 전, React Native를 위한 개발 환경 설정이 모두 완료되었는지 확인해주셔야 합니다.

React Native의 개발 환경 설정은 아래 문서에서 확인해보실 수 있습니다.

https://reactnative.dev/docs/environment-setup

간혹 SDK 버전이 문서와 다른 버전이 설치되어 있을 수 있는데, 문서에 나와있는 SDK 버전과 AVDAPI 버전을 문서와 동일하게 설정하는 것을 권장합니다.

위 설정을 모두 마치셨다면 이제 미리 빌드된 APK파일을 깨끗이 삭제해주어야 합니다. 디버그릴리스APK 중 현재 발생한 환경에 맞는 APK파일을 삭제해주면 됩니다.

일반적으로는 다음 경로에 위치합니다:

{프로젝트 폴더}/app/build/outputs/apk/release
{프로젝트 폴더}/app/build/outputs/apk/debug

위 경로의 파일을 모두 삭제한 뒤 현재 편집중인 에디터(IDE), 콘솔, 가상 기기(AVD)를 모두 다시 시작합니다.

이제 다시 빌드를 시도하면 대부분 문제가 해결 될 것입니다.

참고자료

https://stackoverflow.com/questions/53662481/java-lang-illegalargumentexception-error-failed-to-parse-apk-file

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

2주 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

6개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

8개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

8개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

8개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

8개월 ago