Kotlin programming/코틀린(kotlin)

    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 설정 ..

    [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..

    [Kotlin] JCenter 서비스 업데이트로 인한 mavenCentral 전환 이슈(Migration Jcenter to mavenCentral)

    [Kotlin] JCenter 서비스 업데이트로 인한 mavenCentral 전환 이슈(Migration Jcenter to mavenCentral)

    JCenter 서비스 업데이트 여러 Android 프로젝트에서 사용하는 JCenter 아티팩트 저장소를 유지하는 회사인 JFrog가 2021년 3월 31일에 JCenter를 읽기 전용 저장소로 만들었습니다. 발표에 따르면 JCenter는 기존 아티팩트의 다운로드를 무기한으로 허용합니다. JCenter에 아티팩트를 게시하는 개발자는 패키지를 Maven Central과 같은 새 호스트로 이전해야 합니다. JCenter의 종속 항목을 사용하는 개발자는 이러한 종속 항목의 업데이트된 버전의 새 위치를 찾아야 합니다. Jcenter()가 읽기 전용으로 바뀌면서 해당 라이브러리의 유지는 가능 해졌지만 지속적인 업데이트를 위해서는 저장소의 변경이 필요 합니다. Migration JCenter to mavenCentr..

    [Kotlin] ONE UI 4.0 업데이트 하고 나서 앱이 사라 졌다! ㅠㅠ

    화면 검수를 위해서 One UI 업데이틑를 하고 앱을 실행하려는데 내 앱이 사라졌다 급하게 소스를 열어서 빌드 하니 빌드는 정상인데 내 핸드폰에 설치를 하려니 아래와 같은 오류가 발생했다. 원인 : Android 11 이하에서는 manifests에 설정 시 exported가 기본으로 exported=true로 되어 있기 때문에 필요시에만 exported=false로 선언해서 사용 되었습니다. Android 12 에서는 exported 를 명시적으로 선언해야 한다 (단. intent-filter 가 있는 것에만 추가해 주면 된다.) List of apks: [0] '/Users/~/Desktop/android_example/SimpleCompass/app/build/outputs/apk/debug/app-..