New Post
- 크롬 재실행마다 자동 로그인이 모두 풀리는 문제 more
- The device already has an application with the same package but a different signature. more
- java.lang.RuntimeException:::Unable to start activity ComponentInfo, NullPointerException:::Attempt to invoke interface method more
- MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android more
Dev
- DevLog:::개발중인 테스트기기에서만 Log를 확인할 수 있게 하기 코드를 짜는 개발중에는 좀 더 상세한 파악을 위해서 작동하는 코드의 중간중간마다 아래와 같이 Log를 붙여놓아야 문제가 발생할경우 헤메는 경우를 줄일 수 있습니다. Boolean result = false; public void somethingWork_A() { Log.d("로그 somethingWork_A",String.valueOf(result)); result = true; startSomething_A() } public void startSomething_A() { result = false; Log.d("로그 startSomething_A",String.valueOf(result)); } 보통 개발중에는 코드의 여기저기에 위와 같이 로그를 붙여놓고 사용하고 개발이 끝난 후에는 부분에는 로그가.. 2021.08.31
- AndroidStudio 4294967201 오류 ::: AMD CPU를 사용하는 시스템에서 AVD 사용을 위해 android emulator 설치할 때 1. 문제 AMD CPU를 사용하는 시스템도 안드로이드 스튜디오의 AVD를 사용하여 앱일 테스트 할 수 있습니다. 몇년 전에 어떻게 사용할 수 있는지 아래와 같은 글을 올린적이 있습니다. featherwing.tistory.com/16 라이젠 PC 에서 Android Studio AVD 사용하기 인텔 기반 시스템을 사용하다가 라이젠 기반의 개발 머신으로 변경후에 당황했던 것이 빌드후 테스트를 할 때 AVD를 사용하려 하니 Emulator : emulator : ERROR : x86 emulation currently requires hardware acc.. featherwing.tistory.com 저도 라이젠 기반의 워크스테이션을 가지고 있고, 이를 이용하여 개발하고 있는데요. 며칠전에 AVD를 사용.. 2021.04.01
- A failure occurred while executing com.android.build.gradle.--- 빌드 or APK 생성시 해당 오류가 발생할 때 1. 문제 안드로이드 앱을 Build 하거나 APK를 생성할 때 아래의 오류등이 발생하며 빌드가 되지 않는 경우가 있습니다. A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable 발생하는 상황을 비교해 보면 테스트 디바이스나 AVD에서 테스트할때는 발생하지 않다가, Build나 APK 파일을 생성할때 발생하는것을 확인했습니다. com.android.build.gradle 이후는 여러가지로 변경되어 나타납니다. 2. 원인 발생원인은 프로젝트에서 빌드시 캐싱된 파일등이 꼬여서 발생합니다. 3. 해결방법 따라서 이때의 해결방안은 간단합니다. 안드로이드 프로.. 2020.12.09
- webview의 loadData 사용 시 화면에 아무것도 나타나지 않을때 위와 같이 Open Source Licence 화면을 만들때 webview와 webview.loadData를 사용하곤 합니다. 보통 String 리소스에 해당 부분의 내용을 작성해 둔 후 아래와 같이 사용하면 화면의 webview에 간단하게 내용을 보여줄 수 있습니다. public void initWebview() { setContentView(R.layout.activity_setting_web); WebView webview = findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.setVerticalScrollBarEnabled(true); String HTML= getString(R.string.O.. 2020.07.20
- CheckBox, switch 등을 ReadOnly처럼 사용하기 CheckBox나 Switch등은 클릭 이벤트가 발생하면 체크가 되거나 스위치가 온오프되는 편리한 기능을 가지고 있습니다. 보통은 아래와 같이 사용합니다. mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { mCheckBox.setChecked(isChecked); @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { //TODO check true } else { //TODO check false } } }); 별다른 처리를 하지 않더라도 편리하게 사용할 수 있는 이 기능은, .. 2020.06.02
Exceptions
- The device already has an application with the same package but a different signature. 안드로이드 스튜디오를 사용하다 보면, 기존 PC에서 작업하던 내용을 Git을 이용하여 변경내용을 Commit 하고 이어서 다른 PC 에서 작업하는 경우가 굉장히 많습니다. 그런데 앱의 작동은 결국 기기를 통해서 테스트 해봐야 하는데 기존 PC에서 그대로 코드를 짜나가며 테스트 할 때는 앱을 재설치해도 업데이트되지만 다른 PC에서 설치하려고 할때는 위와 같은 메시지가 뜨면서 기존에 설치된 앱을 지우고 재설치해야 하게 됩니다. 앱에 테스트용 데이터가 입력되어 있는 경우가 있다면 앱을 지우고 재설치하게 되면 데이터를 다시 입력해야하기 때문에 굉장히 불편하게 됩니다. 이 문제는 Debug할 때 서명하는 debug keystore가 달라서 생기는 문제인데요 해당 debug keystore는 안드로이드 스튜디오를 .. 2023.10.28
- java.lang.RuntimeException:::Unable to start activity ComponentInfo, NullPointerException:::Attempt to invoke interface method 1. 프로젝트 빌드는 문제없이 잘되는데 테스트를 위해 앱을 실행할 때 발생하였습니다. 보통 아래의 Exception(RuntimeException, NullPointerException)들이 랜덤으로 발생하는데, Logcat에서 띄워주는 코드 라인으로 가도 어떠한 문제도 없었습니다. java.lang.RuntimeException: Unable to start activity ComponentInfo java.lang.NullPointerException: Attempt to invoke interface method Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void androidx.appcompat.wi.. 2023.04.05
- MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26): Lorg/apache/logging/log4j/util/ServiceLoaderUtil;callServiceLoader(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/Class;Ljava/lang/ClassLoader;Z)Ljava/lang/Iterable; 1. 새로운 라이브러리를 implementation 한 이후 프로젝트를 빌드할 때 발생하였습니다. 클린 후 리빌드해도 빌드되지 않고 해당 오류가 뜨면서 빌드가 진행되지 않습니다. 일반적인 Exception이 프로젝트 .. 2023.03.26
- WorkExecutionException ::: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException 오류메시지 Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction 1. 오래된 프로젝트를 새로운 프로젝트로 이식하던 중 발생하였습니다. 애뮬레이터나 디바이스에서 앱을 테스트 하기 위해 Run 하던 도중 발생하여 앱이 실행되지 않으며 해당 오류가 발생합니다. 2. 발생원인은 아래와 같이 빌드의 종속성과 리소스가 일치되지 않을때 발생합니다. DrawerLayout을 예로 들면 android.support.v4.widget.Drawer.. 2023.03.09
- 안드로이드 12, android:exported ::: Execution failed for task ':app:checkDebugAarMetadata'. minCompileSdk (31) App을 빌드하는 과정에서 아래와 같은 오류로 앱이 빌드되지 않는 경우가 있습니다. Execution failed for task ':app:checkDebugAarMetadata'. 해당 failded를 좀 더 자세히 확인하면 아래와 같은 메시지를 확인할 수 있습니다. One or more issues found when checking AAR metadata values: The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30). .. 2021.11.04
Code Piece
- Color hex 코드를 R, G, B 값으로 분리하기 안드로이드의 색상은 hex코드로 사용합니다. 흰색의 경우 #ffffff, 검은색의 경우 #00000 와 같습니다. setColor등으로 해당 컬러를 view 요소에 적용하게 되는데, 그냥은 적용하지 못하고 int값으로 변환 후 사용합니다. 아래와 같습니다. String colorHex ="#ffffff" public void setColor() { int color = Color.parseColor(colorHex); textView.setColor(color); } 이때 컬러코드의 값을 R, G, B로 분리해야 할 경우가 있습니다. 이때는 아래와 같이 사용하면 됩니다. String colorHex = "#ffffff" public void colorToRGB() { int color = Color.pa.. 2020.07.18
- EditText에 숫자만 입력할 때 최대/최소값 설정하기 우선 EditText에 숫자만 입력되도록 레이아웃 xml의 EditText에 다음속성을 선언합니다. ** android:inputType="number" 아래와 같은 class를 만들어 줍니다. package com.test; import android.text.InputFilter; import android.text.Spanned; public class InputFilterMinMax implements InputFilter { private int min, max; public InputFilterMinMax(int min, int max) { this.min = min; this.max = max; } public InputFilterMinMax(String min, String max) { t.. 2020.06.03
- ScrollView에 잔상이 남는 현상 ScrollView를 커스텀하여 사용하던 중에 발생했습니다. 생명주기가 onStop등으로 가있다가 onResume으로 복원후에 화면이 다시그려진 뒤 스크롤을 할 때 스크롤뷰에 잔상이 같이 스크롤되는 현상이 발생했습니다. 이리저리 찾아보니 정확한 원인이 어떤 것인지는 확인할 수 없었지만 보통 ScrollView를 커스텀 하여 사용할 때 많이 발생하는것 같고 아래와 같은 방법으로 해결하는 방법이 있었습니다. 해당 방법이 적용되는 이유를 보니 스크롤뷰를 스크롤할때 호출되는 Override 함수인 computeScroll을 호출하고 내부에서 requestLayout()을 호출하는 것으로 레아아웃을 다시 그려주기 때문에 해결되는것 같습니다. Java @Override public void computeScroll.. 2020.05.04
- RecyclerView의 스크롤 차단하기 1한 뷰에 여러개의 RecyclerView를 사용하는 경우, 아래와 같이 ScrollView 안에 Recyclerview를 넣게 됩니다. 이때 RecyclerView의 스크롤을 차단해 주지 않으면 ScrollView와 충돌하게 되어 이중스크롤이 되게 됩니다. 1. 아래와 같은 코드를 사용하면 RecyclerView의 스크롤을 차단할 수 있습니다. mRecyclerview.setLayoutManager(new LinearLayoutManager(this){ @Override public boolean canScrollVertically() { return false;//세로스크롤 차단 } @Override public boolean canScrollHorizontally() { return false;//.. 2020.04.23
- Stroke의 색상을 동적으로 바꾸기 안드로이드의 drawable에 다음과 같이 사용자 정의 drawable resource를 만들 수 있습니다. 해당 drawable resource를 round_box.xml로 정의하고 backgound로 설정해주면 아래와 같이 나타납니다. 아래와 같은 코드를 사용하시면 코드상에서 동적으로 stroke의 색상을 변경할 수 있습니다. RelativeLayout searchBackground = mainView.findViewById(R.id.search_bar); GradientDrawable mGradientDrawable = (GradientDrawable) searchBackground.getBackground(); mGradientDrawable.setStroke(10, Color.RED); 자세한 .. 2020.04.23