크로스 플랫폼을 그다지 선호하지 않기 때문에, 선호하지는 않지만 알고 사용하지 않는 것과 모르고 사용하지 않는 것의 차이점 때문에 겸사겸사 글을 작성하게 되었다. 그렇기 때문에 해당 카테고리에서는 플러터를 사용할 때 꼭 알아야 하는 정보, 차이점 등이 가장 중요한 정보가 될 것이다.

 

1. 최초 세팅

https://flutter.dev/ 로 접속

 

해당 버튼을 누르게 되면 어떤 플랫폼에서 사용할건지 물어보는데, 매번 다르겠지만 이번에는 Windows -> Android 를 선택하도록 한다.

 

휠을 내리다 보면 Download and install 버튼이 있고, 해당 버튼을 클릭하게 되면 아래와 같이 다운 받을 수 있는 link를 볼 수 있다. 다운 받도록 하자.

 

 

다운이 완료 되었으면 원하는 경로에 해당 파일의 압축을 풀면 된다.

 

여기서 주의사항은 Program Files에는 압축을 풀지 말도록 하자.

 

압축 해제가 완료 되었으면 환경 변수의 Path에 \bin 폴더를 세팅하도록 하자.

 

이후 Android Studio를 실행하고, File -> Settings -> Plugins에 들어가서 Flutter를 검색 후 install을 하면 된다. 설치가 완료 되었으면 아래와 같이 표시될 것이다.

 

 

 

자, 여기까지 설치를 하였다면, project를 생성할 수 있는 기본세팅은 완료되었다.

 

기본 프로젝트를 생성하는 방법은 다음글에서 알아보자.

Posted by 그만좀 :

Source Tree같은 Tool을 사용할 수 있지만, 상황에 따라서 git bash를 통하여 작업해야 할 경우가 있다.

다음 경우에 사용할 수 있는 방법을 알아두면 편리하다.

 

이전에는 아이디와 비밀번호로 사용가능했으나, 현재는 사용할 수 없기 때문에 Token 생성부터 진행해야하며,

 

생성 방법은 다음과 같다.

 

git bash 이용방법

1. token 생성
- profile -> settings -> developer settings -> personal access tokens -> tokens(classic)  등록
- note(용도), select scopes(권한) 세팅 후 -> generate token 선택
- bash or tool에서 password 입력 필요 시 입력

