[해결방법 : 앱이 설치되지 않았습니다] Caused by: android.os.RemoteException: Remote stack trace:at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1032)
안드로이드 스튜디오에서 앱의 불편함을 개선 후 테스트 폰을 USB로 연결 후 앱을 테스트하기 위해 빌드 후 앱을 실행하였다. 보통의 경우 앱이 설치되면서 앱이 실행되었지만, 어찌된 영문인지 앱 아이콘만 생성 된 후 앱이 실행되지 않았다. 앱 아이콘을 클릭하면 “앱이 설치되지 않았습니다.” 라는 토스트 메세지창이 노출 되었다.
오류 전체 내용은 다음과 같다.
BaseDraggingActivity: Unable to launch. tag=AppInfo(
id=-1
type=APP
container=prediction
targetComponent=ComponentInfo{com.test.bell/com.test.bell.MainActivity}
screen=-1 cell(-1,-1) span(1,1) minSpan(1,1) rank=0
user=UserHandle{0}
title=스마트
componentName=ComponentInfo{com.test.bell/com.test.bell.MainActivity})
intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.test.bell/.MainActivity bnds=[843,252][1045,505] }
java.lang.SecurityException: Permission Denial: starting Intent {
act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000
cmp=com.test.bell/.MainActivity bnds=[843,252][1045,505] }
from ProcessRecord{d3ee983 2372:com.google.android.apps.nexuslauncher/u0a34} (pid=2372, uid=10034) not exported from uid 10977
at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
at android.os.Parcel.createException(Parcel.java:2357)
at android.os.Parcel.readException(Parcel.java:2340)
at android.os.Parcel.readException(Parcel.java:2282)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3696)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)
at android.app.Activity.startActivityForResult(Activity.java:5320)
at com.android.launcher3.Launcher.startActivityForResult(SourceFile:2)
at com.android.launcher3.BaseQuickstepLauncher.startActivityForResult(SourceFile:6)
at android.app.Activity.startActivity(Activity.java:5660)
at com.android.launcher3.BaseDraggingActivity.startActivitySafely(SourceFile:15)
at com.android.launcher3.Launcher.startActivitySafely(SourceFile:7)
at com.android.launcher3.uioverrides.QuickstepLauncher.startActivitySafely(SourceFile:3)
at com.android.launcher3.touch.ItemClickHandler.startAppShortcutOrInfoActivity(SourceFile:15)
at c.a.a.Y0.e.onClick(SourceFile:20)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1032)
at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:999)
at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:669)
at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1100)
at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1072)
이런적이 없었기에 또 다시 삽질은 시작 되었다. 안드로이드 스튜디오를 재시작해도 문제는 해결되지 않았다.
픽셀2(pixel 2) 폰의 설정창으로 들어가 Play 프로텍트 설정을 확인했다. Play 프로텍트로 앱 검사 기능은 이미 비활성화 상태였다.
Play 프로텍트 설정 찾아가는 방법
휴대폰 설정 > 보안 > Goole Play 프로텍트 > 상단 톱니바퀴 모양 아이콘 클릭 > Play 프로텍트 설정
보통 구글플레이 스토어가 아닌 다른 곳에서 다운 받은 APK 파일을 설치할 때 앱이 설치 되지 않는 경우에 이기능을 비활성화 하면 해결 된다. 그러나 이 문제도 아니였다.
AndroidManifest.xml 파일 정보에 meta-data 태그 중에 구글맵 API_KEY를 디버깅용이 아닌 릴리즈 버전을 사용해서 그런것일까? 라는 생각에 디버깅용으로 변경 후 빌드해보았으나 여전히 해결되지 않았다.
release버전으로 빌드 후 APK파일을 휴대폰으로 복사 후 설치 후 실행해보았으나 여전히 “앱이 설치되지 않았습니다”.
분명히 뭔가 바뀐게 있을텐데…무엇일까… 소스코드와 라이브러리 모두 동일한데, 무엇이 바뀌어서 이러는 것일까???
가장 최근해 빌드해서 구글플레이에 올렸던 버전의 소스로 실행해보아도 동일한 오류가 발생되었다.
컴퓨터를 재부팅해볼까? 몇 시간의 삽질 끝에 원인을 찾았다.
AndroidManifest.xml 파일 정보의 시작하는 액티비티의 android:exported=”false” 속성이 문제를 일으켰다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.test.bell">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" /> <!-- 방해금지모드 -->
<application
android:name=".common.BearBellApplication"
android:allowBackup="false"
android:fullBackupContent="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
tools:replace="android:allowBackup"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
<activity android:name=".IntroActivity"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:exported="false"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
.........생략
그렇다면 지난 번 릴리즈 버전의 경우 문제없이 동작하는 것이 왜 지금 발생했을까??
지난 번 릴리즈 버전의 경우 인트로 액티비티를 제거하고 메인 엑티비티를 시작액티비티로 변경하면서 android:exported=”false”를 제거하지 않았다. 시작하는 액티비티의 경우 exported=”false” 옵션을 설정할 수 없다. 옵션을 제거하거나 android:exported=”true”로 속성을 지정해야한다.
[해결]
android:exported="true"로 지정
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
또는
android: exported 옵션 제거
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
RESOURCE: https://stackoverflow.com/questions/4226132/app-not-installed-error-on-android