라벨이 개발인 게시물 표시

vscode 디버깅 할 때 arguments 넣는 방법.

vs code에서 Ctrl + Shift + d 를 누르고 "launch.json" 파일을 열거나 만듭니다. 아래 "args": ["arg1", "art2"] 형태로 arguments를 넣을 수 있습니다. 구성을 여러 개 만들어 구성에 따라 arguments를 다르게 설정해서 디버깅 할 수 있습니다.     "configurations" : [         {             "name" : "test" ,             "request" : "launch" ,             "type" : "dart" ,             "args" : [ "arg1" , "art2" ]         },         {             "name" : "test2" ,             "request" : "launch" ,             "type" : "dart" ,             "args" : [ "333" , "555" ]         }     ]

dart 프로젝트 생성, 실행, 컴파일.

* 커맨드 창에서 실행 가능 합니다. 프로그램 만드는데 필요한 몇 가지 명령어를 정리 합니다. * 프로젝트 생성.   - dart create -t console test * 실행.   - dart run * 컴파일.   - dart compile exe bin/test.dart * 라이브러리 명령어.   - dart pub get * vscode에서 몇 가지 명령어를 사용할 수 있습니다.   - Ctrl + Shift + p 단축키 다음 dart 를 치면 실행할 수 있는 명령어가 보입니다. * 참고.   - Get started https://dart.dev/tutorials/server/get-started     - dart create https://dart.dev/tools/dart-create     - dart compile https://dart.dev/tools/dart-compile     - dart pub https://dart.dev/tools/pub/cmd     - dart run https://dart.dev/tools/dart-run  

flutter 폴더에서 File List 가져오기. 안드로이드.

* 안드로이드에서 파일 목록을 가져오는 방법.   - 안드로이드의 파일 관련 권한과 Storage Access Framework (SAF) 때문에 기본 API가 동작하지 않습니다. 그래서 아래 라이브러리를 사용 했습니다.   - 안드로이드 13(sdk 33)에서는 Uri 형태로 폴더를 넘기고 파일을 받아야 접근이 됩니다.  Uri 예) content://com.android.externalstorage.documents/tree/primary https://pub.dev/packages/shared_storage   // 폴더 선택 방법. final Uri ? dirUri = await openDocumentTree (); // 파일 리스트 함수 사용.   var audioList = await getFileList ( dirUri , ".(mp3|wav)" );   Future < List < DocumentFile >> getFileList ( String audioPath , String regex ) async {     const List < DocumentFileColumn > columns = < DocumentFileColumn >[       DocumentFileColumn . displayName ,       DocumentFileColumn . id ,       DocumentFileColumn . mimeType ,     ];     final List < DocumentFile > files = [];     final Uri audioPathUri = Uri . parse ( audioPath );     final Stream < DocumentFile > onFileLoaded = listFiles ( audioPathUri , columns : columns );     final regExp =

Android - 앱 서명키 인증서, 업로드 키 인증서 차이. 간략한 설명.

* 앱 서명키 인증서, 업로드 키 인증서는 아래에서 확인 할 수 있습니다.   * 구글 플레이 콘솔 -> App로 이동 -> 설정 -> 앱 무결성 -> 앱 서명.   *   https://play.google.com/console * 앱 서명키 인증서 - 사용자가 다운 받은 APP에 서명되어 있는 인증서. * 업로드 키 인증서 - 개발자가 구글 플레이 콘솔에 APP을 올릴 때 사용하는 인증서. * 동작 설명.   - 업로드 키를 잃어버리면 구글 플레이 콘솔에서 새로 APP을 만들어야 합니다. 기존 사용자와 APP 실적이 리셋 되기 때문에 활성화된 APP의 경우 문제가 큽니다.   - 이를 방지하고자 구글에서 생성한 인증서로 사용자가 받는 APP에 인증 합니다.    - 개발자가 APP을 올릴 때는 기존과 같이 개발자가 만든 인증서를 사용합니다. * 장점. ``` 개발자가 인증서를 잃어버리거나 해킹 당해도  업로드 키 인증서를 구글에 요청하여 교체하면  APP을 다시 만들 필요 없이 계속해서 서비스 할 수 있습니다. 업로드 키 인증서가 변경 되도 사용자에게 배포된 인증서는  구글에서 생성한 앱 서명키 인증서는  변경 없이 계속 사용하기 때문 입니다. ``` * 적용.   - 새 APP은 이를 위해서 별다른 작업은 필요 없는 거 같습니다. 저의 경우 다른 설정 없이 기존에 하던 대로 인증서 만들고 APP를 올렸더니 자동으로 적용되어 있었습니다.   - 기존 APP에 이를 적용하기 위해서는 키 파일을 구글 플레이 콘솔에 올려야 합니다. * 업로드 키를 잃어버리면 구글 플레이 콘솔에서 새로 APP을 만들어야 하는 것을 이해하지 못했다면 아래 예를 참고하세요. ``` com.ex.app_test 라는 도메인의 APP이 있었을 경우 com.ex.app_test와 인증서가 1:1로 묶여 있어 인증서를 잃어버리면  com.ex.app_test의 APP를 설치할 수 없게 됩니다. 그래서 기존에는  com.ex.app_test2 APP를 만들고 새 인증서를