2. commit
- 해당 폴더 이동
- ls -al
- git status
- add : git add 파일명 or git add .(전체)
- cancel : git reset 파일명 or git reset(전체)
- commit : git commit 후 메시지 작성(git commit -m "메시지" 로 대체 가능
- commit cancel : git log -> git reset --soft a32323(commit 코드)
- push : git push -u origin main

Posted by 그만좀 :

android를 사용하다보면, 여러 국가의 언어를 적용해야 할 때가 있다. 

그럴 때 코드로 하나하나 적용해서 처리하기 보다는 일괄적으로

string.xml을 적용하는 편이 더욱 보기 좋고, 편하다.

 

사용 방법은 간단하다. 

폴더의 경우 다음과 같이 이름을 적용한 후 res 폴더 안에 적용하면 국가별 언어를 선택했을 때 string.xml이

 

자동으로 적용된다..

언어 (국가) 폴더(언어) 폴더(언어 + 국가)
한국어 (대한민국) values-ko values-ko-rKR
영어 (호주) values-en values-en-rAU
영어 (캐나다) values-en-rCA
영어 (영국) values-en-rGB
영어 (뉴질랜드) values-en-rNZ
영어 (싱가포르) values-en-rSG
영어 (미국) values-en-rUS
일본어 (일본) values-ja values-ja-rJP
중국어 (중국 간체(본토)) values-zh values-zh-rCN
중국어 (중국 번체(대만)) values-zh-rTW
독일어 (독일) values-de values-de-rDE
독일어 (오스트리아) values-de-rAT
독일어 (스위스) values-de-rCH
독일어 (리히텐슈타인) valued-de-rLI
스페인어 (스페인) values-es values-es-rES
프랑스어 (프랑스) values-fr values-fr-rFR
프랑스어 (벨기에) values-fr-rBE
프랑스어 (캐나다) values-fr-rCA
프랑스어 (스위스) values-fr-rCH
이태리어 (이탈리아) values-it values-fr-rIT
이태리어 (스위스) values-fr-rCH
네덜란드어 (네덜란드) values-nl values-nl-rNL
네덜란드어 (벨기에) values-nl-nBE
폴란드어 (폴란드) values-pl values-pl-rPL
러시아어 (러시아) values-ru values-ru-rRU
체코어 (체코) values-cs values-cs-rCZ

 

Posted by 그만좀 :

안드로이드를 사용하다보면 build.gradle을 많이 사용하게 된다.

 

build.gradle의 경우에는 크게 app 레벨의 build.gradle, project단위의 gradle로 나뉘어져 있고,

 

해당부분은 안드로이드의 버전이 올라가면서, 많은 부분이 바뀌었다.

 

가장 많이 바뀐 부분은 

 

app단의

dependencies 부분이며, 해당부분은 예전 버전에는 complie 을 사용하여 complie '사용할 이름' 과 같은 형태로 사용했으나,

최근에는 implementation을 사용하게끔 권장된다. 다음과 같이 사용하지 않는 경우 동작하지 않거나 warning 메시지를 볼수 있다.

 

또한 가장 많이 사용하는 google-service의 경우 이전버전에서는 dependencies에 넣어 각 버전별로 호출하여 사용했으나, 최근에는 gradle 파일의 최하단에

 

apply plugin: 'com.google.gms.google-services' 와 같은 형태로 사용한다.

 

프로젝트 단의 build.gradle파일의 경우

classpath를 통하여 android tool과 google service 를 지정해주고 repositories에서 google()과 jcenter()를 사용하면 여러 라이브러리들을 import 해서 사용할 수 있다.

Posted by 그만좀 :

 

안드로이드(Android)를 사용하다보면, 액티비티간 혹은 메소드 등에서 간단하게 데이터를 주고 받고 싶을 때가 있다.

 

물론 Intent의 extra를 이용하여 getIntent를 통해 정보를 주고 받을 수도 있지만, 특정상황에서 값을 저장하고, 어떤 순간이 왔을 때

 

그 값을 바로 불러서 사용하고 싶을 때 SharedPreferences를 이용하면 좀 더 편리하게 데이터 처리를 할 수 있다.

 

 

기본구조

 

 

 

SharedPreferences pref = getSharedPreferences("Preferences이름", MODE_PRIVATE);

 

여기서 주목할 부분은 getSharedPreferences 부분이다.

 

getSharedPreferences에서 pref로 되어있는 부분은 Preferences의 이름이며 사용하고 싶은 정보를 나타내는 이름으로 짓게되면

 

나중에 데이터 삭제 혹은 수정 시 편리하다.

 

MODE_REIVATE 는 찾아보면 친절하게 다음과 같은 설명이 나와있다.

 

 

File creation mode: the default mode, where the created file can only be accessed by the calling application (or all applications sharing the same user ID).

 

해석하자면 기본모드라고 보면 된다. 동일한 사용자 ID를 공유하는 모든 응용 프로그램에서만 액세스 할 수 있다. 이렇게 해석할 수 있는데,

 

이것은 해당 어플리케이션에서만 사용할 수 있다. 요정도로 생각하면 된다.

 

 

사용방법

 

 

사용방법은 간단하다.

 

 

SharedPreferences 선언 후 입력 또는 삭제하고 싶을 때는 Editor를 이용, 값을 불러올때는 SharedPreferences 에서 바로 불러오면된다.

 

Editor의 경우에는 꼭 commit를 해줘야하는 것을 잊지말자.

 

 

1. 불러오기

 

 SharedPreferences pref = getSharedPreferences("Preferences이름", MODE_PRIVATE);

        pref.getString("호출할이름", "Default값");

 

2. 저장

 

 SharedPreferences pref = getSharedPreferences("Preferences이름", MODE_PRIVATE);

 SharedPreferences.Editor editor = pref.edit();

        editor.putString("호출할이름", "입력값");

        editor.commit();

 

3. 삭제("호출할이름"만 삭제)

 

 SharedPreferences pref = getSharedPreferences("Preferences이름", MODE_PRIVATE);

 SharedPreferences.Editor editor = pref.edit();

        editor.remove("호출할이름");

        editor.commit();

 

4. 전체 삭제("Preferences이름" 데이터 삭제)

 

SharedPreferences pref = getSharedPreferences("Preferences이름", MODE_PRIVATE);

 SharedPreferences.Editor editor = pref.edit();

        editor.clear();

        editor.commit();

 

 

주의사항

 

 

"Preferences이름"의 데이터가 "호출할이름" 한개인 경우에는 삭제나, 전체 삭제나 같은 결과가 나오지만,

 

"Preferences이름"의 데이터가 "호출할이름", "호출할이름1" 이렇게 1개 이상일 때는 전체 삭제를 하게되면

 

"호출할이름", "호출할이름1" 두개의 데이터가 다 삭제되니 주의해야 한다.

Posted by 그만좀 :

안녕하세요 석동이입니다.

 

이번시간은 Unity(유니티)를 설치해보는 시간을 가져보도록 하겠습니다.

 

Unity(유니티)의 경우에는 현재 게임을 만들기 위해서 필수라고 할 수 있을 정도로 많이 

 

사용 하고 있습니다. 또한 안드로이드(Android)와 아이폰(Ios)에도 호환이 잘되기 때문에 

 

더 많이 사용하는 것이 아닌가 싶습니다.

 

자 그럼 설치를 시작해보겠습니다.

 

 

설치방법

 

1. 유니티(Unity) 사이트 접속

 

https://unity3d.com/kr/unity

 

해당 사이트에 접속하여 Personal을 선택합니다. 

 

Plus나 Pro 버전을 이용하실 분들은 선택하셔도 되지만, 추가 결제부분이 있으므로 해당

 

글에서는 기본 버전으로 설치하도록 하겠습니다.

 

 

 

해당 부분을 선택하게 되면, Unity 설치 프로그램이 다운됩니다.

 

Unity 설치 프로그램의 경우, 설치 파일 용량이 작다는 특징이 있습니다.

 

하지만, 설치 프로그램 실행 후 추가로 받는 용량이 많기 때문에 하드 디스크에 여유공간

 

을 충분히 두시고 설치 하시길 바랍니다.

 

파일을 다운 받은 후, 실행을 하게 되면 기본 세팅부분이 나옵니다. 여기서 next를 눌러 

 

설치를 하시면 되는데, 진행을 하시다 Choose Components가 나오면 Support할 

 

Commponents를 선택해야 합니다.

 

Android라면 Android Build Support IOS라면 IOS Build Support를 선택하시고 next를

 

눌러 진행하시면 됩니다.

 

 

 

 

그리고 난 후 설치가 완료 될 때까지 기다리시면 되겠습니다.

 

 

 

 

설치가 끝난 후 실행을 하면, 로그인 창이 뜨는데 아이디가 없으신 분은 가입 후 로그인

 

하시면 됩니다. 로그인을 한 후에 부가 정보를 입력한 후 사용하시면 되겠습니다.

 

 

 

 

Posted by 그만좀 :

문제내용

 

 

 

전체 에러 메시지는 jxl.read.biff.BiffException: Unable to recognize OLE stream

 

메시지 내용은 xls 파일을 열어야 하는데 xls 양식이 아닐때 나오는 Exception이다.

 

나는 분명 xls파일을 열었는데 이게 무슨말이냐 하는분도 있을텐데

 

확인해보시면 알겠지만, 파일확장자만 xls고, 내용은 xlsx 인 경우가 대부분이다.

 

 

 

해결책

 

 

 

엑셀을 실행 후 파일 -> 다른이름으로 저장 -> 저장타입 (97-2003 xls) 으로 파일을 저장한후에 그파일을 jxi로 열면 실행이 된다.

 

이게 번거로운경우 POI를 사용하도록 하자.

Posted by 그만좀 :

일반적인 외부저장소 경로는 /mnt/sdcard 이며, 기기에 따라 sdcard/emulater/0 과 같은식으로 나타나는 경우도 있다.

 

본인의 기기의 주소경로를 명확히 알고 있다면, 직접 주소를 타이핑하여 사용해도 되지만, 오타가 날 수도 있기 때문에 직접 입력은 추천하지 않는다.

 

 

 

기본구조

 

절대 경로를 가져오기 위한 기본구조는 다음과 같다.

 

Environment.getExternalStorageDirectory().getAbsolutePath();

 

=> 외부 스토리지 최상위 주소를 나타낸다.

 

여기에서 직접 만든 폴더를 이용하고 싶으면 뒤에다가 /폴더명을 추가 하면 된다.

 

 

사용방법

 

SaveFolderPath = Environment.getExternalStorageDirectory().getAbsolutePath() 

+ "/폴더명";

 

이렇게 사용하면 저장할 경로가 지정된다.

 

이 경로를 이용하여, 데이터를 저장하거나, 데이터를 해당 폴더에 넣어두고 불러와서 처리할 수 있다.

 

 

주의사항

 

 

이미 생성되어 있는 폴더가 아닌경우 해당 경로가 없다고 나오기 때문에 해당 폴더가 없으면 생성을 해주거나,

 

미리 생성을 해두어야 한다.

 

 

폴더를 생성해주는 명령어는 mkdir() 을 사용하면되며 경로가 존재하는지 체크하는 방법은 다음과 같다.

 

 

 

    File dir = new File(SaveFolderPath);

    if (!dir.exists()){

    dir.mkdir();

    }

 

 

추가로 기본적인 폴더는 안드로이드에서 제공하는 명령어가 있는데 참고용으로 사용하면 좀 더 편리할 수도 있다.

 

 

명령어  경로  사용용도
 Environment.DIRECTORY_DCIM  /mnt/sdcard/DCIM
 sdcard/emulater/0/DCIM
 사진저장 폴더
 Environment.DIRECTORY_DOWNLOADS  /mnt/sdcard/Download
 sdcard/emulater/0/Download
 다운로드 폴더
 Environment.DIRECTORY_PICTURES  /mnt/sdcard/Pictures
 sdcard/emulater/0/Pictures 
 그림파일 폴더
 Environment.DIRECTORY_MUSIC  /mnt/sdcard/Music
 sdcard/emulater/0/Music  
 음악파일 폴더
 Environment.DIRECTORY_MOVIES   /mnt/sdcard/Movies
 sdcard/emulater/0/Movies 
 영상파일 폴더
 Environment.DIRECTORY_ALARMS   /mnt/sdcard/Alarms
 sdcard/emulater/0/Alarms 
 알람파일 폴더

 

 

 

Posted by 그만좀 :

티스토리는 기본적으로 다음에서만 검색이 된다고 하네요.

 

그렇기 때문에 구글에서 검색이 되게끔 해보는 시간을 가져봅시다.

 

 

1. 구글 웹마스터 접속

 

https://www.google.com/webmasters/

 

해당 주소에 접속하면 

 

초록색 버튼으로 SEARCH CONSOLE 으로 되어 있는 부분이 있습니다.

 

이 부분을 클릭하시면 로그인을 하라고 하는데 로그인 하시면 됩니다.

 

 

2. 주소 입력

 

로그인을 하게되면 다음과 같은 화면이 나오게 됩니다.

가운데 부분에 티스토리 주소를 적고 속성 추가를 누르시면 됩니다.

 

 

3. 메타 태그 등록

 

속성 추가를 하시면 소유권 확인을 하는데 이 절차에는 권장방법과 대체방법이 있습니다.

여기에서 대체 방법을 선택 후 HTML 태그를 선택해주시면 

 

<meta name="~~~">으로 시작하는 긴 태그가 나오는데 이 태그를 복사하시면 됩니다.

 

 

 

4. HTML / CSS 등록하기

 

본인의 티스토리에 들어가셔서 관리 -> 블로그관리 -> 꾸미기 -> HTML / CSS 편집에 들어가 주세요. 

 

들어가시면 HTML 코드들이 보이실건데, 여기에서 <head> 바로 다음에 메타 태그를 붙여넣기 해주시면 됩니다.

 

<head>

<meta name="~~~~~~~~~~~~~"/> 

이런식으로 보이시면 성공입니다.

 

그 후 우측 상단부분의 저장 버튼을 누르시면  끝!

 

 

5. 마무리

 

그 후에 다시 웹마스터 도구에 돌아오셔서 확인을 누르시면 마무리!

 

 

 

추가로 RSS 등록 방법도 알려드립니다.

 

조금전에 메타태그를 받아온 웹마스터 도구로 다시 돌아오면, 우측하단에 Sitemaps라고 적혀 있는 부분이 있습니다. 이부분을 클릭 후 우측상단에 SITEMAP 추가/테스트를 클릭해주세요.

 

클릭하시면 본인의 주소 뒤에 적을수 있는 공간이 나오는데 이곳에 rss라고 적어주고 확인을 누르시면 됩니다.

 

예시 ) http://sunful.tistory.com/rss

 

 

