안드로이드 287

[안드로이드/Android] Parcelable 과 Serializable

What is Parcelable and Serializable Android 에서 Activity 간 이동이나 다른 앱으로 Component 이동 시 Intent를 사용한다. 이런 경우 데이터 객체를 같이 전달해야하는 경우가 새인다. 이 때 데이터 객체 즉, Class를 직렬화 하는 부분을 추가하여 사용하는데, Parcelizable 과 Serializable을 사용한다. 개발자 편의성 측면에서는 Serializable이 런타임시 성능 측면에서는 Parcelable 낫다고 함. But, 그것에 반대 의견을 제시하는 사람들도 있음. 반대의견보기 Serializable 예시 import java.io.Serializable data class User(val name: String?, val age: In..

안드로이드 2023.02.15

[안드로이드/Android] WebRTC PeerConnection.IceServer() is deprecated.

안드로이드에서 WebRTC 구현 시 stun server, turn server 가 있어야 하는데요. 해당 서버들을 직접 만들지 않고 제공 받아서 구현합니다. 물론 만들 수도 있겠죠? 해당 서버들을 제공받아 구현할 때 Peerconnection.IceServer("url", "username", "password") 을 사용했었는데요. IceServer(...) 는 deprecated 되었습니다. 대신에 builder() 를 호출하고 각 값들을 알맞게 set 해주시면 됩니다. PeerConnection.IceServer.builder("turn:aaawrelay.metered.ca:80").setUsername("username").setPassword("password").createIceServer()

안드로이드 2023.02.13

[안드로이드/Android] local.properties 활용하기/변수저장하기

안드로이드에는 local.properties 라는 파일이 있습니다. 위치 파일을 열어 이미지 처럼 변수를 저장해주면 됩니다. buid.gradle 이나 settings.gradle 에서도 사용할 수 있습니다. 사용할 때는 아래 코드처럼 사용하면 됩니다. kotlin settings.gradle.kts 에서 외부 라이브러리 경로를 불러올 때 사용했습니다. // 호출 project(":externalLibrary").projectDir = File(getExternalModuleDir()) // 메서드 선언 fun getExternalModuleDir(): String { val properties = java.util.Properties() properties.load(File(rootDir.absolut..

안드로이드 2023.02.10

[안드로이드/Android] Android Photo Picker directions.

안드로이드에서 갤러리 이미지, 동영상을 별도 권한 없이 더욱 쉽게 가져올 수 있도록 Photo Picker 라는 녀석이 생겼습니다. API 30 이상에서, androidx.activity 버전 1.6.1이상에서 사용할 수 있습니다. // 싱글 이미지 또는 비디오 선택 private val pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> if (uri != null) { Log.d("Photo Picker", "Selected URI: $uri") selectedImageView.setImageURI(uri) } else { Log.d("`Photo Picker", "No media select..

안드로이드 2023.02.07

[Android/안드로이드] Flow colect 취소하기/cancellable Flow

Flow를 취소할 수 있는 거 아시나요? 상황에 따라 Flow의 collect() 를 취소해야할 수 있습니다. val combineJob = lifecycleScope.launch { combine( viewModel.socketClose, connectionViewModelV2.networkState, viewModel.state ) { socketClose, networkState, selfStudyListState -> Timber.tag("socketClose").d("$socketClose") Timber.tag("networkState").d("$networkState") when (networkState) { is NetworkState.Connected -> { network = true ..

안드로이드 2023.01.26

"./il2cpp.exe'' finished with non-zero exit value 126 in mac

안드로이드에 유니티 라이브러리를 추가하여 사용할 때 맥에서 제목처럼 il2cpp.exe'' finished with non-zero exit value 126 에러가 발생한다면 유니티 라이브러리가 윈도우 운영체제에서 개발된 파일이라 그럴 수 있습니다. 맥에서 안드로이드 개발 시 유니티 라이브러리를 사용해야한다면 맥에서 Export한 유니티 라이브러리를 사용해야 합니다. 윈도우에서 Export 할 경우 .exe 실행파일들이 생기는데, 맥에서 이 실행파일들을 실행할 수 없어서 발생하는 에러로 예상됩니다. 저는 이 문제로 며칠을 고생했는데, 저같은 실수를 하는 분이 없기를... 끝.

안드로이드 2022.11.03

[Kotest] Android Unit Test 한글 깨짐 해결

안드로이드 스튜디오에서 Help -> Edit Custom VM options 를 클릭하면 studio64.exe.vmoptions 라는 파일이 열립니다. # custom Android Studio VM options, see https://developer.android.com/studio/intro/studio-config.html -Xmx8192m 이런 식으로 되어 있을텐데 가장 아래에 -Dfile.encoding=UTF-8 요 코드를 추가해서 # custom Android Studio VM options, see https://developer.android.com/studio/intro/studio-config.html -Xmx8192m -Dfile.encoding=UTF-8 위 처럼 만들어주고..

안드로이드 2022.10.26

[안드로이드/Android] resources.getIdentifier 사용법

안드로이드에서 문자열을 사용해 리소스를 불러와야하는 경우가 있습니다. 이런 경우, R.string.aaa, R.raw.aaa, R.drawable.aaa 처럼 사용할 수 없습니다. 대신해서 resources.getIdentifier(String name, String defType, String defPackage) 위 같은 함수를 제공합니다. 1. 문자열 불러올 때 resources.getIdentifier(string_resource_name, "string", mActivity.packageName) 2. 이미지 불러올 때 resources.getIdentifier(drawable_resource_name_without_extension, "drawable", mActivity.packageName..

안드로이드 2022.08.17

안드로이드 hilt 적용 시 발생 오류 dagger.hilt.android.plugin.task.AggregateDepsTask$WorkerAction, Execution failed for task ':app:kaptDebugKotlin 해결 방법

프로젝트 수준 build.gradle 에 plugins { id 'com.android.application' version '7.2.1' apply false id 'com.android.library' version '7.2.1' apply false id 'org.jetbrains.kotlin.android' version '1.7.0' apply false id 'org.jetbrains.kotlin.jvm' version '1.7.0' apply false id 'dagger.hilt.android.plugin' version '2.42' apply false } 가장 아래 줄처럼 힐트 를 추가해주면 된다. 끝.

안드로이드 2022.07.07