반응형

분류 전체보기 129

[Android] Android Studio에서 logcat이 동작하지 않는 이슈 해결.

디버깅을 위해 logcat을 확인해야 할 때, 종종 원하는 로그가 나오지 않을 때도 있습니다. 다양한 원인이 있는데 그중 몇 가지를 소개하려고 합니다. 1. 단순 USB 디버깅 오류 이 경우 단순 에러일 가능성이 높습니다. USB 연결을 다시 하면 정상적으로 로그캣이 작동될 가능성이 높습니다. 2. Invalid Cache 혹은, 캐시 데이터를 날리면 로그가 돌아오기도 합니다. 이를테면, 여러 기기를 테스트하던 중 이전 디바이스와 현재 디바이스 충돌로 인하여 무언가 에러가 발생했을 때 Invalid cache가 효과적일 수 있습니다. 3. USB 디버깅을 허용한 디바이스 로그 버퍼 사이즈 저는 3번 케이스였습니다. 아주 기본적인 라이프 사이클 관련 로그는 나오는데 제가 설정한 로그, 터치 이벤트 로직도 ..

Mobile/Issues 2023.05.15

[Android] Dive into concept of Configuration. (App Lifecycle, 화면 전환 등)

목차 Configuration 소개 Activity Recreate 상태 보존 생성 제한 결론 Configuration 소개 Configuration 클래스는 응용 프로그램 리소스에 영향을 줄 수 있는 모든 장치 구성 정보를 설명한다. 여기에는 사용자 지정 옵션(화면 스케일, 로케일, 입력 모드, 화면 방향 전환, 화면 크기와 같은 장치 구성 정보가 포함된다. val config = resources.configuration와 같이 접근할 수 있다. 일부 기기 구성은 앱이 실행되는 동안 변경될 수 있다. 여기에는 다음이 포함되지만 이에 국한되지 않는다. 앱 디스플레이 크기 화면 방향 글꼴 크기 및 두께 언어 어두운 모드와 밝은 모드 비교 키보드 사용 가능 여부 구성 변경은 대부분 사용자 상호작용으로 인해..

[Android] What is Gradle?

What is Gradle? Gradle은 거의 모든 유형의 소프트웨어를 빌드할 수 있을 정도로 유연한 오픈 소스 빌드 자동화 도구이다.Gradle은 무엇을 구축하려고 하는지 또는 어떻게 구축해야 하는지에 대해 몇 가지 가정을 한다. 이러한 가정이 Gradle을 특히 유연하게 만든다. 안드로이드 스튜디오는 빌드 자동화 도구로 Gradle을 사용한다. 안드로이드 스튜디오에서 실제 빌드는 Gradle이 한다. Gradle은 다음과 같은 일을 한다. Compile : 리소스 및 소스 코드를 컴파일한다. (In Android, Kotlin, Java 코드 → 바이트 코드) Packaging : 코드를 패키징해서 aab, apk 파일로 만들어 준다. Test : 테스트 환경을 구축하고 지원한다. Deploy & ..

Foundation/Android 2023.04.19

[Android] Dive into concept of Android Context. (Application Context and Context)

목차 Context 정의 Context Tree Activity Context, Application Context Activity Context Application Context Context 사용 Context 사용과 메모리 누수 1. static 변수에 ActivityContext 사용 2. singleton 객체에서 ActivityContext 참조 Context 정의 애플리케이션 환경에 대한 전반적인 정보를 담고 있는 인터페이스이다. 여기서 전반적인 정보란, 애플리케이션의 리소스 파일 혹은 View에 대한 정보 등을 포함한다. Context에 쓰임은 주로 activityContext, applicationContext와 같이 사용된다. Context Tree Context는 abstract c..

[Android] 안드로이드 스튜디오 리소스 에러 해결

Button XML 파일을 추가하고 빌드하였더니 갑자기 이런 에러와 마주하게 되었습니다. 단순히 리소스를 추가하고 나타난 에러라 당황스러울 수 있겠습니다. java.lang.RuntimeException: Unable to start activity ComponentInfo 에러 Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. 에러 안드로이드 스튜디오 리소스 에러인 것 같습니다. Build > Clean Build, Build > Rebuild 를 순서대로 해주고 다시 빌드하면 정상적으로 작동하는 것을 확인할 수 있습니다. Invalidate Cache까지 해주셔도 좋을 것..

Mobile/Issues 2023.04.08

[Android] Support different screen size. (큰 화면, 작은 화면 사이즈 대응)

이 글은 Compose를 사용하고 Bottom Navigation을 사용할 때 화면 사이즈에 대한 UI 구성을 부드럽게 하기 위한 간단한 예제이다. 이 예제는 Compose를 사용하였습니다. 이 글은 PC로 보는 것을 권장합니다. 1. Dependency 추가 Material3 Library Window Size Class를 사용하면 기기 화면 사이즈를 구할 수 있다. 실제 기기 사이즈와 앱 스크린 사이즈는 다를 수 있다. 출처 : https://developer.android.com/jetpack/androidx/releases/compose-material3?hl=ko 2. Code calculateWindowSizeClass()를 통해 window width size를 구할 수 있다. HomeScr..

[Kotlin] Abstract class

소개abstract class는 template class 처럼 사용할 수 있다. 하나의 설계도 혹은 청사진으로써 그 역할을 한다. 독립적으로는 어떠한 행동을 할 수 없으며 다른 class와의 관계를 통해서 그 역할을 한다. abstract class 안에 멤버는 하나 이상 abstract로 선언될 수 있으며, 선언된 멤버는 구현체를 갖지 않는다. 또한, abstract로 선언되었다면 open 키워드를 사용할 필요가 없다. abstract 로 선언된 멤버는 반드시 abstract class를 상속 받고 있는 클래스 내에서 구현되어야 하기 때문이다.abstract class Rectangle() { val vertex = 4 // 꼭지점의 개수. 불변. 확정. abstract val width: Int /..

[Kotlin] Sealed Class

소개상수로 정의한 특정 값들을 enum class로 정의하여 사용할 수 있다. 그렇게 하면 엉뚱한 값이 할당되는 상황을 방지할 수 있어 개발자의 실수를 줄일 수 있다. 이런 enum class의 한계는 내부적으로 각 enum constant는 하나의 single instance를 갖기 때문에 서로 다른 객체를 가질 수 없다는 것이다. 또한, Kotlin에서 자주 사용하는 when 문을 사용할 때, enum value가 누락되었어도 어떤 오류 메시지를 발생시키지 않는다. 반면에, sealed class를 사용하여 구현하였을 경우 when 문 안에서 누락된 값을 캐치할 수 있다. 설명sealed class와 interface는 상속에 대한 더 많은 제어를 제공하는 제한된 클래스 계층을 나타낸다.sealed ..

[Kotlin] Interfaces

설명코틀린 인터페이스는 추상 멤버와 구현체를 모두 포함할 수 있다.abstract와의 차이점은 인터페이스 안에 상태를 저장할 수 없다.properties는 가질 수 있지만 abstract이거나 접근 구현체(accessor implementations)를 제공해야 한다.interface MyInterface { fun bar() fun foo() { // optional body } } Properties in interfaces인터페이스 안에 properties를 선언할 수 있다.인터페이스 안에 선언된 property는 backing field를 가질 수 없다.interface MyInterface { val prop: Int // abstract val propertyWithImplementation:..

[Koltin] Object Keyword. (싱글톤 패턴, 익명 함수)

경우에 따라 새 하위 클래스를 명시적으로 선언하지 않고 일부 클래스를 약간 수정한 개체를 만들어야 한다. 코틀린은 객체 표현식과 객체 선언으로 이를 처리할 수 있다. Object expressions 객체 표현식은 익명 클래스, 즉 클래스가 명시적으로 선언되지 않은 클래스의 객체를 만든다. 이러한 클래스는 일회용으로 사용하기 유용하다. 처음부터 정의하거나 기존 클래스에서 상속하거나 인터페이스를 구현할 수 있다. 익명 클래스의 인스턴스는 이름이 아닌 식에 의해 정의되므로 익명 객체라고도 한다. Creating anonymous objects from scratch 객체 표현식은 object 키워드를 사용한다. val helloWorld = object { val hello = "Hello" val worl..