Translate

2018년 4월 29일 일요일

[Android Studio] Android Studio에서 Eclipse 프로젝트 열기 (the output path is not specified ~ 오류 해결법)


Laptop
운영체제Windows 10 Home 64bit
개발프로그램Android Studio 3.1.1


github같은 외부 소스 파일을 불러오다보면, 컴파일을 했을 때 다음과 같은 경고창을 띄울 때가 있다.


output path를 설정하라고 되어있는데, 그 말대로 설정에서 output 경로를 설정하고 컴파일해도 아래와 같이 Can't find bundle for base name messages.AndroidJpsBundle, locale ko_KR 하는 오류를 다시 뱉는다.


이것은 Eclipse 프로젝트를 Android Studio에서 Open하려고 했을 때 나타날 수 있는 현상이며, 이 경우 아예 다른 방법으로 열어야 한다.






사실 초기 화면에서 이미 알려주고 있기는 하다. 어쨌든 Import Project를 선택하면 되며, 탐색기가 뜨면 해당 프로젝트를 다시 선택해준다.



그러고나면 이렇게 Directory를 입력하라는 창이 뜰텐데, (캡쳐에서는 지웠지만 아마 해당 프로젝트명에 1을 붙인 이름으로 되어있을 것이다.)
새로운 프로젝트를 생성하는 것과 동일하므로 기존 이름과 겹치지 않는 다른 이름을 지어주면 된다.

그 후 나오는 Maven 등의 추가 요구사항은 알맞게 설치해주면 된다.


[AutoHotkey] Window 10 OneNote에, AutoHotkey를 이용한 그리기 단축키 만들기 (요가북 기준)


Laptop
운영체제Windows 10 Home 64bit
개발프로그램AutoHotkey


Window 10의 기본프로그램 중에, OneNote라는 이름 뒤에 넘버링이 붙지 않은, 보라색 바탕에 흰색 아이콘을 가진 프로그램이 있다. (아래 그림 참고)



이는 Window 10 전용 버전인데, UI를 보면 넘버링이 붙는 버전과 다르게 심플한, 태블릿을 타겟으로 했다는 느낌이 강하다. 
요가북의 경우 펜 전환 버튼을 누르면 화면 하단에 퀵 아이콘이 뜨기도 한다.



이 프로그램의 그리기 기능을 써서 손필기 용도로 사용해보면서 느낀 가장 아쉬운 점은, 별도의 단축키가 없다는 점이다. 
예를 들어 필기 도중 지우개를 쓸 때도, 화면 상단으로 마우스를 끌어 지우개 버튼을 클릭, 지우기, 다시 펜 버튼 클릭 후 필기를 계속하는 수밖에 없다는 뜻이다.


목적이 다르긴 하지만 역시 펜을 주로 쓰는 그림툴인 메디방페인트(MedibangPaint)의 경우, 
Z키를 누른 채로 그리기를 하면 지우개 기능이 적용되고, 떼면 다시 펜으로 돌아오는 기능이 있다.



여기서 아이디어를 얻어, 매크로 작성 프로그램인 AutoHotkey로 해당 기능을 구현해보기로 했다.

다운로드는 간단하므로 따로 설명하지 않겠다.
AutoHotkey 공식 페이지: https://autohotkey.com/



다운로드가 끝나면, 바탕화면에서 우클릭 후 새로 만들기를 보면 다음과 같은 항목이 추가된 것을 볼 수 있다.



클릭하면 .ahk 확장자 파일이 하나 생성된다. 

생성 파일에서 우클릭 후 Edit Script를 클릭하면 메모장으로 열리게 되고, 아래의 코드를 입력한다. 상단 부분은 자동으로 생성된다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
; 자동 생성

; 시작 메시지박스 1초간 띄우기
MsgBox, 0, , Onenote_Script START, 1

