[컴][안드로이드] 안드로이드 M 변화 내용

안드로이드 마쉬멜로의 변화 / 안드로이드 M 의 변화 / 변경사항 / 무엇이 변했나.



안드로이드 M

안드로이드 M(6.0) 이 오늘 공개됐다. 실질적으로 이전에 공개되긴 했지만, 오늘 내 넥서스 5에 업데이트 공지가 떴다. 그래서 변화한 내용을 조금 살펴보자.


아래 글을 보고 대충 정리하는 작업을 하려 한다. 이전에 번역을 시도했는데, 양이 너무 많아서 힘들다. 그래서 대충 글 보고, 머리속에 정리되는 것만 정리를 하는 형식으로 하려 한다. 자세한 부분은 아래 원문을 찾아서 보도록 하자.

Android 6.0 Changes

  1. Runtime Permissions
  2. Doze and App Standby
  3. Apache HTTP Client Removal
  4. BoringSSL
  5. Access to Hardware Identifiers
  6. Notifications
  7. AudioManager Changes
  8. Text Selection
  9. Browser Bookmark Changes
  10. Android Keystore Changes
  11. Wi-Fi and Networking Changes
  12. Camera Service Changes
  13. Runtime
  14. APK Validation
  15. USB Connection
  16. Android for Work Changes

API Differences

  1. API level 22 to 23 »

See Also

  1. Android 6.0 API Overview




Runtime Permissions

이전의 안드로이드는 AndroidMenifest.xml 에 권한을 설정해 놓고, 다운로드할 때 이것을 유저에게 허락 받았다. 그런데 이것을 iphone 처럼 바꿨다. 즉, 특정 작업에 대한 권한을 그 때 그 때 유저에게 팝업등을 띄워서 허락여부를 묻는 것이다.
안드로이드 마쉬멜로우 android marshmallow 버전에서 변경된 점, 바뀐 점


Doze and App Standby

Doze

Doze 모드라는 것이 생겼다. Doze 는 "깜빡 잠이 들다" 의 뜻이다.
폰이 unplugged 이고, 오랫동안 화면이 꺼진상태로 멈춰있으면 이상태로 들어가게 된다고 한다. system 을 sleep 상태로 유지하지만, 이 상태에서 주기적으로 일반적인 작업을 잠깐씩 하게 된다. 

절전 상태에서 싱크같은 것들을 하기 위한 모드 같다.
절전 모드인데, 싱크를 위해 중간중간 깨는 개념같다.


App Standby

app 을 유저가 사용하지 않을 때 이 app 을 idle 상태로 보내는 것이다. 이러면 시스템이 이 app 에 대한 네트워크 접근이나 싱크등을 suspend 시킨다.


Apache HTTP Client Removal


Apache HTTP client 의 지원을 없앴다. Android 2.3 이상에서는 HttpURLConnection 를 사용하면 된다고 한다.

굳이 사용하려면 사용할 수는 있다 여기를 참고하자.


BoringSSL

OpenSSL 에서 BoringSSL  library 로 옮겼다.
되도록 암호화 관련해서 ndk 등에서 .so 를 직접 사용하지 말고 Java cryptography APIs 를 JNI 를 이용해서 사용하도록 하라고 한다. (libcrypto.so 와 libssl.so 가 public api 가 아니라서 같이 배포안될 수가 있으니)


Access to Hardware Identifier

Wifi 와 Bluetooth API 를 이용해서 하드웨어 id 에 접근하는 것을 막았다. 그래서 아래 2개의 함수가 쓸모없어 졌다.
  • WifiInfo.getMacAddress() 
  • BluetoothAdapter.getAddress()

주변의 기기의 id 를 가져오려면 아래 2개의 권한중 1개를 가져야 한다.

그리고 아래 api 를 이용하면 된다.



Notifications

  • Notification.setLatestEventInfo() 
함수를 삭제했다.

Notification.Builder 를 대신 사용하라고 한다. update 할 때도 Notification.Builder instance 의 build() 를 이용해서 update 하라고 한다.
  • adb shell dumpsys notification 
  • --> adb shell dumpsys notification --noredact


AudioManager Changes



Text Selection

