Kotlin

[Kotlin] 앱 삭제 이후에도 일부 데이터 캐시 남아있을 때

eulBlue 2023. 8. 9. 01:24

📱테스트 환경

Samsung Galaxy Android 13 • Android 10


😢 내가 겪은 문제

Android 13 에서 앱을 삭제했는데도 Room 에 저장되어있는 데이터들이 일부 자꾸 남아있었다. 나는 앱을 지웠는데 자꾸 남아있어서 너무 어이가 없고 화가 나는 상황속에서 열심히 구글에 검색해서 찾아봤더니 ...

원인은 자동백업 ( backupManager ) 때문이였다 ... 이때문에 진짜 .. 시간 너무 많이 썼는데 해결방법은 의외로 정말 간단했다 !!

 

allowBackup  fullBackupContent  false 해주면 끝난다.

이렇게 해주지 않으면 사용자도 모르게 구글 클라우드에 자동으로 백업된다고 한다.

 

AndroidManifest.kt

<application
    ...
    
    android:allowBackup="false"
    android:fullBackupContent="false"
    
    ...
</application>

 

나는 이것 이외에도 추가적으로 작업해준 내용이 있는데 , 이건 투머치 작업인것 같지만 , 혹시 몰라서 작업해놨다.

MyApp.kt

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        deleteDatabaseOnAppUninstall()
    }

    private fun deleteDatabaseOnAppUninstall() {
        val packageName = packageName
        val dataDir = "/data/data/$packageName/databases/"
        val databaseName = "my-database"

        val databaseFile = File(dataDir, databaseName)
        val observer = object : FileObserver(databaseFile.absolutePath) {
            override fun onEvent(event: Int, path: String?) {
                if (event == FileObserver.DELETE_SELF) {
                    // 데이터베이스 파일이 삭제되었으므로 데이터베이스 내의 모든 데이터를 삭제
                    val context = applicationContext
                    val database = AppDatabase.getDatabase(context)
                    // Dao 전부 작성
                    val Dao = database.Dao()

                    Thread {
                        Dao.deleteAll()
                    }.start()

                    stopWatching()
                }
            }
        }

        observer.startWatching()
    }
}

이렇게 해주고 나니 더이상 앱을 삭제 이후 재설치 해줘도 기존의 데이터가 남아있지 않았다 !!

 

다른 분들은 첫번째 Manifest 만 수정해도 됐다는 분들도 계셨는데 나는 혹시몰라 추가작업을 했지만 ?
결과적으론 안남았으니 만족스러운 결과라고 생각한다 ^^