JSON 파서 자동 코드 생성기.

https://app.quicktype.io/ https://github.com/quicktype/quicktype   지원 언어. Ruby, JavaScript, Flow, Rust, Kotlin, Dart, Python, C#, Go, C++, Java, TypeScript, Swift, Objective-C, Elm, JSON Schema, Pike, Prop-Types, Haskell json 문을 넣으면 지원하는 언어의 파서 코드를 자동으로 만들어 준다.

vs code 설정 백업.

* vs code 설정 개인 백업 입니다. * 설정 내용.   - 테마.   - 폰트 설정.   - 플러터(다트) 자동 정렬 라인 길이.   - 파이썬 자동 정렬. {     "workbench.colorTheme" : "Default Dark+" ,     "editor.fontFamily" : "JetBrains Mono NL, D2Coding, Consolas, 'Courier New', monospace" ,     "dart.lineLength" : 120 ,     "[dart]" : {         "editor.formatOnSave" : true ,         "editor.formatOnType" : true ,         "editor.rulers" : [             120         ],         "editor.selectionHighlight" : false ,         "editor.suggest.snippetsPreventQuickSuggestions" : false ,         "editor.suggestSelection" : "first" ,         "editor.tabCompletion" : "onlySnippets" ,         "editor.wordBasedSuggestions" : false     },     "security.workspace.trust.untrustedFiles" : "open" ,     "window.commandCenter" : true ,     "editor.formatOnSave&qu

마크다운(markdown) 간단 문법.

이미지
사용하는 문법과 유용하다고 생각되는 문법을 정리 했습니다.  상단은 텍스트. 하단은 텍스트가 마크다운 렌더링 이미지 입니다. 1단계 제목 = 2단계 제목 - * 본문.   - 내용.     + 파트. **굵게** --- * *이탤릭* * **굵게** * ** *굵게이탤릭* ** * ~~가로선~~ * 위첨자 ^예시^ * [ x ] 체크박스. * \* 스페셜 캐릭터 표시. * ``스페셜 `캐릭터` 표시.`` 1. ㅇㅇㅇ 1. 222 1. ㅊㅊㅊ --- 가로줄. - [ 위키 ]( https://wiki/ ) - 위키. - https://github.io/ - browser. - [ img ]( https://url ) > 인용문. >> 인용문2. >>> ㅇㄹㄴㄹ | h1 | h2 | h3 | |---|:---:|---:| | `t1` | t2 | `t3` | ``` public class BootSpringBootApplication {   public static void main(String[] args) {     System.out.println("Hello, Honeymon");   } } ``` * [ 링크 ][id1] * 문서내 링크. [ id2 ] [id1]: URL "Optional Title here" [id2]: 문서링크. <!-- 주석. --> # h1 Heading ## h2 Heading ### h3 Heading #### h4 Heading ##### h5 Heading ###### h6 Heading -------------------------------------------------------------

flutter- @pragma('vm:entry-point')

* @pragma('vm:entry-point')   - 안드로이드 네이티브 코드에서 다트 함수를 실행할 수 있게 해주는 구문.   - 동작 설명 - dart는 컴파일 또는 런타임 시에 최적화 할수 있는데 이 과정에서 함수명이나 구문이 최적화되어 외부에서 실행할 수 없게 되기도 한다. 그래서 pragma로 힌트를 주어 안드로이드 네이티브 코드에서에서 해당 함수를 실행 할 수 있게 해준다. * 주의.   - dart, flutter 공식 문서화되어 있지 않다. 이로 보건데 향후 업데이트시에 공지 없이 변경될 가능성도 있어 주의를 요한다. * 참고.   - https://api.flutter.dev/flutter/dart-core/pragma-class.html   -  https://blog.csdn.net/rd_w_csdn/article/details/121293353   -  https://stackoverflow.com/questions/64314719/what-do-pragmavmprefer-inline-mean-in-flutter

android studio intellij - markdown preview 안보일때.

### 증상.   markdown 확장자 .md 파일의 경우 android studio(intellij) 에서 프리뷰로 이쁘게 표시해 준다.   하지만 IDE의 Java Runtime 오류로 인해 보이지 않는 버그가 있는거 같다. ### 해결.   * Ctrl+Shift+A 을 누르고 "Choose Boot Java Runtime" 을 입력하여 "Choose Boot Java Runtime for the IDE" 창을 연다.   * "Use Default Runtime" 버튼을 누르고 android studio(intellij) 재시작 한다.   * 이래도 안된다면 New에서 "... with JCEF" 을 선택하고 재시작 한다.   전 "... with JCEF" 으로 해결 했습니다.   * 주의 - 런타임을 선택하고 OK버튼을 누른후 런타임 설치를 기다리면 재시작 다이얼로그가 나타납니다. 꼭 런타임 설치가 완료되고 재시작 다이얼로그가 뜰때까지 기다려야 합니다. ### 참고.   * https://youtrack.jetbrains.com/issue/IDEA-265975   * https://intellij-support.jetbrains.com/hc/en-us/articles/206544879-Selecting-the-JDK-version-the-IDE-will-run-under?page=3   

android studio 설정.

* 셋팅창 열기. File | Settings * android studio 실행시 이전 프로젝트 자동 열기 비활성화. File | Settings | Appearance & Behavior | System Settings | Project | Reopen projects on startup 해제. * 메뉴 폰트 및 사이즈. File | Settings | Appearance & Behavior | Appearance | Use custom font 체크 후 폰트 및 사이즈 선택. * 마우스 휠로 폰트 확대 축소. File | Settings | Keymap | "font size" 찾기. Decrease Font Size, Increase Font Size 에서 더블클릭 - Add Mouse Shortcut ctrl + 마우스 휠 스크롤. * flutter 코드 자동 정렬 라인 길이 변경. File | Settings | Editor | Code Style | Dart | Line length 변경. 120

flutter- 기본 프로젝트 오류 수정. GradleException

Flutter 3.0.5 버전 기준 입니다. Flutter에서 안드로이드 변경 사항을 업데이트하지 않아 생긴 오류 해결법 입니다. * android\app\build.gradle     - File - Project Structure - Modules - <프로젝트 이름>_android - Module SDK - 버전을 지정합니다.     -  GradleException을 FileNotFoundException으로 변경합니다.     -  kotlin-stdlib-jdk7을 아래와 같이 kotlin-stdlib-jdk8로 변경합니다. dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8: $kotlin_version " }

flutter- 다국어 지원. App Name. 어플 이름. 안드로이드.

표시되는 어플 이름 다국어 지원 방법. 안드로이드만 다룹니다.   * android/app/src/main/res 폴더에 지원하는 언어의 폴더를 만듭니다.     - 예)  values, values-en, values-ko * 위에서 만든 폴더에 Strings.xml 파일을 만듭니다. <? xml version ="1.0" encoding ="utf-8" ?> <resources> <string name ="appName" > 테스트 </string> </resources> * AndroidManifest.xml 에 다음 항목을 적용합니다. android:label="@string/appName"

flutter- 다국어 지원. easy_localization

* 라이브러리 사이트. https://pub.dev/packages/easy_localization * 라이브러리 설치. flutter pub add easy_localization * 설정.      - 폴더 생성 - assets/translations/      - 폴더에 다국어 파일 생성.             + 예) en-US.json, ko-KR.json { "hello" : "hello" , }     - main.dart 예시. import 'package:flutter/material.dart' ; import 'package:flutter_localizations/flutter_localizations.dart' ; import 'package:easy_localization/easy_localization.dart' ; void main() async { WidgetsFlutterBinding. ensureInitialized () ; await EasyLocalization. ensureInitialized () ; runApp( EasyLocalization ( supportedLocales: [ Locale ( 'en' , 'US' ) , Locale ( 'ko' , 'KR' )] , path: 'assets/translations' , fallbackLocale: Locale ( 'en' , 'US' ) , child: MyApp () ) , ) ; } class MyApp extends StatelessWidget { @override Widget build (BuildContext context) { return MaterialApp (

파이썬 폴더 순회 os.scandir. python

다이얼로그에서 폴더 선택 후 작업하는 일반적인 패턴 구현 소스. import os import tkinter import tkinter . filedialog import tkinter . messagebox def select_folder ():     path = tkinter . filedialog . askdirectory ()     return path def work_file ( src_path ):     try :         path , name = os . path . split ( src_path )     except Exception as e :         tkinter . messagebox . showinfo ( "Exception!" , e ) def work_folder ( folder_path , is_sub ):     try :         with os . scandir ( folder_path ) as it :             for entry in it :                 if entry . is_file ():                     work_file ( entry . path )                 elif is_sub and entry . is_dir ():                     work_folder ( entry . path , is_sub )     except Exception as e :         tkinter . messagebox . showinfo ( "Exception!" , e ) if __name__ == "__main__" :     try :         work_path = select_folder ()         work_folder ( work_path , True )         os . system ( &q

파이썬 vscode에서 자동 코드 정렬. Formatter.

세가지 autopep8, black, yapf 규칙이 있습니다. 저는 black이 가장 취향 이었습니다. * 설치. pip install black * vscode 설정.     - 아래 둘 중에 하나로 선택해 설정한다.     -  settings.json          +  "python.formatting.provider": "black"     - vscode-파일-기본설정-설정-확장-Python-Formatting:provider-black * 코드 정렬 방법.     - 단축키 Shift+Alt+F      - 코드에서 우클릭 - 문서 서식.     - 터미널에서  black --check file_name.py * 이외의 자동 정렬 설정.     - 파일저장, 복사, 타이핑 시 자동 정렬 옵션.      - settings.json          +  "editor.formatOnSave": true,         + "editor.formatOnPaste": true,         + "editor.formatOnType": true, * 주의.     - 확장자 .py 파일이어야 자동 정렬 합니다. * 참조. https://code.visualstudio.com/docs/python/editing https://jiku90.tistory.com/12

flutter- 아이콘 적용하기.

플러터 프로젝트는 이미지나 아이콘 툴이 기본 탑재되어 있지 않아 상당히 불편하다. 그래서 이를 자동화해주는 flutter_launcher_icons을 사용한다. * 툴의 사이트. https://pub.dev/packages/flutter_launcher_icons * 툴 설치. flutter pub add flutter_launcher_icons * 아이콘 이미지 추가. 프로젝트 폴더에 assets폴더를 만들고 app_icon.png 을 추가했다. 아이콘 이미지는 1024*1024 (ios때문인거 같다.), 알파채널 제거. * 설정 파일 생성. pubspec.yaml 을 그대로 사용하거나 flutter_launcher_icons.yaml 파일을 만들어 사용할 수 있다. flutter_icons : image_path : "assets/app_icon.png" android : true ios : true * 실행.  pubspec.yaml 일때는 flutter pub run flutter_launcher_icons:main flutter_launcher_icons.yaml 일때는 flutter pub run flutter_launcher_icons:main -f flutter_launcher_icons.yaml 적용된다. ////////////////////////////////////// 안드로이드 기기(픽셀4)에 따라 라운드 아이콘 일 때 제대로 보이지 않는 문제가 있다.  구조상 자동으로 해결되기는 어려울 것으로 보여 수동으로 추가해 줘야 한다. * 라운드 아이콘을 만든 후 다운로드 받는다. https://romannurik.github.io/AndroidAssetStudio/ Launcher icon generator 항목으로 이동 후 아이콘을 만들어 다운 받는다. * 이미지 복사. 압축을 풀고 이미지 파일 이름을 적절하게 변경한다. _back, _fore 같은 배경 파일이 필요 없다면 삭제한다. 프로젝트폴더\android

flutter- keystore 만들기.

안드로이드 어플을 스토어에 올리기 위해서 key 파일이 필요하다. 키파일을 만들기 위한 순서를 올린다. jre 폴더 위치는 아래 명령어로 알 수 있다. flutter doctor -v C:\Program Files\Android\Android Studio\jre\bin>keytool -genkey -v -keystore d:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 키 저장소 비밀번호 입력: 새 비밀번호 다시 입력: 이름과 성을 입력하십시오.   [Unknown]:  name 조직 단위 이름을 입력하십시오.   [Unknown]: 조직 이름을 입력하십시오.   [Unknown]:  name 구/군/시 이름을 입력하십시오?   [Unknown]: 시/도 이름을 입력하십시오.   [Unknown]:  Seoul 이 조직의 두 자리 국가 코드를 입력하십시오.   [Unknown]:  kr CN=Dev Cats, OU=Unknown, O=Minihand, L=Unknown, ST=Seoul, C=kr이(가) 맞습니까?   [아니오]:  y 다음에 대해 유효 기간이 10,000일인 2,048비트 RSA 키 쌍 및 자체 서명된 인증서(SHA256withRSA)를 생성하는 중         : CN=Dev Cats, OU=Unknown, O=Minihand, L=Unknown, ST=Seoul, C=kr [d:/key.jks을(를) 저장하는 중] * 참고. https://flutter-ko.dev/docs/deployment/android#keystore-%EB%A7%8C%EB%93%A4%EA%B8%B0 - 얼마전까지 Android Studio에 gui툴이 있었는데 안보이네요.

flutter- wakelock 꺼짐 방지. 화면 유지.

화면 꺼짐 방지 방법. * 라이브러리 페이지. https://pub.dev/packages/wakelock * 라이브러리 설치. flutter pub add wakelock * 코드. 기본 사용법은 아래와 같이 매우 심플하다. Wakelock.enable(); Wakelock.disable(); 아래와 같은 사용법도 있다. bool enable = true; Wakelock.toggle(enable: enable); Wakelock.isEnabled

flutter- Admob 배너 적용.

flutter에 Admob 배너 적용하는 방법. * 라이브러리 페이지. https://pub.dev/packages/google_mobile_ads * Admob 라이브러리 설치. flutter pub add google_mobile_ads * AndroidManifest에 추가. 인터넷 권한은 admob 라이브러리에서 자동병합 되어 따로 할 필요가 없다. android\app\src\main\AndroidManifest.xml <application>        <meta-data            android:name="com.google.android.gms.ads.APPLICATION_ID"            android:value="ca-app-pub-##############"/> </application> * build.gradle에 추가.  2022년08월 현재 flutter과 Admob이 minSdkVersion 불일치로 컴파일 에러가 난다. minSdkVersion 19, 20 가능하지만 추가 코드 작업이 필요하다. 특별한 사유가 없으면 21로 하는 걸 추천한다. android\app\build.gradle minSdkVersion 21 * Admob 라이브러리 초기화. main.dart 이나 초기화 코드에 아래 코드를 넣는다.   MobileAds.instance.initialize(); * 구현 코드.  본인에 맞게 변경해 구현한다. // 광고 ID 를 리턴하는 함수 . String getAdId () { if (!kReleaseMode) { return 'ca-app-pub-3940256099942544/6300978111' ; } if (Platform.isAndroid) { return 'ca-app-pub-#############' ; } else if (Platform.isIOS) { //

flutter - flutter_native_splash 스플래시 이미지 추가.

flutter 실행시 네이티브에서 플러터를 로딩하는 시간에 지연이 있다. 하얀 화면보다 스플래시 이미지를 보는게 유저가 느끼는 경험이 더 좋다.   flutter_native_splash를 이용하면 코드 작업 없이 스플래시 적용할 수 있다. 물론 따로 처리해야 하는 것도 가능하다. * 라이브러리 페이지. https://pub.dev/packages/flutter_native_splash * 라이브러리 설치. flutter pub add flutter_native_splash * pubspec.yaml 에 추가. 각자 환경에 맞게 세팅하면 된다. # flutter pub run flutter_native_splash:remove # flutter pub run flutter_native_splash:create flutter_native_splash : color : "#3B303E" image : assets/image/splash_logo.png fullscreen : true android_12 : color : "#3B303E" image : assets/image/splash_logo12.png # branding: assets/image/splash_logo.png * 터미널에서 실행한다.(Android Studio 터미널도 가능하다.) flutter pub run flutter_native_splash:create - 여기까지 하면 적용 완료다. 에뮬레이터에서는 확인할 수 없다. 진짜 핸드폰에 설치해 확인할 수 있다. * 만약 설정이 바뀌거나 스플래시 이미지가 바뀐 경우는 remove 후 create 해주면 된다. flutter pub run flutter_native_splash:remove flutter pub run flutter_native_splash:create - 주의. 에뮬레이터에서는 스플래시 이미지 적용이 원할하지 않았다.  핸드폰을 꼽았을 때는 제대로 확인이 됐습