Kotlin programming

    Update Android Target SDK 32 Version

    Update Android Target SDK 32 Version

    개발을 하다보면 알게 모르게 gradle의 버전을 업데이트에 대한 막연한 두려움이 있습니다. 업무를 하다보면 뒤로 미루게 됩니다. 이번에 미뤄뒀던 targetSdkVersion 업데이트를 하면서 작업한 내용을 공유 하려고 합니다. 개요 2022년 11월 부터 앱업데이트를 위해서는 API 수준을 31 이상을 타겟팅해야 한다는 얘기 입니다. 벌써 11월이네요 준비를 안하신 분들은 서둘러 적용 하셔야 할 것 같습니다. 적용하기 1. gradle 적용 defaultConfig { //... targetSdkVersion 32 // 30 -> 32 //... } 기존 30으로 되어 있는 버전을 32로 바꿔줍니다.(아 쉽다~) 빌드를 하자 마자 오류가 터지기 시작합니다. 2. 오류 수정 a. exported 설정 ..

    [Compose] 'by' 가 동작하지 않을 때

    Compose by rember is not working compose 학습 중 by를 사용하려 했더니 빨간줄로 나와 사용할 수 없어서 찾아 보니 import가 누락 돼서 발생한 에러 였습니다. import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue 직접 상단에 입력하면 사용 할 수 있습니다.

    [kotlin] 이미지 불러오기 실패 (EACCES (Permission denied))

    최근 작업하던 앱 중 하나에서 이미지 불러오는게 안된다는 코멘트를 받았습니다. 보유한 디바이스들을 테스트 하던중 동일한 증상이 발생하지 않아서 고민 하고 있던 찰나에 해당 버그가 났던 디바이스는 Android 10 을 사용하는 유저만 오류가 나는것 같아서 AVD를 android 10 으로 맞추고 테스트 진행 했습니다. 이미지 피커로 이미지 선택시 아래와 같은 메세지가 나왔습니다. open failed: EACCES (Permission denied) 기존에 사용하는 피커 라이브러리에서 필요한 권한은 받고 있었기 떄문에 읽기나 쓰기 권한을 추가할 필요는 없었는데 Android 10 이하 기기 에서 manifests 안에 requestLegacyExternalStorage="true" 를 넣어햐 정상 동작하..

    [Android]릴리즈 모드에서 디버그 하기(Debug in release mode.)

    1. manifests > application 에 두가지 추가 tools:ignore="HardcodedDebugMode" android:debuggable="true" 2. gradle > release 에 코드 추가 buildTypes { // 출시용 release { debuggable true } } 하면 릴리즈 버전에서도 디버그가 가능하다. + 해당 코드는 테스트가 종료 되면 바로 제거 하는게 좋습니다. 이대로 마켓에 올리게 되면 심사에 떨어지게 됩니다.

    [Kotlin] 현재 사용중인 BaseActivity

    abstract class BaseActivity : AppCompatActivity() { abstract val viewModel: VM protected lateinit var binding: VB abstract fun getViewBinding(): VB private lateinit var fetchJob: Job override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // this.overridePendingTransition(R.anim.fade_in, R.anim.fade_out) binding = getViewBinding() setContentView(binding.root) fetc..

    [Android studio] 에뮬레이터 tool window에서 실행 하기

    [Android studio] 에뮬레이터 tool window에서 실행 하기

    안드로이드 스튜디오 tool window(sidebar)에 실행 시키는 옵션 Preferences > Tools > Emulator > Launch in a tool window 이렇게 해서 실행 하면 아래와 같이 스튜디오에 붙어서 나옵니다.

    [Kotlin] txt 파일 생성하고 데이터 내보내기(export txt file)

    파일 생성하고 관리 하려면 권한이 필요 한데 ACTION_CREATE_DOCUMENT 를 이용하면 인텐트로 알아서 디바이스에 저장 위치를 넘길 수 있다. 참고 : https://developer.android.com/training/data-storage/shared/documents-files?hl=ko 1. 파일 이름, 데이터 형식 선언 하고 ACTION_CREATE_DOCUMENT 하기 private fun exportTxtFile() { createFile("파일이름.txt", "text/plain") } private fun createFile(filename: String, mimeType: String) { val intent = Intent(Intent.ACTION_CREATE_DOCUME..

    [Kotlin][Naver login 구현] 앱이 설치돼있지 않을 때 로그인 시도 시 발생하는 에러

    네이버 로그인 기능 구현 중 디바이스에 앱이 설치돼 있지 않을 때 앱이 종료 되는 현상이 발생 하였다. 오류 메세지는 아래 첨부 했고 원인을 찾아 보니 네이버 로그인 라이브러리에서 사용하는 브라우저 라이브러리의 임포트가 필요 했다. 오류 메세지 - java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/browser/customtabs/CustomTabsIntent$Builder; java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/browser/customtabs/CustomTabsIntent$Builder; at com.nhn.android.naverlogin.util.Custom..

    [Kotlin] 키보드 내리기 Hide keyboard

    안드로이드 디바이스의 소프트 키보드를 내리려면 아래 와 같은 소스를 extension으로 등록해 놓으면 편합니다. import android.app.Activity import android.content.Context import android.view.View import android.view.inputmethod.InputMethodManager import androidx.fragment.app.Fragment fun Fragment.hideKeyboard() { view?.let { activity?.hideKeyboard(it) } } fun Activity.hideKeyboard() { hideKeyboard(currentFocus ?: View(this)) } fun Context.hid..

    [Compose] 하철이 - 가로 스크롤 아이템

    [Compose] 하철이 - 가로 스크롤 아이템

    Compose 스터디를 위해서 기존 개발된 "하철이"앱을 compose 로 바꿔보는 중입니다. 1. 기본 텍스트 상단 Text( text = "실시간 하철이", fontSize = 25.sp, textAlign = TextAlign.Center, modifier = Modifier .align(Alignment.CenterHorizontally) .padding(top = 35.dp) .fillMaxWidth() ) 2. 가로 스크롤 Row LazyRow( modifier = Modifier.fillMaxWidth().padding(5.dp), state = rememberLazyListState() ) { items(subwayLines) { subway -> stationLinesItem(subway..