2017년 2월 14일 화요일

Android Studio 에서 "error failed to crunch file max path" 에러시 처리방법.

Android Studio 에서 빌드시 "error failed to crunch file max path" 에러가 나타날때 처리 방법입니다.
맥장비랑 윈도우 장비 모두 사용중인데 유독 윈도우 장비에서만 나타나서 검색을 해보니
빌드되는 패스가 240자가 넘어가면 나타나는 오류라고 하네요. (ㅡㅡ.)
다행이도 처리 방법이 존재 합니다.
프로젝트에 최상위 build.gradle 파일에 아래와 같이 셋팅 하여 처리 하면


allprojects {
    buildDir = "C:/tmp/${rootProject.name}/${project.name}"
    repositories {
       ...
    }
}



해당 패스로 빌드 경로를 설정 하기 때문에 "error failed to crunch file max path" 오류가 나타나지 안습니다.

2017년 2월 12일 일요일

macOS Sierra 한영키, Home End 키 PC 와 같게

macOS Sierra 업데이트 이후 잘 쓰던 karabiner 툴이 오동작 한다. 개발자 홈페이지(https://pqrs.org/osx/karabiner/)
 에 가보면 macOS Sierra 는 지원하지 않고 새로운 karabiner-elements 로 새로 개발중이라는 메세지를 발견할수 있다.
밑에 보면 karabiner-elements 라는 링크가 보일것이다 해당 링크를 클릭하면 아래와 같은 페이지가 보이고..
위에서 karabiner-elements-lastest.dmg 를 클릭후 다운로드 하여 설치를 한다.
설치가 완료 되고 나면 두가지를 설정 하면 되는데. 1. 한글을 한영키로 사용 하는것(PC 키보드 기준) 2. Home / End 키 를 PC에서 라인 처음과 끝으로 이동하는것과 동일하게 맞추기.
처음으로 한영키를 설명하겠다.키보드를 쓰는 사용자들이 여러가지가 있겠지만 방법은 다 동일하다.a. 맥용 키보드를 그냥 쓰고 오른쪽 Command 키를 한영키로 이용하려면. 
karabiner-element 설정 창에서 Add Item 을 클릭하면 하나의 키가 맵핑 라인이 추가 된다. 여기서 From Key 에 Right Command 를 지정하고 To Key 를 F18 로 지정한다.그다음 시스템환경설정->키보드->단축키탭->입력소스 로 이동해서 아래 그림과 같이 변경한다.
단축키지정에 마우스를 클릭하면 변경 가능하게 바뀌고 그때 Right-Command 를 누르면 F18로 바뀌는것을 볼수 있다.
그다음 아무 에디트를 열어서 한영키 테스트를 하면 잘 변환 되는것을 확인 할수 있을것이다 ^^
b. PC 키보드를 이용중이고 오른쪽 한영키를 이용할때.  일단 실제 입력되는 키가 무엇인지를 알아야 하기 때문에 Karabiner-elements 에 Lanch EventViewer 를 실행하면 실제 입력되는 키값을 알수 있다. 거기서 입력된 키값을 확인후에한영키 매칭 방법은 위와 동일하다.
두번째로 Home/End 키를 PC 키보드와 같이 라인의 처음과 끝으로 사용하고자 할경우.Finder에서 "UserFolder/Library/KeyBindings/DefaultKeyBinding.dict" 파일을 생성한다.(UserFolder는 개인사용자 폴더 이다. 파일은 UTF8로 저장되어야한다.)파일이 생성되었으면 아래 내용을 복사 하여 붙여 넣고 저장한다음 로그아웃 하고 난후 재 로그인 하면설정이 마무리 되었다.{
"\UF729"  = "moveToBeginningOfLine:";
"\UF72B"  = "moveToEndOfLine:";                       
"$\UF729" = "moveToBeginningOfLineAndModifySelection:";
"$\UF72B" = "moveToEndOfLineAndModifySelection:";
}
에디트를 열어서 원하는 동작을 해보면 잘 동작하는것을 알수 있을것이다.

2017년 2월 9일 목요일

MultiByte To UniCode 변환 (Window)

포스트할 내용은 윈도우 코딩중 사용하게 되는 문자열 변환 관련 입니다.
최근에 프로젝트를 Multibyte 에서 UniCode로 변환 해서 진행하다 보니 기본이
UniCode로 진행 하게 되어서 데이터 처리 하는데 기본에 처리 했던 방식이라 정리 차원에서..
쓰여질 윈도우 API 함수는 MultiByteToWideChar 함수 입니다.
API 원형은 MSDN 에서 찾아 보시면 되구요 간단히 함수로 만들어 보면 아래와 같습니다.



LPBYTE BDConM2W(UINT nCodePage, LPBYTE szSrc, int nLen, int &nConLen)
{
 nConLen = MultiByteToWideChar(nCodePage, 0, (LPCSTR)szSrc, nLen, NULL, 0);
 LPWSTR pConBuff = new WCHAR[nConLen];
 pConBuff[0] = 0;

 MultiByteToWideChar(nCodePage, 0, (LPCSTR)szSrc, nLen, pConBuff, nConLen);

 return (LPBYTE)pConBuff;
}
물론 변환해서 받은 쪽에서 메모리 해제는 해줘야 합니다.
두번에 걸쳐서 하는 이유는 첫번째에는 변환할 사이즈를 얻어내어 실제로 변환할 버퍼의 크기를 지정하기 위함입니다.
그럼 ^^;

UniCode To MultiByte 변환 (Window)

포스트할 내용은 윈도우 코딩중 사용하게 되는 문자열 변환 관련 입니다.
최근에 프로젝트를 Multibyte 에서 UniCode로 변환 해서 진행하다 보니 기본이
UniCode로 진행 하게 되어서 데이터 처리 하는데 기본에 처리 했던 방식이라 정리 차원에서..
쓰여질 윈도우 API 함수는 WideCharToMultiByte 함수 입니다.
API 원형은 MSDN 에서 찾아 보시면 되구요 간단히 함수로 만들어 보면 아래와 같습니다.


LPBYTE BDConW2M(UINT nCodePage, LPBYTE szSrc, int nLen, int &nConLen)
{
 nConLen = WideCharToMultiByte(nCodePage, 0, (LPCWSTR)szSrc, nLen, NULL, 0, NULL, NULL);
 LPBYTE pConBuff = new BYTE[nConLen];
 pConBuff[0] = 0;

 WideCharToMultiByte(nCodePage, 0, (LPCWSTR)szSrc, nLen, (LPSTR)pConBuff, nConLen, NULL, NULL);

 return pConBuff;
}

물론 변환해서 받은 쪽에서 메모리 해제는 해줘야 합니다.
두번에 걸쳐서 하는 이유는 첫번째에는 변환할 사이즈를 얻어내어 실제로 변환할 버퍼의 크기를 지정하기 위함입니다.
그럼 ^^;