일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- ASMR
- Streaming
- recyclerview
- 공자명언
- 이모지메모
- 좋은글필사하기
- Linux
- 코틀린
- 공부집중
- Android
- DART
- 오픈소스
- 소울칼리버6
- FSM
- Firebase
- kotlin
- 벤자민플랭클린
- 넷플릭스
- 명언모음
- 파이썬
- 명심보감
- 1인개발자
- 장자명언
- Coroutine
- Freesound
- bash
- androidx
- Flutter
- 이모지
- jetpack compose
- Today
- Total
목록Source code or Tip (207)
Vintage appMaker의 Tech Blog
몇년전 문제없이 돌아가던 프로젝트 소스가 최신 Android Studio에서 에러가 발생했다. e: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException 자바버전 에러이다. 자바의 버전이 업그레이드 되면서 이전의 종속성 몇 개가 삭제되었는데, gradle에서 수동으로 추가해주어야 한다. 문제는 어떤 개발환경에서는 java 1.8 환경으로 되어 있기에 java 1.8이상을 사용하는 PC 처럼 종속성을 지정하기에 껄끄러운 경우가 발생한다는 것이다. 그럴경우, java version을 참고하여 선택적 implementation할 수 있다. Gralde은 Groovy 문법을 사용하기에 다음과 같은 코드로 선택적 종속성 처리가 가능하다. // jdk 1.8이..
Android에서 코틀린으로 개발하다보면 closure와 람다는 자신의 의지와 관계없이 많이 사용하게 된다. 그러다보니 어느 순간부터 람다식과 closure를 활용한 코딩스타일에 익숙하게 되는데, 그 때 많이 실수하는 것이 람다식의 scope이다. (1) { 람다를받는함수( {람다식} ) } (2) 람다를받는함수(){ {람다식} } 일반적으로 람다식의 범위는 (1)의 영역인 [람다를받는함수]를 호출하는 영역이다. 그러나 람다를받는함수가 클래스내의 함수(메소드)이고 그 객체를 생성하고 apply를 사용하게 된다면 복잡한 상황이 발생한다. inerCls와 outerCls의 리소스를 동시에 사용할 수 있다. 2.번의 경우, 호출부(innerCls)와 실행부(outerCls) 범위의 리소스를 모두 액세스 가능하..
Flutter로 만든 Audio Player 오픈소스의 대부분은 오래된 Flutter 버전으로 작성된 것이 많다보니 최신 Flutter 환경에서 AndroidX 설정에 문제가 많았다. 그러나 다음 오픈소스는 빌드 시, 리소스 문제(없는 리소스를 읽어오려고 하는 부분을 주석처리)만 해결해주고 컴파일 하면 꽤 만족스러운 Audio Player를 볼 수 있다. 이 오픈소스의 장점은 다음과 같다. 쓸만한 UX Flutter에서 백그라운드 처리 Firebase 연동 단점은 몇가지 있지만 한 가지로 설명하자면 "최적화"에 문제가 있다. A Music Player App made with Flutter Awesome Music Player made with Flutter! flutterawesome.com 👩 git..
Android에서 어떤 위젯 근처의 특정 크기와 위치로 새로운 위젯을 보여주고 싶다면 PopupWindow를 생성하고 showAsDropDown()으로 특정 위젯기준으로 위치와 크기를 지정하여 화면에 보여줄 수 있다. PopupWindow | Android 개발자 | Android Developers developer.android.com 그러나 화면에 PopupWindow를 자주 사용해야 할 경우, PopupWindow 객체를 보관 후, dismiss()를 호출하는 것이 귀찮을 때다 많다. 그럴 경우, kotlin에서는 확장함수와 closure를 이용해 범용적으로 편하게(???) 사용할 수 있다. 📢 [PopupWindow 관리용 확장함수] fun View.dpToPx(dp: Float): Int = ..