;무한 루프 (실행 유지)
LOOP
{
 ; F2를 눌렀을 때 (Down Event)
 if(GetKeyState("F2", P))
 {
  ; 지우개 클릭 후 커서 제자리로
  MouseGetPos, xpos, ypos 
  MouseClick, left,  250,  150
  MouseMove, xpos, ypos
  
  ; Down Event 이후에 Up이 입력됐을 경우, 다시 pen을 클릭하여 원상태 복구
  LOOP
  {
   if(!GetKeyState("F2", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 if(GetKeyState("F3", P))
 {
  MouseGetPos, xpos, ypos 
  MouseClick, left,  350,  150
  MouseMove, xpos, ypos
  
  LOOP
  {
   if(!GetKeyState("F3", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 if(GetKeyState("F4", P))
 {
  MouseGetPos, xpos, ypos 
  MouseClick, left,  410,  150
  MouseMove, xpos, ypos
  
  LOOP
  {
   if(!GetKeyState("F4", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 if(GetKeyState("F5", P))
 {
  MouseGetPos, xpos, ypos 
  MouseClick, left,  470,  150
  MouseMove, xpos, ypos
  
  LOOP
  {
   if(!GetKeyState("F5", P))
   {
    MouseGetPos, xpos, ypos 
    MouseClick, left,  300,  150
    MouseMove, xpos, ypos
    break
   }
  }
 }

 ; Ctrl + "-" 입력 시, 메시지박스 띄운 후 종료
 if(GetKeyState("-", P) && GetKeyState("Ctrl", P))
 {
  MsgBox, 0, , Onenote_Script END, 1
  break
 }
}

특정 조건이 눌리면 현 커서 위치를 저장했다가 화면 상에서 버튼 위치로 이동 후 클릭하고 저장했던 위치로 돌아오는, 단순한 원리의 코드이다.
단 요가북에서만 테스트 해봤기 때문에, 다른 해상도의 PC에서도 동일한 위치값을 가질지는 모르겠다. 만약 아니라면 X, Y값의 조정이 필요하다.

첫번째 if문 이후는 키만 변경한 반복되는 코드이다.
사용하는 단축키는 OneNote의 기존 단축키와 겹치지 않는 F2~F5로 했다.
정리하자면 아래와 같다.



그 전에 Ctrl 이나 Alt로도 실험을 해봤는데, 충돌되는 뭔가가 있는지 반응 속도가 엄청 느렸다.


사용한 함수들을 간단히 설명하자면, 다음과 같다.
쓰지 않은 매개변수를 생략했으니 더 자세히 알고 싶으면 공식 도움말을 참고하도록 하자.

GetKeyState (KeyName , Mode )

Mode는 두 가지가 있다.
P: 키를 누르고 있는지의 물리적 상태. Down(누르고 있음)의 경우 1, Up(손을 떼고있음)의 경우 0을 반환
T: CapsLock, NumLock 등의 토글 상태에 따라 켜지면 1, 꺼지면 0을 반환


MouseGetPos  , OutputVarX, OutputVarY

현재 마우스 커서의 위치값을 읽어 저장한다.
OutputVarX/Y 에 변수명을 쓰면 된다.


MouseClick , WhichButton, X, Y

클릭 이벤트를 실행시킨다.
WhichButton에는 Left (default), Right, Middle 혹은 스크롤을 감지하는 WheelUp 등을 넣을 수 있다. X, Y에는 위치값을 넣는다.


MouseMove, X, Y

마우스 커서를 특정 위치로 이동시킨다.
X, Y에 위치값을 넣는다.


MsgBox , Options, Title, Text, Timeout

메시지 박스를 띄운다.

Options: 확인, 중단, 예/아니오 등의 메시지 박스의 종류를 나타낸다. 0은 기본값인 확인버튼이다.

Title: 제목의 텍스트. 생략 시 스크립트 파일명이 된다.

Text: 본문 텍스트

Timeout: 해당 시간이 지나면 창이 자동으로 꺼진다. 초 단위.


그 외 LOOP문의 경우 while(1)와 같다고 생각하면 된다. break로 중간에 강제 종료시키는 것도 동일하다.



스크립트 파일을 더블클릭해도 실행이 되지만,
스크립트 파일에서 우클릭 후 Compile Script를 선택하면 동일한 이름의 .exe 파일이 생성되고, 이것을 실행해도 된다.
그리고 작업표시줄에 등록해놓고 쓰면 편리하다.

종료 시에는 Ctrl + "-" 를 누르면 된다. (중복되지 않게 잘 쓰지 않는 단축키를 사용한 것뿐, 큰 의미는 없다.)


결과 영상