본문 바로가기

분류 전체보기241

[Android] RecyclerView in ScrollView ScrollView 내부에 존재하는 RecyclerView를 사용하는 경우에 아이템이 모두 출력이 되지 않는 오류가 있다. ​ ScrollView를 NestedScrollView로 교체하고 RecyclerView 속성으로 android:nestedScrollingEnabled="false"를 준다. (내부 스크롤링 처리) ​ 아니면, RecyclerView크기 떄문은 아닌지 확인한다. https://stackoverflow.com/questions/47348955/recyclerview-is-not-showing-all-items-in-the-list 나의 경우에는 ScrollView내부에서 RecyclerView속성으로 NestedScrollingEnabled = false처리를 하는 상황에서 아이템이.. 2022. 3. 29.
[Android] aar 파일 만드는 방법 회사에서 사용하는 프로젝트는 여러 개의 모듈로 같이 이루어져 있는 경우가 많습니다. 제가 다니는 회사는 이러한 모듈이 철저하게 SDK화 되어 있어 UI코드를 위한 Module과 내부 Core처리를 위한 SDK 모듈로 나뉘어져 있는데요. aar파일을 얻어내는 방법을 알아보겠습니다. 안드로이드 스튜디오의 우측 상단에 Gradle 버튼을 눌러 우측창을 키고 코끼리(Gradle) 버튼을 눌러줍니다. gradle assembleRelease를 입력합니다. 그러면 프로젝트의 모든 모듈에 대해서 aar파일로 만드는 작업을 거치는데 무시하고 위에 상단에 assembleRelease 버튼을 누르고 하단에 Edit Configuration을 누릅니다. 여러 모듈 중에 aar 파일로 만들고 싶은 모듈을 선택하여 OK 버튼을.. 2022. 3. 29.
[Android] DrawerLayout with FrameLayout 삽질 이번에 작업한 요구사항이 세로 모드에서는 5가지 옵션을 출력하는 DrawerLayout을 보여주시고 가로 모드에서는 8가지 옵션을 출력하도록 해달라는 내용이었다. 내부적으로 width 값을 적용했는데도 뭔가 그림이 짤리거나 적용했던 drawable이 제대로 출력되지 않았다. ​ 내가 놓쳤던 부분은 여러가지가 있었는데, 일단 로그를 찍지 않은 것. 로그를 찍으면 어떤 값이 변하고 어떤 것이 변하지 않는지 알아낼 수 있는데 아직 습관화가 되지 않았다. ​ 두 번째로 보이는 현상에 대한 이해가 부족했다. 이미지가 짤린다라는 내용을 봤다면 -> 사이즈가 잘못 잡혀있다. -> 로그로 찍어본다 -> 로그를 보고 문제를 유추한다가 되어야 하는데, 이렇게 했는데 안 돼? 저렇게 했는데 안 돼? 이것만 계속 하고 있으니.. 2022. 3. 29.
[Android] 앱 여부 확인하기 // if you use this in Android 11(api 30) // add this below lines in manifests fun hasAnyApp(strPackageName: String): Boolean { val intent = packageManager.getLaunchIntentForPackage(strPackageName) return intent != null } 안도르이드 11 버전을 사용하는 경우 query를 작성해줘야 getLaunchIntentForPackage 함수가 정상적으로 작동합니다. 2022. 3. 29.
[Android] 취약점 분석 정리 요즘 또 작업하는 것들 중에 취약점 분석 보고서가 있어서 여기에 나온 결과에 따라 보안을 강화해야 하는데 몇 가지 작업해 놓은 것을 정리해 보려고 한다. ​ 난독화 적용(Proguard) 난독화 조치가 되어 있지 않은 경우에 앱 디컴파일시 소스코드 분석이 용이하여 보안상 문제가 발생할 여지가 있다. 안드로이드 자체적으로 제공하는 Proguard를 적용한 내용을 정리합니다. ​ Build.gradle에 작성합니다. buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { minifyEnabled false p.. 2022. 3. 29.
[Android Error] 사설 배포시 apk 파일 파싱 오류 문제가 생기면 일단 로그부터 보면 반은 갈텐데 늦게 봐서 한참을 돌아서 가는 느낌이다. 안드로이드 apk 파싱 실패에 대한 검색을 해봐도 Client 입장에서 해당 이슈를 피하는 방법을 알려주는 점도 있었고. W/System.err: java.io.FileNotFoundException: /storage/emulated/0/download/test.apk (Permission denied) at java.io.FileOutputStream.open0(Native Method) W/System.err: at java.io.FileOutputStream.open(FileOutputStream.java:308) at java.io.FileOutputStream.(FileOutputStream.java:238).. 2022. 3. 29.
[Android] Floating button으로 추가 버튼 만들기 android:src (drawable) app:backgroundTint (배경색상) app:maxImageSize (내부 이미지 크기) app:tint (drwable vector이미지 색상) ​ 2022. 3. 29.
[Flutter] Null-Safety https://dart.dev/null-safety Dart Null-safety ​ Null-safety 원칙 1. 기본적으로 Null이 될 수 없으나 명시적으로 사용할 수 있다. 2. 점진적으로 적용할 수 있는 부분이다. 3. 충분히 타당하다. 한번 null이 아닌 객체는 절대 null값을 가지지 않기 때문에 컴파일 최적화가 가능하다. 더 작고 빠른 실행이 가능해진다. ​ https://dart.dev/codelabs/null-safety ​ 코틀린과 비슷한 형태로 Null-safety 규칙이 있다. 1. 타입에 ?를 붙이면 Nullable로 전환된다 2. assertion operator !를 사용하면 해당 객체가 Null이 아님을 명시할 수 있다. ​ int getLength(String? str.. 2022. 3. 27.
[Android] WIFI 제어하기 안드로이드 10 미만에서는 Wifi를 코드에서 처리하는 것이 가능하지만, 10 이상부터는 Wifi를 직접적으로 제어하는 것이 금지되었다. manifest activity val wifiMgr = applicationContext.getSystemService(WIFI_SERVICE) as WifiManager wifiMgr.isWifiEnabled = true // or false ​ 안드로이드 10 이상에서는 액티비티를 실행시켜서 그곳에서 사용자가 직접 wifi를 제어하도록 처리해야 한다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVI.. 2021. 12. 6.
[Android] Signing 처리 디버그 모드로 apk 파일을 얻는 경우에는 기기 내에서 따로 처리를 하지 않지만, release 모드의 경우에는 설치에 실패하는 경우가 있는데 사이닝이 되어 있지 않아서이다. Android - Build - Generate Signed app bundle or apk 기존에 있는 KeyStore 파일 경로를 넣어주거나 하나 만든다. jks 파일은 프로젝트 내의 app 폴더에 생성되도록 지정한다. (이름은 따로 정한다) KeyStore의 password, Key 의 password를 동일하게 지정해주면 된다. Alias도 따로 정해준다. 유효 연도를 고르고 텍스트 필드는 선택사항이다. (따로 정보로 출력되는 부분이라고 한다.) 디버그, 릴리즈 모두 클릭해서 finish 하면 적용이 된다. 자동 빌드 적용 .. 2021. 12. 4.