본문 바로가기

Android

안드로이드 앱 마켓에 등록할때 개인정보처리방침 이슈 처리하기 하청으로써 한 기업의 앱을 출시했다.그 이후로 앱 유지보수를 하여 새로운 기능이 추가되었고 앱 업데이트 버전을 마켓에 배포했다. 사이닝한 릴리즈 버전의 APK 파일을 준비한다. 구글플레이 개발자 콘솔(클릭)에 로그인한다. 왼쪽의 사이드메뉴에서 "출시 관리"를 클릭해 하위메뉴를 펼친다. "앱 버전" 메뉴를 클릭해 해당 화면으로 이동한다. "버전 수정" 버튼을 클릭한다. 서명하여 릴리즈 버전으로 빌드한 APK 파일을 업로드한다. 출시 노트에는 추가된 기능이나 개선사항들을 기입한다. 정보 입력을 마치면 하단의 "검토" 버튼을 클릭한다. 왠 오류 팝업이 발생한다. 개인정보처리방침 항목인 카메라를 사용하는 앱이므로 추가 정보를 입력해야한다고 한다. 사이드메뉴의 앱 정보 > 스토어 등록정보 > 개인정보처리방침에 카.. 더보기
Nougat 7+ 대응, FileProvider 게시물에 첨부된 파일을 다운로드하고 실행할 때, FileUriExposeException이 발생하면서 앱이 죽는다. Android 7.0 Behavior Changes | Android Developers 안드로이드 7.0 변경된 사항들을 보니, 앱과 앱간의 파일 공유에 새로운 정책이 반영되었다.앱 외부에서 file://URI를 참조하면 FileUriExposeException이 발생한다.앱 사이에 파일을 공유하려면 반드시 content://URI를 사용해야하고, 이 URI에 대한 임시 접근권한을 줘야한다.FileProvider가 그 권한을 가장 쉽게 부여하는 방법이다. FileProvider | Android Developers FileProvider란? 앱과 앱 사이의 안전한 파일 공유를 가능하게하는.. 더보기
Intent :: setFlags() VS addFlags() 첨부파일 항목을 클릭하면 새로운 액티비티를 띄워서 관련 뷰어를 실행하도록 했다.Nougat(누가) 버전을 대응하느라 FileProvider를 적용하면서, setFlags()를 addFlags()로 변경해야 관련 뷰어앱이 실행된다. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 이 둘은 무슨 차이인거지? 우선 flag에 대해서 찾아봤다.: startActivity()를 호출할때, 새로운 액티비티를 현재 태스크에 넣을것인지 정의하는 값이다. - FLAG_ACTIVITY_NEW_TASK : 액티비티를 새로운 태스크에서 실행한다.실행하려는 액티비티에 대한 태스크가 이미 실행중이면, 그 태.. 더보기
Android nougat(7+) webview에 컨텐츠가 출력되지 않을때 안드로이드 누가 기기에서 기존에 사용하던 웹뷰를 실행해보았다.웹뷰에 컨텐츠가 출력되지 않는다. 안드로이드 개발자 문서에서는 누가 버전 웹뷰의 변경사항에 대해 말하고 있지만, 정작 해결을 어떻게 하는지는 하나도 모르겠다. https://developer.android.com/about/versions/nougat/android-7.0.html#webview 'android nougat 7 webview'로 구글링해서 얻은 결과이다.웹뷰에 WebViewClient를 설정해주고 shouldOverrideUrlLoading()에 return 값을 true로 해줘야한다. http://stackoverflow.com/questions/42367358/webview-on-android-7-0-doesnt-render.. 더보기
안드로이드 배터리 사용량 테스트 Batterystats && Battery Historian Batterystats and Battery Historian Walkthrough안드로이드 프레임웍에 Batterystats이 있다. Batterystats은 기기의 배터리 데이터를 수집해서 텍스트 파일로 저장하는 기능을 제공한다. Battery Historian은 오픈소스이고 파이썬 코드이다. Batterystats이 저장한 텍스트 파일을 가독성있는 그래픽 차트로 정리해서 HTML 파일로 저장해준다. 프로세스 별 배터리량을 확인할 수 있고, 배터리 수명을 향상시킬 수 있도록 앱의 task를 식별할 수 있다. ***주의사항: Battery Historian으로 HTML 파일을 저장하려면 파이썬 2.x.x 버전대를 설치해야 한다. Battery Historian으로 텍스트 파일을 HTML 문서로 변환했다.. 더보기
안드로이드 이미지나 사진이 돌아갈때, 회전현상 해결법 LG G4 앨범에서 선택한 이미지를 프로필 사진으로 등록하는 기능을 구현했다. QA중에 이슈가 발견되었다. 특정 단말(LG G4)에서 세로로 촬영한 사진을 선택하면 왼쪽으로 90도 회전된다. ExifInterface 클래스를 이용해서 회전현상에 대한 방어코드도 구현했는데 안통한다. 원인은... 순서였다. 프로필 이미지를 등록할 때 용량을 줄인다음에 회전현상 방어코드를 실행했다. 반드시 리사이징하기 전에 Exif orientation 정보를 받아와야 한다. 리사이징하면서 이미지의 메타 정보가 변형되나보다. 결론 앨범에서 이미지 선택 > Exif orientation 값 저장 > 리사이징 > 회정현상 방어 > 스케일링 과정에서 생성한 비트맵 이미지 삭제 관련 코드는 구글링하면 많이 나온다. http://hashcode.. 더보기
나인패치 적용하기 채팅 메시지 말풍선에 사용할 이미지 리소스를 받았다. 우왕 다 쪼개져 있다. 콘텐츠에 맞게 이미지 리소스가 쭉쭉 늘어나려면 나인패치를 적용해야 한다. 이렇게 리소스가 쪼개져서 잘못 보내졌을때, 혹은 리소스가 커서 텍스트가 좌측 정렬될 때!의 해결법을 배웠다. 차후에 바쁜 일정속에 동일한 이슈가 생기면 내가 처리할 수도 있으니, 정신 바짝 차리고 이 기억을 되살려서 재빠르게 처리하자!.! 파워포인트나 포토샵 등등으로 기존 디자인과 상관없이(비슷하게) 통으로 된 말풍선 이미지를 만든다. 반드시 PNG 파일로 저장한다. 안드로이드 스튜디오로 돌아와서 res - drawable 폴더에 해상도별로 리소스를 추가한다. 프로젝트를 Android 보기 모드로 전환하고, 추가한 리소스를 우클릭해서 Create 9-Pat.. 더보기
LinearLayout background에 selector 입혀주기 selector에 이미지 리소스가 아닌 단순 컬러값만 주고 싶은데, inflate 에러가 발생한다. 1cs 검색해보니 color 태그를 사용하면 안되고 drawable 태그를 사용해야 한다. 또, 컬러값도 colors.xml 에 drawable 태그로 저장한것을 불러오는 형식으로 사용해야 한다. 123### colors.xml ### #eaeaea#cfcfcfcs 12345678910### selector.xml ### Colored by Color Scriptercs 123### layout.xml ### cs selector에 이미지 리소스를 입히던 컬러값을 입히던, 항상 drawable 태그를 사용하면 된다! selector에 컬러값을 입히려면 colors.xml 에 drawable 태그로 등록해야.. 더보기