안녕하세요 이번에 안드로이드 14 베타 1가 Release되면서 변경된 사항에 대해서 정리를 해봤습니다.
1에서는 앱 동작변경사항에서 모든 앱의 경우를 정리할려고 한다.
안드로이드 14 일정
2월 3월은 개발자 프리뷰, 현재 5월까지 베타 릴리즈 기간이다.
그러면 안드로이드 14가 되면서 우리 앱이 어떤 식으로 변화하게 되는지가 중요하다. 안드로이드 14에서 우리 앱은 어떤 변화가 있을까?
앱 동작 변경 사항
이 섹션은 targetSdkVersion과 관계없이 Android 14에서 실행한 모든 앱에 적용되는 사항이다.
정확한 시간에 울리는 알람 예약은 이제 권한이 필요함
Android 13 이상 타겟팅하는 새로 설치된 대부분의 앱은 더 이상 사전에 권한을 부여해주지 않는다
즉, 권한 요청을 해준 뒤 사용자가 허용을 해야 정확한 시간에 울리는 알람을 사용할 수 있다.
따라서, 앱에서 영향을 받는 메소드는 3개가 있다.
- setExact() : 지정된 시간에 정확히 알람이 울릴 수 있도록 해주는 메소드
- setExactAndAllowWhileIdle() : setExact()에서 Doze, App Standby와 같은 유휴 모드에 있어도 알람을 발생함
- setAlarmClock(): 화면이 꺼져 있거나, 잠긴 경우에도 지정한 시간에 알람을 발생함
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val alarmIntent = Intent(applicationContext, YourReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(applicationContext, 0, alarmIntent, 0)
val alarmTime = System.currentTimeMillis() + yourTimeInMillis
// setExact()
alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent)
// setExactAndAllowWhileIdle()
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent)
// setAlarmClock()
alarmManager.setAlarmClock(AlarmManager.AlarmClockInfo(alarmTime, pendingIntent), pendingIntent)
참고. OnAlarmListener을 쓴 경우 권한을 요청하지 않아도 된다.
// 예외 경우 OnAlarmListener을 쓴 경우
alarmStart = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmStart.setExact(AlarmManager.RTC,startTime.getTime(),"alarm",
new AlarmManager.OnAlarmListener()
{
@Override
public void onAlarm() {
//On alarm code here
}
},null);
영향을 받는 앱
- Android 13(API 33) 이상 타겟팅
- AndroidManifest에서 SCHEDULE_EXACT_ALARM 권한을 선언했다.
의외로 영향을 받지 않는 앱: 캘린더, 알람, 시계 앱
캘린더 알람 시계 앱은 USE_EXACT_ALARM 권한을 요청해야 한다. USE_EXACT_ALARM 권한이 있는 경우 SCHEDULE_EXACT_ALARM 권한이 있는 앱과 마찬가지로 정확한 알람을 예약할 수 있다.
Background Process Kill의 제한
Android 14부터는 자기 앱의 백그라운드 프로세스만 종료할 수 있다.
다른 앱의 패키지를 종료시킬려고 하면 Invalid packageName으로 Logcat에 표시된다.
killBackgroundProcess 예시
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val packageName = "com.example.someapp"
val runningProcesses = activityManager.runningAppProcesses
for (processInfo in runningProcesses) {
if (processInfo.processName == packageName) {
activityManager.killBackgroundProcesses(packageName)
break
}
}
만약 "com.example.someapp"이 실행 중인 앱의 백그라운드 프로세스가 아닌 경우 Logcat 메시지
Invalid packageName: com.example.someapp
앱에서 다른 프로세스를 죽이는 방법을 사용하면 불필요하게 시스템 성능을 저하시키고 배터리 소모를 증가시킬 수 있다.
API 23 이하 앱은 설치 불가
보안쪽의 문제로 이제 API 23 이하 어플리케이션은 설치를 할 수 없다고 한다. (ADB 설치 포함)
그래도 꼭 API 23 설치하고 싶으면 아래의 ADB 명령어를 사용하면 된다고 한다.
adb install --bypass-low-target-sdk-block FILENAME.apk
결론
생각보다 많은 변화가 있어서 놀랬다.
안드로이드 14에서는 어떤 것이 변할지 기대가 된다.
출처
'안드로이드 > 잡다한 지식' 카테고리의 다른 글
[안드로이드] MQTT 라이브러리 정리 (0) | 2023.10.26 |
---|---|
[안드로이드] DroidKnight 2023 (0) | 2023.08.16 |
[안드로이드] WifiManager에서 Deprecated된 기능들 (0) | 2023.05.22 |
[안드로이드] AsyncTask가 Deprecated된 이유 (0) | 2023.05.19 |
[kotlin] 데이터 클래스 활용법 (0) | 2023.05.18 |