일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Kotlin
- 게임개발
- 내 맘대로 정리한 안드로이드
- 티스토리
- Android
- 개발
- 쿼터뷰
- github submodule
- 앱
- github
- Unity
- 서브모듈 pull
- 안드로이이드 submodule
- GIT
- 서브모듈 sourcetree
- 안드로이드
- gitlab submodule
- 타이쿤
- 카페오냥
- java
- 목서버
- 코틀린
- 유니티
- Android Studio
- firebase
- submodule sourcetree
- 안드로이드개발
- DataBinding
- 2d게임
- 앱개발
- Today
- Total
목록Android (45)
Uing? Uing!!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/XeALB/btqOiBrBAww/ZXnjgCqCDor6vGz1BMQUn1/img.png)
ANR이란? 안드로이드 앱을 실행하다 보면 '어플리케이션이 응답하지 않는다'는 팝업 경고 메시지를 마주할 때가 왕왕 있다. 이런 경우의 오류를 ANR(Application Not Responding)이라고 부른다. ANR은 왜 발생하는가? ANR에 대한 안드로이드 공식 문서에 따르면, ANR은 다음과 같은 두 상황에 발생한다. 활동이 포그라운드에 있는 동안 앱이 입력 이벤트 또는 BroadcastReceiver(예: 키 누름 또는 화면 터치 이벤트)에 5초 이내에 응답하지 않았습니다. 포그라운드에 활동이 없을 때 BroadcastReceiver가 상당한 시간 내에 실행을 완료하지 못했습니다. 즉, 앱이 일정 시간 내에 이벤트에 응답하지 못해서 발생한다는 것. BroadcastReceiver가 이벤트에 응..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uvZHJ/btqNBfQrnw5/qY3NqW72t7lmOm5pGAn0nk/img.png)
코드를 뜯어보고 싶어요 안드로이드 개발을 조금 하다 보면 같은 기능을 하는 코드이더라도 여러가지 방법으로 전개가 가능한 경우가 많다. 특히 자바에서 코틀린으로 넘어오면서 느낀 점 중 하나가 정말 다양한 방식의 코드를 간결한 문법으로 지원해준다는 점이다. 이건 코틀린의 큰 장점이지만, 공부를 하는 입장에서는 간혹 코드만 봐서는 성능 상에 어떤 차이가 있는지 알 수 없을 때가 있다. 'Kotlin의 이 문법은 Java에서는 어떤 방식으로 전개되는 거지?' '이 함수를 여기에 정의하면 전역 static으로 정의되는 건가?' 'Null-check를 이렇게 간결하게 하면 실제로는 어떤 방식으로 체크하는 걸까?' 등등의 의문은 Kotlin 코드를 좀 더 명확하게 표시된 Java 코드의 형태로 바꾸어 보는 것으로 해..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cKj9Jb/btqNr7Zeehh/Ddify8Lp4YyKaqEY922SP1/img.png)
Layout Inspector 개발을 하다 보면, 코드만으로는 어디에서 문제가 발생했는지 확인하기 난해할 때가 있다. 이를테면 그려진 화면을 보니 ImageView를 그리는 과정에서 뭔가 오류가 난 것 같은데, 그게 단순히 width 값의 문제인지, 아니면 다른 속성값의 문제인지 확인이 필요하다거나 할 때. 이럴 때면 개발자 입장에서는 지금 눈으로 보고 있는 특정 View가 가지고 있는 값을 실시간으로 확인하고 싶을 수 있다. 안드로이드 스튜디오의 Layout Inspector는 바로 이런 기능을 제공한다. 사용법은 아주 간단하다. 아래처럼 Tools > Layout Inspector 로 레이아웃 인스펙터를 활성화 시켜주기만 하면 된다. 그러면 이렇게 스튜디오의 오른쪽 아래 부분에 레이아웃 인스펙터가 활..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CACmY/btqJV7atbcR/3wXaMa16Uevr0jzkqn1B31/img.png)
사건의 발단 깃 브랜치를 옮겨 가면서 작업하고 있었는데, 어느 날 갑자기 빌드 에러가 떴다. No cached version listing for androidx.room:room-common:[2.2.0-rc01] available for offline mode. 오잉? 삽질의 과정 다시 한번 빌드도 해 보고, clean-rebuild도 해 보고, 스튜디오도 껐다 켜 보고, 브랜치도 다시 옮겨 보았지만, 똑같았다. 결국 아래 StackOverflow 답변을 참고하여 해결했다. stackoverflow.com/questions/22607661/no-cached-version-available-for-offline-mode 삽질의 결과 1. View -> Tool Windows -> Gradle 2. to..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lq4ig/btqGgFwbKDW/nzx91Jtafv0Y7K94Bgahg1/img.png)
소프트키와 화면 변화 EditText는 정말 빈번하게 사용되는 뷰이다. 이 EditText를 터치하면 키보드(소프트키)가 화면 하단에서 나타난다. 그런데 가끔, 이 소프트키가 화면을 가리는 경우가 있다. 아래와 같은 상황이 그 예시이다. (가장 처음으로 만들었던 '지나가리라'라는 어플리케이션의 화면이다.) 가장 왼 쪽의 레이아웃에서 키보드가 나오더라도 맨 오른쪽처럼 버튼을 유지하고 싶은데, 가운데의 스크린샷처럼 화면을 반쯤 가리면서 필요한 뷰들이 숨어 버린다. 앗 재난문자가 windowSoftInputMode windowSoftInputMode를 이용하면 키보드가 나타나고 사라졌을 때의 화면 변화 방식을 지정해 줄 수 있다. 가장 대표적인 설정값은 "adjustResize"이다. 이 값은 소프트키가 올라..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dSgbZs/btqGbPycdfI/36ZKzJ30hSl0wXwzfMDkz1/img.png)
사건의 발단 지난 달, openCV를 활용해 이미지처리 기능을 구현하고 있었다. 이미지처리 과정이 상당히 복잡해서, Core 연산이 아주 많이 들어갔다. 메서드 여러 개로 나누어서 작업하고 있는데도 한 메서드가 몇백 줄이 넘어가는 길이였다. 연산이 복잡하기 때문에 어떤 줄에서 초 단위로 느려지는지 눈으로 확인하고 싶었다. 안드로이드 스튜디오의 프로파일러를 활용하면 큰 틀에서의 네트워크나 메서드 단위는 확인할 수 있지만, 한 줄 한 줄의 실행속도를 측정하는 것은 어려워 보였다. 삽질의 과정 그래서 직접 코드로 실행 시간을 확인하기로 했다. 처음에는 일반 예제에서 많이 하듯이 System.currentTimeMillis()만을 활용해 보려고 시도했다. prevTime과 curTime이라는 Long타입의 변수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/brfdev/btqGdMIrEcn/1D68U2ZovUrryOX12tkYrk/img.png)
사건의 발단 기존에 생각하고 있던 개인 SNS 프로젝트를 시작하려고 기본 틀을 잡는 중이었다. 서버사이드를 따로 배워서 시작하자니 기간이 오래 걸릴 것 같아 우선 많이들 사용한다는 Firebase를 써보기로 했다. 내가 예상한 공부 순서는 이랬다. 1. Firebase 활용 예제에 대한 강의를 수강한다. 2. 기본 틀을 새로운 프로젝트로 옮긴다. 3. 코드를 다시 한 번 보면서 꼼꼼히 이해한다. 4. 열심히 손으로 구조를 짜본다. (이 부분은 오래 걸릴 것 같은데 이동안 포스팅은 어떻게 하지? 헤헤) 5. 4에서 작성한 내용의 화면 단을 제작한다. 6. 데이터베이스 기능들을 하나씩 추가한다. 오늘은 2번 단계를 마쳤다. 그리고 이 과정에서 이런저런 사소한 문제들이 발생했다. 대부분은 간단한 방법으로 해결..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cpCS5r/btqGebGCLtb/qYcF5SIBrHapOmZ3pRG8pK/img.png)
스플래시(Splash) 화면과 그 목적 스플래시 화면은 앱의 본격적인 화면이 나오기 전에 1~2초 간 잠시 나타나는 화면이다. 일반적으로 단색 배경에 어플리케이션의 로고가 중앙에 표시되는 경우가 많다. 이 화면은 왜 필요한 걸까? 일단 디자인적인 이유가 있을 수 있다. 브랜드나 앱 이미지를 각인시키기 위해서. 하지만 Splash 화면의 주 목적은 따로 있다. 스플래시 화면이 없는 어플리케이션을 열어 보면, 메인 화면이 표시되기 전에 0.x초동안 텅 빈 화면이 나타난다. 짧은 시간이지만 이렇게 텅 빈 화면이 나타나는 것은 분명히 보기 좋은 현상은 아니다. Splash 화면은 이러한 공백을 채우기 위해 제작된다. Q. 왜 빈 화면이 뜨는 것일까? 공백을 지우기 위해 Splash를 만들기 전에, 이 공백은 왜..