일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mysql
- GCP
- Koin
- node
- paging
- databinding
- 동영상
- 테스트 자동화
- MotionLayout
- MediaPlayer
- Reactive
- Android 13
- Android
- node.js
- SWIFTUI
- Kotlin
- list
- Animation
- google play
- RxKotlin
- 인앱결제
- Observable
- MediaSession
- rx
- PagingLib
- junit
- android13
- SwiftUI Tutorial
- mvvm
- liveData
- Today
- Total
목록Android (53)
봄날은 갔다. 이제 그 정신으로 공부하자
이번 글에서는 지난 글에 이어서 조금 심화된 내용인 Multidex 사용시 발생할 수 있는 이슈와 해결방법 그리고 개발 환경에서 최적화에 대해 설명합니다. Multidex 라이브러리 제한사항 Multidex 라이브러리에는 몇 가지 알려진 제한 사항이 있으며 이 라이브러리를 앱 빌드 구성에 통합할 때 이러한 제한 사항을 파악하고 테스트해야 합니다. 첫번째 제한 사항 시작 중에 기기 데이터 파티션에 DEX 파일을 설치하는 작업은 복잡하며 보조 DEX 파일이 큰 경우 애플리케이션 응답 없음(ANR) 오류가 발생할 수 있습니다. 이 문제를 방지하려면 앱 축소를하여 DEX 파일의 크기를 최소화하고 코드에서 사용되지 않는 부분을 삭제합니다. 두번째 제한 사항 Android 5.0(API 수준 21) 이전 버전에서 ..
android는 앱 및 앱이 참조하는 라이브러리에서 메서드가 65,536개를 초과하면 앱이 android 빌드 아키텍처의 제한에 도달했음을 알리는 아래와 같은 빌드 오류를 발생시킵니다. trouble writing output: Too many field references: 131000; max is 65536. You may try using --multi-dex option. 65536(64K)이라는 숫자는 단일 DEX(Dalvik Executable) 바이트 코드 파일 내에서 코드가 호출할 수 있는 참조의 총 갯수를 나타냅니다. 즉, 이 에러는 Dalvik이 바이크 코드내에서 호출할 수 있는 참조의 총 갯수를 초과했기 때문에 빌드 에러를 리턴하는 것 입니다. 이번 글에서는 Muldidex를 사용하..
앱을 개발하다보면 설정값 변경 등으로 초기화가 필요해 불가피하게 앱을 재실행해야하는 경우가 발생합니다. 이번 글에서는 앱을 재실행하는 방법에 대해 초간단하게 설명합니다. 아래 코드는 context를 가지고 있는 Activity를 기준으로 작성되었으며 PackageManager를 통해 앱 이름(PackageName)으로 Intent를 생성한 후에 해당 Intent로 부터 componentName을 가져오고 이걸로 Intent class에서 지원하는 makeRestartActivityTask()함수를 호출해 별도의 restartIntent를 만들고 startActivity()함수를 호출하면 앱이 재실행됩니다. val intent = packageManager.getLaunchIntentForPackage(p..
개발을 하다보면 힘들게 개발했는데 기능 변경 또는 시나리오의 변경으로 사용되지 않는 소스 코드가 다수 생기곤 합니다. 이럴때 어떻게 하시나요? - 1번 과감하게 삭제한다. - 2번 삭제하는건 쫄리니까 우선 남겨놓고 나중에 기회가 될때 삭제한다. (실제로는 절대 삭제 안함.) 1번을 선택하는 경우도 있겠지만 대부분 2번을 선택할 것으로 생각됩니다. 저같은 경우 1번을 선택해서 과감하게 소스 코드를 삭제했다가 다시 시나리오가 변경되면서 그 삭제했던 코드가 다시 필요해져서 복구하는데 꽤 고생했던 기억이 종종 있습니다. 그렇다보니 사용되지 않는 소스코드라도 삭제하기 보다는 이후 어떻게 될지 모르는 재사용 시점을 기다리면서 일단 내버려두는 편입니다. 이런 코드가 한두개씩 꾸준히 쌓여 점점 프로젝트의 코드 가독성을..
개발 중 조금 난해한 문제가 발생했습니다. 요구사항을 파악해보면 Spinner로 개발하는게 맞는데 Spinner로 개발하기에는 너무 많은 리소스가 소모된다는 문제가 발생했습니다. 그래서 이걸 어떻게할까 고민하다 우선 Adapter도 만들고 layout xml도 만들고해서 Spinner로 만들어보았습니다. 역시 만족스럽지 못했습니다. ㅠ_ㅠ 그래서 다른 개발자들이 만들어놓은 custom spinner를 찾아봤는데 미천한 검색 실력으로는 요구사항에 맞는 custom spinner를 찾을 수 없었습니다. 음… 어떡하지? 그냥 쿨하게 Button에 PopupWindow를 사용해서 개발하기로 했습니다. 요구사항 자체가 Spinner에 비교했을 때 난해한 문제였지 PopupWindow를 사용해 개발하면 그리 어려운..
이번 글에서는 android에서 기본으로 지원하는 AlertDialog를 활용하여 Dialog를 custom하는 방식에 대해 설명합니다. 저는 기본 AlertDialog가 좋은데 다른 사람들은 AlertDialog를 싫어하더라구요. ㅠ_ㅠ 일반 Dialog 만들기 android에서 지원하는 AlertDialog는 Builder(디자인 패턴의 Builder pattern 맞습니다.)를 지원하기 때문에 아래와 같이 간단히 dialog를 만드는 것이 가능합니다. 정말 심플하네요. AlertDialog.Builder(this) .setTitle("TITLE") .setMessage("MESSAGE") .setNegativeButton("NO", { dialogInterface: DialogInterface, i..
이번 글에서는 기존에 Java에서 사용하던 방식에 비해 많은 부분이 상이한 kotlin의 Callback 사용 방식에 대해 설명합니다. Java Java에서 callback을 사용하기 위해서는 interface를 선언해주고 콜백을 받는 곳에서 interface를 정의해주고 콜백을 호출하는 곳에서 콜백 인스턴스를 호출해주면 됩니다. 선언 및 정의 그리고 사용은 아래와 같습니다. // interface 선언 public interface MyCallback{ public void onClick() } // 콜백을 받는 곳에서 interface 정의 MyCallback callback = new MyCallback(){ @Override public void onClick(){ // Click~~~ } } /..
이전 글에서 MVVM & Databinding & ROOM ... 등을 사용해서 다양한 방식으로 리스트를 만드는 방법에 대해 설명했는데 개발을 하다보면 이런 복잡한 구조가 아닌 문득 예전에 사용하던 Simple한 방식이 필요할때가 있습니다. 이 글은 MVVM 이런거 없이 기본으로 돌아가 리스트를 만드는 방법에 대해 설명합니다. 이글은 내용이 간단해 별도의 설명 없이 코드 위주로 작성되었습니다. 이전글: - als2019.tistory.com/31 - als2019.tistory.com/32 여러가지 방식으로 List 만들어보기 - part 2 이전 글에서 여러가지 형태의 List 샘플 기초를 만들어보았는데요. 실제 앱을 개발하다보면 이전 글과 같은 단순한 리스트를 만드는 경우는 거의 없습니다. 거의 대부..