1. 문제상황
구글스토어에 업로드하고 잘 사용하던 어플이 어느 순간 스마트폰에서 자동으로 삭제 되었다.
그리고 설치하려고 해도 설치가 안 되었다.
2. 원인찾기
adb: failed to install
C:\Users\superpower\Develop\rms\android/app/build/outputs/apk/debug/app-debug.apk:
Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED:
Failed parse during installPackageLI: /data/app/vmdl928833812.tmp/base.apk
(at Binary XML file line #78): com.zoontek.rnbootsplash.RNBootSplashActivity:
Targeting S+ (version 31 and above) requires that an explicit value for
android:exported be defined when intent filters are present]
1) 개발환경에서 빌드를 시도하자 위와 같은 에러 메시지를 보인다.
눈에 띄는 문구는 "Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present" 이 부분이다.
targetSdkVersion 31이상은 android:exported 를 정확하게 표시해줘야 한다고 한다.
2) 공식문서에서 확인
https://developer.android.com/about/versions/12/behavior-changes-12?hl=ko#exported
3. 해결
intent-filter를 사용하는 activity에 android:exported 설정을 명시적으로 해줬다.
이전 버전에서는 default값인 true가 자동이지만 Android 12 부터는 명시적으로 적어줘야한다.
아래 intent-filter는 android.intent.category.LAUNCHER 를 포함하므로 true로 지정했다.
4. 참고
- 명시적 인텐트는 인텐트를 충족하는 애플리케이션이 무엇인지 지정합니다. 이를 위해 대상 앱의 패키지 이름 또는 완전히 자격을 갖춘 구성 요소 클래스 이름을 제공합니다. 명시적 인텐트는 일반적으로 앱 안에서 구성 요소를 시작할 때 씁니다. 시작하고자 하는 액티비티 또는 서비스의 클래스 이름을 알고 있기 때문입니다. 예를 들어, 사용자 작업에 응답하여 새로운 액티비티를 시작하거나 백그라운드에서 파일을 다운로드하기 위해 서비스를 시작하는 것 등이 여기에 해당됩니다.
- 암시적 인텐트는 특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성 요소가 이를 처리할 수 있도록 해줍니다. 예를 들어 사용자에게 지도에 있는 한 위치를 표시하고자 하는 경우, 암시적 인텐트를 사용하여 해당 기능을 갖춘 다른 앱이 지정된 위치를 지도에 표시하도록 요청할 수 있습니다.
https://developer.android.com/guide/components/intents-filters?hl=ko#Types
'Develop > Android' 카테고리의 다른 글
Andoird 메모리 사용을 분석해보자!!! (0) | 2024.01.17 |
---|---|
[gradle] googlePlayServicesVersion 설정 방법 (0) | 2021.11.27 |
안드로이드 앱 꺼짐 현상 앱크래시😥 (0) | 2021.10.18 |
[android] MediaPlayer?? ExoPlayer?? (0) | 2021.10.05 |
[android] 실행중인 앱을 강제 종료시키고 싶을 때 (0) | 2021.09.29 |
댓글