안드로이드 M
안드로이드 M(6.0) 이 오늘 공개됐다. 실질적으로 이전에 공개되긴 했지만, 오늘 내 넥서스 5에 업데이트 공지가 떴다. 그래서 변화한 내용을 조금 살펴보자.아래 글을 보고 대충 정리하는 작업을 하려 한다. 이전에 번역을 시도했는데, 양이 너무 많아서 힘들다. 그래서 대충 글 보고, 머리속에 정리되는 것만 정리를 하는 형식으로 하려 한다. 자세한 부분은 아래 원문을 찾아서 보도록 하자.
Android 6.0 Changes
- Runtime Permissions
- Doze and App Standby
- Apache HTTP Client Removal
- BoringSSL
- Access to Hardware Identifiers
- Notifications
- AudioManager Changes
- Text Selection
- Browser Bookmark Changes
- Android Keystore Changes
- Wi-Fi and Networking Changes
- Camera Service Changes
- Runtime
- APK Validation
- USB Connection
- Android for Work Changes
API Differences
See Also
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
굳이 사용하려면 사용할 수는 있다 여기를 참고하자.
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
- AudioManager.setStreamSolo --> requestAudioFocus()
- AudioManager.setStreamMute() --> adjustStreamVolume() + ADJUST_MUTE or ADJUST_UNMUTE.
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 newbindProcessToNetwork()
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 나 기기에 접근하려면 유저의 허락을 받아야 한다. 앱에서 이런 작업을 하려면 유저의 허락을 받는 부분을 고려해야 한다.
댓글 없음:
댓글 쓰기