본문 바로가기

전체 글241

[Java] Scanner & 표준 출력 스트림 Scanner import java.util.Scanner; class Exam { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("String Line : "); // \n까지 받아서 버림 System.out.println(scanner.nextLine()); System.out.println("String : "); System.out.println(scanner.next()); System.out.println("Byte : "); System.out.println(scanner.nextByte()); System.out.println("Short : "); Sys.. 2022. 4. 1.
[Java] 문자 입력 받기 import java.io.IOException; class Exam { public static void main(String[] args) throws IOException { int Input1 = System.in.read(); int Input2 = System.in.read(); int Input3 = System.in.read(); int Input4 = System.in.read(); int Input5 = System.in.read(); System.out.println("Input1 : " + Input1); System.out.println("Input2 : " + Input2); System.out.println("Input3 : " + Input3); System.out.print.. 2022. 4. 1.
[Android] EditText 주로 쓰는 옵션 EditText의 옵션에 따라서 기본 키패드 옵션이 달라지게 된다. ​ // 문자열 추가 android:text="@string/str_dot" ​ // 텍스트 정렬 , 색상, 크기, style(bold, normal, italic), 입력 가능 문자 android:textAlignment="center" android:textColor="@color/black" android:textSize="50dp" android:textStyle="normal" android:maxLength="6" ​ // 비밀번호 입력 타입(영어) android:inputType="textPassword" ​ // 숫자 키패드 android:inputType="number" ​ // 이메일 키패드(영어, @) android:.. 2022. 4. 1.
[Google Play Store] 어플 키워드 관련 정리 플레이스토어 상위 노출이 되기 위해 필요한 요소들을 정리한다. 1. 앱 성능 성능이 좋은 경우에 더욱 상위에 배치가 된다고 한다. 2. 앱 소개 키워드를 콘솔에 앱 이름에 키워드를 담고 설명에 키워드를 적절하게 넣어라. 애플의 앱 스토어 같은 경우에는 키워드 등록이 있다고 하는데 플레이 스토어의 경우에는 그런 개념이 존재하지 않는다. 하지만 어플 이름에 AAA: BBB형태나 AAA-BBB 처럼 특정 키워드를 같이 사용할 수 있다. 앱 설명에도 특정 키워드를 넣어주는 것이 좋다고 한다. 3. 앱 이름 짓기 (기존에 출시된 어플과 비슷하게 하면 좋지 않음) 기존에 출시된 어플과 비슷하게 짓지말고 눈의 확 띄게 지으면 좋다고 한다. 4. 다운로드 및 평가 인기가 많고 평가가 좋은 어플이 상위에 배치가 된다. .. 2022. 3. 31.
[Flutter] 같은 행에 Widget 정렬하기 처음에 접근한 방식은 Row 위젯에 자식 위젯을 두고 적절하게 Center위젯으로 감싸면 될 거라고 생각했는데 안 된다. Row의 MainAxisAlignment를 center로 바꾸면 처리가 되기는 하는데 각 위젯마다 처리가 안 된다. 문제의 코드 Row( children: [ SizedBox( width: vocaBottomSheetLoginIconSize, height: vocaBottomSheetLoginIconSize, child: image), Center( child: Text( strText, style: const TextStyle( fontSize: textSize16, color: Colors.black, fontWeight: FontWeight.bold), ), ), ], ), 원하.. 2022. 3. 31.
[Flutter] BottomSheet 크기 조정 바텀 시트의 최대 사이즈는 기본적으로 스크린 사이즈의 절반으로 되어 있는데 동적으로 바꾸고 싶다면 showModalBottomSheet 부분을 다음과 같이 교체해야 한다. showModalBottomSheet( isScrollControlled: true, context: context, builder: (BuildContext bc) { return Wrap( children: [...] ) } ) 2022. 3. 31.
[Android] 2차 인증(2 factor authentication) 최근에 회사 내 어플에서 2차 인증 쪽 로직을 추가해서 관련 글을 적어보려고 한다. ​ 일단 흐름은 로그인을 이용하여 우리 어플을 사용하는 유저들이 2차 인증을 통과한 이후에만 서비스를 이용할 수 있도록 하는 기능이다. 2차 인증의 방식에는 Email / OTP 인증이 있는데 google OTP를 주로 많이 사용하는 듯하다. ​ 이메일 같은 경우에는 모바일 앱에서 이메일에 대한 요청을 보내고 인증 코드를 입력하면 유효성을 확인하는 통신 처리가 필요하다. 이거는 흔히 사용하는 방식이니까 굳이 더 자세한 설명은 필요 없을 것 같다. ​ Google OTP의 경우에는 구글에서 따로 제공하는 어플이 있는데 우리가 키를 등록하면 30초를 주기로 6자리 인증 코드를 생성해 준다. 우리가 어플에서 인증을 받는 상황에.. 2022. 3. 30.
[Android] Toolbar padding in Tablet ​ stackover flow를 찾아보니까, Toolbar를 찾아와서 거기에 직접 자식을 넣고 inflate하는 방식, 속성 처리.. 여러 방법이 있는데 나의 경우에는 다른 문제였다. ​ 찾아보면 이런 거 많이 한다. ​ 나는 Material Design을 이용해서 AppBarLayout, MaterialToolbar를 이용하고 내부에 ConstraintLayout을 사용하여 구현했다. ​ 이런 상황에서 Tablet기기부터 좌우에 뭔가 색상이 뭍어나오는데 Tablet보다 작은 크기의 기기들은 문제가 생기지 않았다. contentInsetStart, consentInsetEnd값을 주지 않으면 옆에 공간이 남는다. 추가적으로 paddingStart, paddingEnd에 값을 줘야 한다. ​ 안드로이드 내.. 2022. 3. 30.
[Android] EditText with ObjectAnimator android에서 View에 애니메이션을 주고 싶은 경우가 생긴다. ​ 인터넷에서 ObjectAnimator를 이용하는 방식 View.animate()... ViewPropertyAnimator를 이용하는 방식이 있다. (사용) ​ TranslationX, Y 값을 이용해서 이동을 시킬 수 있는데, Button이나 TextView에서는 크게 문제가 생기지 않는다. 이동한 자리에서 클릭을 해도 후처리가 자연스럽게 연결이 되는데 ... EditText를 사용한 View를 애니메이션 시킨 경우에는 텍스트를 가리는 문제가 생길 수 있다. ​ 예를 들어서 EditText View를 Y축으로 100만큼 이동을 시키면 실제 보이는 영역은 100만큼 이동을 하는데 처리되는 영역(실제 영역)은 그대로 위치를 하게 된다... 2022. 3. 30.
[영상처리] iFrame 관련 이슈(프레임 깨짐 현상) 영상 데이터를 보낼 때 모든 픽셀 정보를 하나씩 처리해서 데이터를 보내지 않는다. 데이터가 너무 커져서 그런 방식은 사용하지 않고 iFrame과 pFrame의 개념을 이용하는데 iFrame은 하나의 완성된 장면을 가지고 있고 pFrame은 이진 데이터로서 움직임에 따른 장면만 가지고 있다고 한다. ​ 이런 상태면 영상 데이터의 크기를 획기적으로 줄일 수 있게 된다. pFrame은 앞선 frame 정보를 토대로 자신의 정보를 복구하기 때문에 이전 frame의 정보가 보존이 되어야 한다는 특징이 있다. ​iFrame의 경우에는 완성된 그림이므로 이전 Frame의 영향을 받지 않는다. ​ 기존 로직에서는 영상 데이터에 iFrame 정보가 들어오면 이전에 쌓인 Frame 정보를 버리고 영상을 그려주는 처리를 해.. 2022. 3. 30.
[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.