텍스트 선택했을 때 Action bar 모드에 더해서, Action bar 와 floating toolbar 가 지원된다.
floating toolbars 는 하위 버전에 호환이 안된다. 그래서 하위버전에서는 동작안하도록 설정되는 듯 하다. 자세한 것은 원문을 참고하자.

이건 그림이 이해가 빠르니 아래 그림을 보자.

from : Android 6.0 changes > Text Selection


Browser Bookmark Changes

global bookmark 지원을 중단했다.
그래서 아래 함수와 , 권한이 없어졌다.

  • android.provider.Browser.getAllBookmarks()
  • android.provider.Browser.saveBookmark()

  • READ_HISTORY_BOOKMARKS
  • WRITE_HISTORY_BOOKMARKS


Android Keystore Changes

Android Keystore provider 가 더이상 DSA 를 지원하지 않는다. ECDSA 는 아직 지원.
키가 지워지는 경우(case) 도 변동이 있는 듯 하다. 자세한 것은 원문을 참고하자.


Wi-Fi and Networking Changes

  • 앱이 자신이 만든 WifiConfiguration 이 아닌경우에는 이를 조정할 수 없다. 다른 유저나 다른 app 이 만든 녀석은 건들 수 없다.
  • WifiManager.enableNetwork(id, disableAll) 을 통해 특정 wifi 에만 접근하고 다른 network 들을 끊어 버리게 할 수 있었는데, 이제는 이것을 못한다. (이것은 나중에 mobile network 와 wifi 를 seamless 하게 handover 하는 것을 막지 못하게 하려는 포석인듯 보인다.)
    여하튼 그래서 targetSdkVersion "21" 부터는 다른 곳에 접속할 때도 아래의 method 를 사용하라고 한다. 아래 함수가 multinetworks API 들이다.
    openConnection()bindSocket(), and the new bindProcessToNetwork()


Camera Service Changes

카메라 서비스에 있는 shared resources(공유된자원) 에 접근할 때 이전에는 시간순으로 접근하는 모델이었는데, 이것에 "우선순위" 가 적용돼서, 우선순위가 높은 녀석이 먼저 접근하는 model 로 바뀌었다.

현재 유저가 사용중인 앱이 높은 우선순위를 갖게 되는데, 이 앱이 카메라 서브시스템(카메라를 열고, 설정을 조정하는등의)을 먼저 접근하게 된다.

이런 종류의 우선순위 정책을 설명해 놨다. 자세한 이야기는 원문을 참고하자.



Runtime

newInstance() 에 대한 접근 규칙을 구현했다. Dalvik 이 이전버전에서 접근규칙을 잘못 체크하는 것을 수정해 준다.

dynamic linker 의 동작을 수정했다. dynamic linker 가 soname 과 path 의 차이를 인식하게 됐고, soname 으로 검색하는 것이 가능하다.  이전에 나쁜 DT_NEEDED 엔트리들을 가지고 있던 앱들은 load 할 때 fail 될 것이다.

dlopen(3) 의 RTLD_LOCAL flag 가 수정되었다.(correctly implemented) RTLD_LOCAL 가 default 라 명시적으로 RTLD_GLOBAL 을 사용하지 않은 부분은 영향을 받는다.

text relocation 과 함께 shared library 가 load 되도록 한 경우, 이전 버전에서는 warning 만 주고 load 됐지만, 이제는 reject 한다. 그러니 앱에서 load 가 실패한 것을 확인하려면 dlopen(3) failure 에 대한 log 를 기록하도록 해야 한다.

이상 자세한 이야기는 원문을 보자.



APK Validation

좀 더 강력(stricter) 해 졌다.
  • manifest 에 정의되어 있는데, 실제로 파일이 존재하지 않으면 corrupt 됐다고 여긴다.
  • apk 의 아무 컨텐츠나 삭제된 경우에 다시 signing 을 해야 한다.


USB Connection

USB 를 연결하면 charge-only mode 로 된다.(default)
만약 핸드폰을 연결해서 contents 나 기기에 접근하려면 유저의 허락을 받아야 한다. 앱에서 이런 작업을 하려면 유저의 허락을 받는 부분을 고려해야 한다.



Android for Work Changes

원문을 참고하자.



See Also


  1. 안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서



Reference

  1. Android 6.0 Changes | Android Developers



댓글 없음:

댓글 쓰기