Android

    Android 난독화란?

    개요 Android 앱 난독화 시 사용되는 Proguard에 대해서 알아본다. 목표 Android에서 Proguard 난독화를 통해 얻어지는 이점을 설명할 수 있다. Proguard란? 프로가드(ProGuard)는 자바 코드를 축소하고 최적화하고 난독화하는 오픈 소스 명령 줄 도구이다. 바이트코드를 최적화할뿐 아니라 사용하지 않는 명령어를 찾고 감지할 수 있다. Proguard는 Android SDK에 포함되어 배포되고 있으며, 많은 Android 개발자들이 프로가드를 이용하여 쉽게 최적화 및 난독화 기능을 사용할 수 있다. Android Gradle 플러그인 3.4.0 이상을 사용하여 프로젝트를 빌드하는 경우 플러그인은 더 이상 ProGuard를 사용하여 컴파일 시간 코드 최적화 작업을 하지 않는다. ..

    Flow 재요청 버튼 활용하기

    개요 Android App의 Flow API 사용 중 오류 발생 시 버튼을 통해 재 요청이 가능하도록 기능 구현 중 이었다. 그러나 재 요청 버튼 클릭 시 로그상으로 2회 이상 응답을 받아오는 현상이 발생했고, 이를 어떻게 수정했는지 공유하고자 한다. 먼저, 구현부를 살펴보겠다. viewModel에서 이미지 목록을 요청하는 코드인데, imageFlow 요청 실패 시 Error UI가 보여지고, Error UI의 버튼 클릭 시 fetchImageList() 함수를 수행하도록 했다. class MainViewModel @Inject constructor( private val gettyRepository: GettyRepository ): ViewModel() { val isLoading: MutableLi..

    A problem occurred configuring root project 'Unscramble'.> Could not resolve all files for configuration ':classpath'. 오류해결

    개요 android codelab (https://developer.android.com/codelabs/basic-android-kotlin-compose-viewmodel-and-state?hl=ko#2) 수행 중 android studio 버전 업데이트가 필요하다는 메세지를 보고 업데이트 수행 (dolphin -> flamingo) 이후 codelab 소스코드 Gradle project sync 실패 Compose의 ViewModel 및 상태 | Android Developers 이 Codelab에서는 아키텍처 구성요소 중 하나인 ViewModel을 사용하는 방법을 알아봅니다. 구성 변경 중에 앱 상태를 유지하도록 ViewModel을 구현합니다. developer.android.com 해결방법 ht..

    Android AppBar(Toolbar) Menu에 Lottie 사용하기

    안드로이드 앱의 메뉴 아이템에 Lottie Json을 사용 및 이벤트 처리하는 방식을 소개한다. LottieImageView를 통해 사용하는 방법은 자료들이 꽤 있었지만, 나처럼 앱바에서 Lottie를 사용하는 예제는 많지 않은 것 같아서 글을 써본다! 이 글에 사용된 방법은 Lottie 5.2.0 버전에서 구현한 방법이다. 최신버전의 Lottie는 Lottie Github에서 확인할 수 있다. https://github.com/airbnb/lottie-android GitHub - airbnb/lottie-android: Render After Effects animations natively on Android and iOS, Web, and React Native Render After Effect..

    kotlin data class redeclaration error 해결하기

    현재 진행하는 사이드 프로젝트 작업 중 데이터 클래스에 대해서 파일을 하나만 선언했는데에도 gradle 빌드 중 redeclaration 오류가 발생하는 현상이 있었다. Windows 환경에서는 잘 동작하지만 Mac 환경에서는 항상 발생하는 것으로 봐서 환경적인 문제로 생각되어 Invalidate cache 및 Restart 시도 해봤지만 동일하게 발생하여 구글링 한 결과 해결할 수 있었다. gradle 캐시를 지운 후 정상적으로 동작했다. ./gradlew clean rm -rf ~/.gradle/caches/* Mac 또는 Linux 환경에서 권한이 없다고 아래처럼 터미널 창에 표시 될 경우에는 chmod 명령어를 통해 권한을 주자. zsh: permission denied: ./gradlew 여튼 ..

    manifestPlaceholders가 값을 찾지 못할 때 해결방법

    개발 도중 manifestPlaceholders를 통해 카카오 앱 키를 local.properties 파일에서 읽어오는 기능이 필요했는데 매니페스트에서 읽을 때에만 정상적으로 읽지 못해서 카카오맵이 정상적으로 보이지 않는 이슈가 있었다. 원인은 매우 간단했는데, local.properties에서 선언한 앱키를 따옴표 없이 감싸준 이후 정상동작 했다. 아래는 참고 할만한 코드를 공유 해본다 // build.gradle Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def KAKAO_API_KEY = properties.getPrope..

    Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView

    E/AndroidRuntime: FATAL EXCEPTION: main Process: com.hyeonwoo.art_android, PID: 26068 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hyeonwoo.art_android/com.hyeonwoo.art_android.ui.main.MainActivity}: android.view.InflateException: Binary XML file line #35 in com.hyeonwoo.art_android:layout/activity_main: Binary XML file line #35 in com.hyeonwoo.art_android:layout/activi..

    android studio에서 실행한 앱이 설치되지 않을 때

    최근 개발중인 사이드 프로젝트 앱에서 안드로이드 스튜디오를 통해 앱을 실행할 경우, 실행은 되지만 앱이 설치가 되지않는 현상이 있었다. 해당 이슈의 원인은 바로! AndroidManifest 파일에 있었는데 위의 인텐트 필터를 보면 MAIN, LAUNCHER와 함께 여러 값들이 있는데, MAIN, LAUNCHER에는 데이터 태그를 처리할 수 없다고 한다... 그래서 아래처럼 인텐트 필터를 분리시켜주면 된다고 한다. 이제 다시 설치해보자!! 정상적으로 앱이 설치된걸 확인했다. Reference : https://stackoverflow.com/questions/20285496/android-application-installed-but-wont-open-on-device Android Application..

    error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements ArtOnApplication_GeneratedInjector,

    Hilt를 사용하면서 만난 오류이다. error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements ArtOnApplication_GeneratedInjector, 에러가 난 코드는 아래와 같다. class KakaoAuthService @Inject constructor( @ActivityContext private val context: Context ) { fun startKakaoLog..

    Android WebView 테스트 샘플 앱 개발 - 2

    이전시간에는 Android WebView를 통해 당근마켓 홈페이지를 표시하는 기능을 개발했습니다. 그러나 WebView 또다른 url로 이동하게 될 경우 WebView 내부가 아닌, 외부 브라우저를 통해 앱이 페이지가 표시되는 이슈가 있었습니다. 이를 해결해봅니다. Android Developer 페이지의 WebView 문서에서 이 문제를 간단하게 해결할 수 있는 방법을 제시합니다. 사용자가 WebView에서 웹페이지의 링크를 클릭하면 URL을 처리하는 앱이 Android에서 실행되는 것이 기본 동작입니다. 대개 기본 웹브라우저에 도착 URL이 열리고 로드됩니다. 하지만 링크가 WebView내에서 열리도록 WebView의 이 동작을 재정의할 수 있습니다. 그러면 WebView에 의해 유지 관리되는 웹페이..