확인을 누르시면 다음과 같은 화면이 나오는데 여기서 페이지를 새로 고침합니다. 부분에 마우스 커서를 올리시고 클릭해주시면 됩니다.

 

자 이제 기다리시면 됩니다!!

 

순차적으로 승인이 난다고 하니 기다리는 시간은 사람마다 차이가 있겠습니다.

 

고생하셨습니다!!!

 

 

 

Posted by 그만좀 :

WebView를 그대로 사용하면 편하지만 경우에 따라

 

네이티브 로 구축해야하는 경우가 있다.

 

이러한 경우 해당 내용을 구현하여 사용하면 유용하다.

 

 

 

 

* 기본 구조

 

onClick Event로 구현해서 사용해도 되고,

 

그 외 방법으로 사용해도 무관하다.

 

 

 

 

* 사용방법

 

 

* 기본 URL 호출 방법

webView.loadUrl(url)

 

* 새로고침

webView.reload()

 

* 뒤로가기

webView.goBack()

 

* 앞으로 가기

webView.goForward()

 

 

 

 

* 주의 사항

뒤로 가기나, 앞으로 가기를 구현할 경우, 이동할 대상이 없는 경우 이동을 하면 

문제가 발생한다. 그렇기 때문에 이동할 대상이 있는지 체크 후 사용해주는 것이 좋다.

* 뒤로 가기

webView.canGoBack() => return 값 Boolean(true or false)

* 앞으로 가기

webView.canGoForward() => return 값 Boolean(true or false)

 

 

 

 

Posted by 그만좀 :