오랜만에 Android Studio를 켜서 3.6.2로 버전업을 하였더니 빌드가 실패한다. 아래와 같은 에러들이 보인다. 숫자는 프로젝트마다 조금씩 다른 듯, Git branch와는 관계가 없다. ERROR: Uninitialized object exists on backward branch 45 Caused by: java.lang.VerifyError: Uninitialized object exists on backward branch 45 기존에는 Oracle JDK를 1.8을 설치하여 쓰고 있었는데 Android Kotlin 관련 업데이트와 충돌을 하는 듯 싶다. Jetifier 빌드 툴 동작중 문제가 된다. Jetifier가 무엇인지는 아래 링크 참조 https://developer.androi..
Google IO 2017에서 새로 발표된 Android Studio 3.0 canary 1 버전에는 새로운 Android profiler가 탑재되었다. 이 프로파일러를 동작시키기 위해서는 com.android.toos.build 버전을 2.4 이상으로 올려야 하는데, 업데이트 후 싱크 시 스튜디오에서 다음과 같은 오류가 발생하였다.Failed to notify build listener 이럴 경우 gradle daemon에 업데이트 된 사항이 적용되지 않아 그런 것으로, daemon을 재시작하면된다. Android studio를 재시작하여도 되고, 스튜디오의 터미널 창을 열어 커맨드 명령으로 종료시킬 수 있다. 커맨드 명령은 아래와 같다.[Windows] > gradlew --stop[Linux]> ...
안드로이드에는 런쳐(홈 앱)에 위젯을 사용자 마음대로 설치할 수 있다. 사용자는 주어진 기능이기 때문에 원하는대로 사용하려고 하게되는데, 많이 설치하면 할수록 런쳐가 사용하는 메모리가 커진다는 것을 잘 이해하지 못하는 것 같다. 개발자들도 위젯을 개발해 보지 않으면 위젯의 생명 주기를 잘 이해하지 못하곤 한다.위젯은 런쳐의 메모리를 사용한다.그렇다. 위젯은 런쳐의 메모리를 사용하고 지속적으로 점유한다. 그런데 런쳐는 사실상 계속 살아있는 앱이므로 런쳐의 메모리가 커지면 가용램이 줄어든다고 말할 수 있다 이는 곧 전체적인 폰의 성능 저하로 이어지게 된다. 만약 게임등에 의해 메모리 사용이 극대화 되고 가용램이 없게되면 LMK(Low Memory Killer)에 의해 우선순위에 따라 프로세스들이 죽어가게 된..
Android Performance Youtube 채널에 올라온 것이 있어 리뷰하였습니다. Android가 성능이 나쁘다는 평가를 극복하기 위해 애쓰고 있죠. 이미지 사이즈를 줄이고 데이터 사이즈도 줄이라는 익히 알만한 내용이지만 설명 중 몰랐던 몇몇 기술들이 있어서 정리해보았습니다.두가지가 중요하다 : 이미지, serialized data이미지를 작게 만들어야 한다전송 속도가 곧 앱 속도네트워크를 많이 쓰면 배터리를 많이 사용한다전송량은 사용자의 돈이다JPG로 손실 압축을 사용하라 - webp format이미지 서버에 다양한 사이즈를 준비하고 사용목적, 디바이스 크기등에 따라 다른 이미지를 제공하라Serialized data도 중요하다Json은 불필요한 내용이 너무 많다. Spade, linefeed,..
Google IO 2014의 세션 중 하나로, 퍼포먼스 문제를 개발 문화로 만들어야 한다는 이야기를 하고 있다. 그래서 제목이 Perf(ormance) Culture이다. 인상깊게 본 것들이 많아 여기에 주요 포인트를 메모하고자 한다. 동영상은 아래에서 볼 수 있다.https://www.google.com/events/io/io14videos/711a595b-70ca-e311-b297-00155d5066d7퍼포먼스에 대해 항상 주목해야 할 세가지 주제Web 개발에 대해 포인트를 맞추고 이야기하지만 Android app에서도 동일하게 생각해볼 만 하다. 사용자가 접하는 것은 비슷하기 때문이다.Traffic statsdevices, geography, user journey : 다양한 기기, 사용자들의 물리..
안드로이드(Android)의 Fragment는 앱 개발에 항상 써 오고 있지만 왜 써야 하는지 이야기 해 보라면 잘 정리되지 않는다. 정리해 보도록 하자.장점 : 단점을 커버할 만한 몇가지 중요한 장점을 지니고 있다.디바이스 차이를 다루기 위해 태블릿은 커다란 화면을 가지고 있고 모바일에서 보여주던 그대로 보여줄 경우 넓은 화면을 제대로 활용하지 못한다는 느낌을 줄 수 있다. 때문에 이중 분할과 같은 형태로 카테고리 뷰와 컨텐츠 뷰를 보여준다던지 하는 방식으로 화면을 채워볼 수 있다. 이 때 사용할 수 있는 것이 Fragment이다. 간단히 말하자면 태블릿과 폰 간의 화면 크기 차이로 화면 영역을 Fragment로 분리하고 이를 조합하여 보여준다고 할 수 있다.화면 사이에 데이터 전달분리된 Activit..
검색한 결과를 링크합니다. SQLite performance tuning and optimization on embedded systems : 잘 정리되어 참고 할 만 하다.http://katastrophos.net/andre/blog/2007/01/04/sqlite-performance-tuning-and-optimization-on-embedded-systems/How do I improve the performance of SQLite? : 여러 건의 insert를 할 때 tuning한 내용을 잘 설명하고 있다. C 코드 부분도 있어 참고 할 만 함.http://stackoverflow.com/questions/1711631/how-do-i-improve-the-performance-of-sqlit..
Jelly Bean 업그레이드 테스트를 하는 도중 위젯이 계속 로딩중이고 로그에 오류가 나서 보았더니Broadcast할 때 FLAG에 Intent.FLAG_ACTIVITY_CLEAR_TOP 이 있어서 그랬습니다. Broadcast 할 때에는 FLAG_ACTIVITY로 시작하는 FLAG는 붙이지 말아야 합니다. 01-02 00:02:19.818: E/ActivityManager(672): Activity Manager Crash01-02 00:02:19.818: E/ActivityManager(672): java.lang.IllegalArgumentException: Can't use FLAG_RECEIVER_BOOT_UPGRADE here01-02 00:02:19.818: E/ActivityManager..
StrictMode Android에서 오류를 검출해주는 방안 중의 하나로, 진입점에서 설정하면 실행하는 동안 이슈가 될 수 있는 부분들에 대하여 검출되며, 로그로 출력하거나 팝업을 띄울 수 도 있다.보통 로그로 출력하게 해서 "StrictMode" 태그로 필터링 하면 확인할 수 있다.메모리 Leak이나 Cursor가 Close되지 않은 부분 등 유용한 정보를 확인할 수 있어 개발 기간 동안 활성화 하면 도움이 된다. 보통 Activity나 Application 클래스 onCreate 메소드 내에서 설정, 디폴트로 할 경우 아래 코드 추가 StrictMode.enableDefaults(); 자세한 내용은 정리된 사이트가 많아 링크로 대신한다. Android developers bloghttp://andro..
가로, 세로 방향 전환시 ListView가 유지되지 않고 초기화 될 경우 가로 화면이 지원되도록 설정된 단말에서 ListView를 사용하는 경우, 가로로 돌리면 리스트가 초기상태로 돌아가는 경우가 있다. AndroidManifest.xml의 해당 Activity tag에 다음 attribute를 추가해 보자 android:configChanges="orientation|screenSize"대부분 잘 된다. 그러나 이 Attribute에 명기된 것들에 대해서는 개발자가 책임지겠다는 의미이다.원래 Android의 Activity는 configuration이 변경되면 restart가 된다. 가로세로 전환 외에도 Bluetooth 키보드를 연결하거나 언어가 변경되거나 하면 Activity를 자동으로 재시작 하여..