앱이 설치되지 않았습니다 삭제 - aeb-i seolchidoeji anh-assseubnida sagje

안드로이드 스튜디오에서 앱의 불편함을 개선 후 테스트 폰을 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 프로텍트 설정

앱이 설치되지 않았습니다 삭제 - aeb-i seolchidoeji anh-assseubnida sagje

보통 구글플레이 스토어가 아닌 다른 곳에서 다운 받은 APK 파일을 설치할 때 앱이 설치 되지 않는 경우에  이기능을 비활성화 하면 해결 된다. 그러나 이 문제도 아니였다.

AndroidManifest.xml 파일 정보에 meta-data 태그 중에 구글맵 API_KEY를 디버깅용이 아닌 릴리즈 버전을 사용해서 그런것일까? 라는 생각에 디버깅용으로 변경 후 빌드해보았으나 여전히 해결되지 않았다.

앱이 설치되지 않았습니다 삭제 - aeb-i seolchidoeji anh-assseubnida sagje

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

쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음