샤오미 MIUI 9 대규모 업데이트

이미지
샤오미에서 MIUI9을 거의 모든기기에 적용하겠다고 한지 몇개월이 지나서, Mi6같은 최신 기기서부터 MIUI 9롬을 내놓기 시작했다. MIUI 9설치후 맨 첫 화면. MIUI 9은 Lightning Fast가 컨셉이다.  IMIUI 9에 멀티윈도우가 기본탑재 된다는 소식에, 루머로는 전기종 Android 7.x적용이라고 본거같은데, 역시나 그렇지는 않았다. 7.x기기를 제외하고는 멀티윈도우가 없는것같다. 아마 출시 이후에는 다른 회사들처럼 Android SDK업데이트 기간은 정해져있는듯 하다.  비록 샤오미가 각 기기의 SDK업데이트는 못해주더라도, 테마와 자사 기능들에 대해서는 최대한 공통으로 적용하여 내놓아주니 커스텀롬같은 지식이 없는 사람들은 업데이트가 짧은 삼성 엘지같은 기업보다는 사오미가 더 좋은 선택일수 있다. 2012년에 출시한 Xiaomi MI2가 안드로이드 4.1에서 5.0으로, MIUI 4에서 MIUI 9까지 왔으니 말이다. 아래는 17.09.09일 기준으로 MIUI 9이 개발자버전(Beta)으로 올라온 기기이다 해당기기들은 공식 홈페이지 아래에 모델명 안드로이드 버전 HM3 5.1 (롤리팝) HM3SHM3X 6.0 (마시멜로우) HM4 6.0 (마시멜로우) HM4A 6.0 (마시멜로우) HM4Pro 6.0 (마시멜로우) HM4X 7.1 (누가) HMNote2 5.0 (롤리팝) HMNote3 5.0 (롤리팝) HMNote3Pro 6.0 (마시멜로우) HMNote3SE 6.0 (마시멜로우) HMNote4X 7.0 (누가) HMNote5A 7.1 (누가) HMNote5ALITE 7.1 (누가) MI2 5.0 (롤리팝) MI3WMI4W ...

안드로이드 크롬 하단 주소창, 크롬 홈 설정하기

이미지
갤S3에 리니지 OS14.1을 올렸을때, 크롬 카나리에서 하단 검색바가 되어 신기해 했었다. 검색을 많이하는편인데, 손이 작아 주소창을 누르는게 항상 힘들었던차에 매우 만족스러웠다. 하지만, S3는 주 기기가 아니었고 다른 기기에서는 크롬 카나리를 깔아도 되지않았다. 검색해보니 크롬 실험기능에서 활성화를 해야했다. chrome://flags에서 chrome home을 찾아 Enable로 해주고 "두번"재시작하면 적용된다. 다시시작 버튼으로 한번 껏다켜진뒤, 작업관리자에서 한번더 종료한뒤 키면 된다. 플래그가 아랫쪽에 있어 한참 찾아야하므로, chrome://flags/#enable-chrome-home 을 주소창에 복사해넣으면 해당 위치로 바로간다. 크롬 스테이블에서는 기존 크롬형태로 각져있지만, 카나리에서는 둥글둥글하게 되어있다. 한가지 단점이 기존에는 상단 주소바를 아래로 스와이프 해서 탭 리스트로 갈수있었지만, 하단에서는 크롬홈이 올라와 탭버튼을 눌러 탭을 전환해야한다

안드로이드 스튜디오 26.0.0, 26.0.1, 26.x.x버전 dependency 추가에러

이미지
안드로이드 지원라이브러리를 추가할때, gradle 의존성에 compile 'com.android.supprot ... :${버전}' 형태로 추가를 하게 된다. 그런데, 일부라이브러리는 26.0.0은 되지만, 26.0.1이 안되고 어떤 라이브러리는 26.0.0조차도 안되는 문제가 있다. 일반적으로 Install Repository and sync project를 누르면 알아서 받고 추가해주는데, 되질 않는다. 영어로 Failed to resolve com.android.support:appcompat-v7:26.0.1을 검색하면 스택오버플로우에 구글 메이븐 주소를 추가하라고 나온다. 앱 말고 프로젝트의 gradle파일에 allprojects { repositories { jcenter() maven { url "https://maven.google.com" } } } 이렇게 넣어주면 된다. 한글 개발문서에는 없지만, 영어 개발문서에는 나온다. 26.0.0부터는 필히 maven 주소를 추가해주어야 한다. 아마 안드로이드 스튜디오가 업데이트되면 기본으로 추가되지 않을까 싶다. 그런데, 현재 프로젝트에서  Animatable2Compat.AnimationCallback 을 사용하는데  26.x은  Animatable2Compat 가  없어 sdk23의 콜백을 써야된다. 그리고,  com.jaredrummler:animated-svg-view:1.0.4 를 사용 못하는 버그가 있다. 25.3.0으로는 잘 되긴하는데, 앞으로가 걱정이다..

안드로이드와 벡터, 벡터 애니메이션

