전체 95

uses-feature required

AndroidManifest에 카메라 권한을 선언하는 부분에서 빨간 줄이 생겼다. 마우스를 갖다 대보면 uses-feature가 빠졌다는 내용이다. uses-feature는 보통 구글 플레이에 앱의 노출 여부를 결정할 때 많이 사용한다. 예를 들어서 카메라를 사용하는 앱인데, 카메라가 없는 안드로이드 기기에서도 검색 또는 설치가 되게 할 것인지 말 것인지를 결정할 수 있다. 만약 카메라 사용이 필수라면 당연히 required="true"가 되어야 할 것이고, 카메라 기능이 옵션이라면 required="false"로 선언하면 되겠다. 이제 아래 코드를 넣으면 빨간 줄이 사라질 것이다. 카메라뿐만 아니라 블루투스(bluetooth), NFC 등 안드로이드 기기의 하드웨어 존재 유무에 따라서 각각 선언하면 된..

모닝 사이드미러 자가 교체

나는 14년식(?) 깡통 모닝을 탄다. 그래서 차에 여기저기 센서가 없다. 이 모닝은 아이 어린이집 등 하원 용으로만 사용하는데 어린이집골목이 아주 좁다. 게다가 그 좁은 골목에 다른 차들도 여러 대 주차되어 있다. 아무튼 복잡하기 그지없다. 그러다 어느 날 후진하다가 방심한 사이에 우측 사이드 미러를 벽에 긁어버렸다. 박살이 나버렸네. 이 깡통 모닝은 사실 아내 운전연습으로 샀던 차여서 막 굴리는 용도로 사용하는 건데 사이드 미러를 수리하기 위해 정비소에 맡기는 게 너무 아까워서 자가 수리를 하기로 마음먹고 부품을 구매하여 유튜브를 보고 따라 했다. 집 근처에 현대 모비스 부품 판매 매장이 있어서 바로 구매할 수 있었다. 우선 박살 난 이 사이드 미러를 해체해야 한다. 차량 안쪽에서 해라를 이용하여 안..

살면서 2023.08.28

dex2jar - com.googlecode.d2j.DexException: not support version.

이런 오류가 발생했다면 오래된 dex2jar를 사용하고 있는 것이다. 구글에서 dex2jar decompile을 검색하면 sourceforge의 다운로드 링크가 나오는데, 2016년 이후로 더이상 업데이트 되지 않는다. 이제는 새롭게 아래 링크에서 코드를 내려 받아서 가이드대로 따라만 하면 된다. GitHub - pxb1988/dex2jar: Tools to work with android .dex and java .class files Tools to work with android .dex and java .class files - GitHub - pxb1988/dex2jar: Tools to work with android .dex and java .class files github.com

Manifest merger failed : Attribute application@allowBackup value=(false)

안드로이드는 앱 삭제 후 재설치시 백업 되어있던 내부 데이터가 복구되는데, AndroidManifest.xml 파일에 android:allowBackup="true"이 default 값으로 되어있기 때문이다. 이게 좋은거 같지만 구글 플레이로부터 앱을 설치하게 되면 처음 상태에서 실행이 되어야 제대로 된 로직을 탈 수 있는데 데이터가 복구되어 그렇지 않은 케이스로 가다보니 오류가 발생할 때가 있고, 그런것에 대한 처리를 다 해주기가 번거롭다. 그래서 android:allowBackup="false"로 바꾸고 앱을 재설치 하더라도 처음 실행하는 것처럼 하는게 속 편하다. android:allowBackup="false"로 바꾸면 Manifest merger failed가 발생하는 경우가 있는데, 이 에러에..

[android] Disable ActionBar show/hide animation

Single Activity 구조로 UI 설계를 하기 위해서는 Navigation을 이용하여 모든 화면 단위를 Fragment로 개발을 한다. 혹시 특정 Fragment에서 ActionBar를 숨겨야 할 때가 있다면 supportActionBar의 show(), hide() 함수를 이용하면 된다. 하지만 한가지 거슬리는건 show/hide 될 때 애니메이션이 나오는데, 그게 보기 싫다면 setShowHideAnimationEnabled(false) 를 호출하여 해결할 수 있다. @SuppressLint("RestrictedApi") override fun onStart() { super.onStart() val supportActionBar = (requireActivity() as AppCompatAc..