반응형

플러터에서 앱 아이콘을 변경하는 방법을 설명한다.

 

해당 내용을 검색하다가 어이없는 설명을 발견...

 

플러터 사용자라면 모두가 알다시피 멀티플랫폼 개발이 가능하게 해주는 도구이다.

 

따라서, 앱 아이콘 또한 플러터에서만 한번 세팅을 해주면

 

각각의 플랫폼별로 세팅을 하지 않아도 자동적으로 동작하여야 한다.

 

그런데 내가 보았던 자료 중 하나는 각 플랫폼별로 직접 아이콘을 세팅해주는 내용이었다.

 

그러한 비효율적인 작업은 하지 않길 바라며 이 글을 작성해본다.

 

우선 원하는 아이콘을 구한 뒤 아래와 같이 세팅한다. (아이콘은 512x512로 작업하였다.)

 

위와 같이 프로젝트 루트에 icon 폴더를 만들고 아이콘 파일을 넣는다.

(경로는 자유롭게 지정하여도 된다.)

 

위와 같이 pubspec.yml 파일을 열어서 빨간박스의 내용들을 입력해준다.

image_path는 아이콘을 넣어준 경로를 지정하면 된다.

 

android: true

ios: true

이 두 부분이 플러터 자체에서 해당 아이콘을 알아서 각각의 플랫폼에 덮어씌워주는 역할을 한다.

 

거의 다 됐다. 

이제 실제로 위와 설정된 파일과 이미지를 패키지에 넣어주는 일만 해주면 된다.

 

위와 같이 Terminal 로 이동하여 위 두 명령어를 입력해주기만 하면 끝이 난다.

참고로 나는 플러터의 경로를 환경변수에 넣어주지 않아서 저렇게 실행 경로를 지정해주었으나,

환경변수에 넣어주면 실행파일명만 입력하면 된다

 

그리고 저 명령을 실행하는 위치는 반드시 자신의 프로젝트 경로에서 실행하여야 한다.

그렇지 않으면 오류가 발생하게 된다.

 

위처럼 완료되었다면 앱을 실행해보자.

아이콘이 바뀌어있는 것을 확인할 수 있을 것이다.

반응형
반응형

이 포스트는 STM32 칩을 쓰시는 분들 중 IAR을 사용하시는 분들에게 해당되는 내용이다.

 

위와 같은 오류를 한번쯤 경험했을 것이다.

 

일반적으로는 ST-LINK와 MCU간의 핀 맵핑이 잘못되어있거나,

MCU가 불량이거나, 전원이 제대로 들어가지 않거나 하는 등의 내용이 원인이다.

 

하지만 나의 경우는 더 난감한 경우를 경험하였다.

잘못된 코드를 다운로드하여 ST-LINK와 MCU와 연결을 할 수 없는 상태가 발생할 수 있는데

바로 이 상황을 겪었다.

 

문제의 코드는 바로 위의 '_HAL_AFIO_REMAP_SWJ_NOJTAG();'이다.

이것은 해당 ST-LINK가 다운로드 전용으로 사용하는 핀을 리맵핑하여

GPIO 등 다른 목적으로 쓰게 만들어준다.

하지만, 문제는 이렇게 하는 즉시 그 이후로는 다운로드 핀으로는 사용할 수 없게 되어버린다.

그 이후로는 맨 위의 디바이스를 찾을 수 없다는 메세지만 뜨게 된다.

해당 다운로드 핀을 반드시 써야하는게 아니라면 위의 코드는 쓰지 않는 것을 추천한다.

 

나는 보통 초기 MCU PIN 세팅 및 기본적인 세팅은 STM32CubeMX을 통해 코드화한다.

(STM32 칩을 쓰는 개발자라면 대부분이 이용할 것이다.)

나는 STM32CubeMX에서 각 기능을 세팅할 때 SYS의 Debug에 대해 관심을 갖지 않았었다.

하지만 저 부분을 Default인 'No Debug'로 두면 JTAG 혹은 ST-LINK와 같은 디버깅 툴을 사용하지

않는 것으로 간주하고, _HAL_AFIO_REMAP_SWJ_NOJTAG(); 코드를 생성해버린다.

 

위와 같이 ST-LINK를 사용한다면 Serial Wire, 그 외의 툴을 사용한다면 그에 맞게 지정하면 된다.

그리하면 위와 같은 코드가 생기지 않으며, 디버깅 툴을 문제없이 사용할 수 있게 된다.

 

이제 이미 잘못된 코드를 실수로 다운로드하여 더 이상 디버깅이 되지 않는 경우를

복구하는 방법을 설명할 것이다.

 

데이타시트를 보면 위와 같은 내용이 있다.

일반적으로 BOOT0을 GND에 붙여 사용하는데, BOOT0을 강제로 HIGH를 주고 전원을 넣을 경우

MCU는 메인 프로그램을 실행하지 않는다. 이 때는 디버깅 툴의 사용이 가능해지기 때문에,

해당 코드를 수정한 상태로 다운로드하고 원상복귀 시켜주면 해결이 된다.

 

이 외에도 Flash Loader를 이용해서 펌웨어를 다시 심는 방법도 있는데,

위 방법이 가장 간단한 것 같다.

반응형
반응형

 

이번에는 국가 코드를 가져오는 법을 알아볼 것이다.

다국어를 지원하는 앱을 개발하는 분들 중 단순히 텍스트 번역만이 아닌,

각 나라별로 프로그램의 동작이 바뀌어야 하는 등의 경우도 존재할 것이다.

그런 경우 어느 국가에서 실행했는지를 알아야 하는데,

이것을 국가 코드를 얻어와서 해결할 수 있다.

 

        Locale locale;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            locale = getApplicationContext().getResources().getConfiguration().getLocales().get(0);
        }else{
            locale = getApplicationContext().getResources().getConfiguration().locale;
        }
        String displayCountry = systemLocale.getDisplayCountry();
        String country = systemLocale.getCountry();
        String language = systemLocale.getLanguage();
 

코드는 위와 같다.

API Level 24 안드로이드 7.0(Nougat)부터는 getConfiguration()의 locale이 Deprecated되었기 때문에,

위처럼 조건으로 getLocales().get(0)을 사용해주어야 한다.

 

그 다음 코드를 보면 국가 코드를 가져오는 방법이 세가지가 있다.

 

첫번째 getDisplayCountry()는 나라 이름을 반환해준다.

한국이라면 "대한민국"

미국이라면 "United States"

이런 형식이다. 각 나라별 언어 문자로 반환을 하기 때문에 조금 불편할 수 있다.

 

두번째 getCountry()는 국가 코드를 반환해준다.

나의 경우는 이 국가 코드를 이용해서 국가를 구분한다.

한국이라면 "KR"

미국이라면 "US"

일본이라면 "JP"

중국이라면 "CH"

대만이라면 "TW"

이렇게 각 나라별로 고유의 국가 코드를 반환해준다.

 

세번째 getLanguage()는 국가 언어 코드를 반환해준다.

한국은 "ko"

미국은 "en"

일본은 "ja"

중국은 "zh"

대만도 "zh"

나라별로 국가 언어 코드를 반환해주지만,

중국과 대만은 구분되지 않는 것을 알 수 있다.

 

결론적으로 국가별 코드를 확실히 구분하려면 getCountry()를 사용하는 것을 추천한다.

 

 

반응형

+ Recent posts