이미지
안드로이드 SDK21(롤리팝) 부터는 벡터 이미지를 지원 한다. 기존에는 손실이 적은 PNG나 BMP형태로 해상도마다 다른 사이즈로 저장해 사용했지만, 벡터를 사용하면 해상도에 따른 리소스 파편화가 없어지고, 용량또한 작아진다 . 거기에 path방식이다보니, path 변환 애니메이션도 가능해져, 아이콘같은 애니메이션을 만들기도 쉬워 졌다. 그러나, 안드로이드가 벡터 SVG파일을 그대로 사용가능하지는 않다. XML파일인 VectorDrawable을 지원 하는데, http://inloop.github.io/svg2android/ 이 사이트가 SVG에서 VectorDrawable로 변환 하는것을 지원해준다. 직접 써보니 패스, 스트로크, 색상 등 모든 속성이 손상없이 그대로 되는듯 하다. 사이트 메인화면 SVG파일을 끌어넣으면 된다. 파일여러개를 넣으면 일괄변환해 압축파일로 저장한다. 파일 하나만 넣었을때 아래에 몇가지 설정을 반영할수 있다. xml코드를 그대로 복사해서 drawable에 추가하면 된다. 애니메이션은 이 벡터를 기반으로 path변환(흔히 morph, shape tween), 투명도, 크기, 회전, 이동을 지원한다. 애니메이션 관련으로는 ObjectAnimator, AnimatedVector(Drawable), Animatable등을 안드로이드에서 제공하는데 같은 애니메이션도 각 객체에따라 사용방법이나 특징이 조금씩 달라진다. ObjectAnimator은 벡터에서 단일 애니메이션을 적용시키는 객체이고, AnimatedVector(Drawble)은 벡터 이미지와 이 ObjectAnimator을 모아 만드는 애니메이션이 가능한 벡터 객체가 된다. java나 xml상에서는 텍스트로 애니메이션을 가늠하기 어렵기 때문에, 별도의 애니메이션 제작 툴 이 필요하기 마련인데, https://shapeshifter.design/ 여기서 안드로이드 벡터 애니메이션 편집을 지원한다. 알파값 변...

Node.js Array의 중복 제거하기.

ES6부터 new Set()을 통해 중복을 제외한 새 배열을 생성 할 수 있다. var uniqArray = Array.from(new Set(duplicateArray)); 기존의 다른 비교, 탐색 방식에비해 속도가 매우 빠르다.

유투브 백그라운드 재생

이미지
 누가용 Xposed를 테스트하며 Youtube Background Playback 모듈이 xposed 레포지토리에서 없어졌다고 했었는데, 깃허브의 해당 이슈글에 답이 달렸다. 비 Xposed 앱이 있다고.  이 앱은 Youtube Red를 구독해야 활성화되는 기능인 youtube앱에서 백그라운드 재생, 광고 제거를 강제 활성화한것이다. https://forum.xda-developers.com/android/apps-games/app-iytbp-injected-youtube-background-t3560900 역시 작동은 잘 된다.  출시한지는 꽤 됬는데 전혀 몰랐다. 나는 이게 출시하고나서 OGYoutube도 겨우 찾았던건데 검색실력이 아직 부족한가보다.  루트권한 작업이나 adb설치가 필요한 apk 형식과, Magisk모듈형 두가지가 있다.  CPU는 arm, arm64, x86, x86_64버전으로 나눠진다.  이 방식은 수정된 youtube앱을 재배포하는거라 유투브앱을 업데이트 하고싶으면 새로운 수정된 앱을 설치해야하는 번거로움이 있다. 그래서 Xposed가 좋았던건데.. 그래도 잘 되니 좋다 

ADB 무선 연결, 네트워크 ADB사용하기.

이미지
킷캣 AOSP였던가부터 무선 ADB기능을 지원하기 시작했다. (사실 ADB 통신방식이 tcp여서 한참전부터 가능하기는 했으나, 기본 탑재는 아니였다.) 제조사 펌웨어에서는 이 기능이 없는게 다반사였지만, 마시멜로우 이후부터는 제조사 펌웨어에도 네트워크 ADB기능이 보이기 시작했다. 무선 ADB, 네트워크 ADB, ADB over network등으로 부르는듯 하다. 기능은 기존 USB ADB와 완전히 동일하고, 요즘 무선 속도로는 속도저하도 못느끼겠다. 가끔 USB케이블을 두고오거나, 원격 컴퓨터에서 안드로이드 스튜디오를 사용할때 무선 ADB를 사용해 앱을 바로 디버깅 해볼 수 있다. 핸드폰이 네트워크 ADB를 지원해야하고, 가지고 있는 adb도 지원해야한다. 먼저, 개발자 옵션에서 항목을 찾는다. 대부분 '네트워크를 통한 ADB'로 되어있다. 이 항목을 키면 ADB연결을 대기하게 된다. 이 옵션은 재부팅하면 풀린다. 그리고, 연결을 원하는 컴퓨터에서 adb connect [핸드폰 ip] 를 입력하면 된다. 그럼 핸드폰에서 RSA지문 확인이 나오고 승인하면 성공적으로 연결 된다. 이 이후 USB연결 된것처럼 하던대로 하면 되고, 커맨드 창을 꺼도 된다. 무선으로 연결되어 사용가능한 장치 무선 ADB의 기본 포트는 5555이고, 포트를 바꾸려면 핸드폰에서 터미널을 열어 adb 네트워크를 열어주어야 했던것으로 기억한다. 핸드폰에 네트워크 adb가 없어도, adb 바이너리를 구해 터미널로 수행하면 똑같이 가능하다. 공유기를 쓰다보니, 이번에 핸드폰을 내부 고정아이피로 만들고 포트포워딩을 했다.