JooTC
react-logo-purple

[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

구독
알림
guest

0 Comments
Inline Feedbacks
모든 댓글 보기
0
이 포스트에 대한 의견을 남겨주세요!x