MonkeyRunner를 Java에 연결해서 사용이 가능하다. 라는 식으로 예제 소스와 내용을 설명해주었다.


 이것을 제대로 Java의 소스를 작성하는 방법을 포스팅 할려고 한다.


 먼저, Eclipse을 이용해서 Java Project을 만들어 놓는다.



 프로젝트에서 Properties(환경 설정)에 들어가서 환경을 설정하는 창을 띄운다.



 여기서 Java Build Path(Java에서 Library등을 가지고오게하는 설정이다.)에서 들어가면, Library을 설정할 수 있는 탭이 있다.(이미 추가를 시킨 상태이다.)


 여기서 [Android SDK 경로]\tools\lib\MonkeyRunner.jar 을 가지고온다.


 여기서 MonkeyRunner라는 것은 공개 소스로 제작되어 있는 부분이 있다.(그리고 MonkeyRunner가 아닌, chimpchat.jar을 가지고와서 사용하는게 더 올바른 방식이다.


 MonkeyRunner는 Java + Python인 상태이기 때문에, Python의 정보를 가지고 있지 않는다면, 사용을 제대로 할 수 없는 것을 알 수 있다.

 하지만, MonkeyRunner에서 있는 Python을 분석해서 chimpchar에게 정보를 보내는것을 알 수 있기 때문에, 다음 링크를 읽으면서 분석하면, 이해에 도움이 될 것이다.


 링크 : https://android.googlesource.com/platform/tools/swt/+/android-4.4_r1.1/monkeyrunner/src/main/java/com/android/monkeyrunner


 이제, 다음과 같은 소스를 보여주면서, 자세하게 설명을 하도록 하겠다.


 

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
import com.android.chimpchat.adb.AdbBackend;
import com.android.chimpchat.core.IChimpDevice;
import com.android.chimpchat.core.IChimpImage;
 
public class MonkeyTest {
    public static void main(String[] args) {
        IChimpDevice device = null;
        try
        {
            // sdk/platform-tools has to be in PATH env variable in order to find adb
            device = new AdbBackend().waitForConnection();            
        }
        catch(java.lang.NullPointerException e)
        {
            System.out.printf("Error");
            System.exit(-1);
        }
 
        // Print Device Name
        System.out.println(device.getProperty("build.model"));
 
        // Take a snapshot and save to out.png
        device.takeSnapshot().writeToFile("out.png""png");
 
        device.dispose();
        
        System.exit(0);
    }
}
cs


 이것에서 device라는 것은 ChimpDevice라는 것으로, Adb에 연결하는 방식으로,


 Python에서 있는 MonkeyDevice와 비슷하다고 보면, 이해가 될 것이다.


 MonkeyRunner는 AdbBackend라는 클래스와 동일하다고 보면 될 것이다.


 AdbBackend라는 클래스는 ADB와 연결되서 통신하는 클래스이다.


 여기서, waitForConnection은 2가지의 함수가 존재하는데.


 waitForConnection()과 waitForConnection(String)이 있다.


 여기서 String에는 ADB에서 있는 Device의 명칭을 작성하면, 해당 Device을 연결 할 수 있게 된다.


 여기서 device의 정보를 얻기 위해서는 ddmuilib이라는 것을 이용해야된다.


 거기에 대해서는 또 다른 방법을 찾아야 될 것이므로, 나중에 하도록 한다.


 Adb의 정보가 없다면, NullPointerException이라는 오류가 발생하는 경우가 있다.

 이 경우에 예외 처리하는게 좋다.


 현재 Device의 명칭을 알기 위해서 device.getProperty을 이용해서 알아보게 만들 수 있으며.


 device.takeSnapshot()을 이용해서 그림을 가지고 올 수 있다.


 writeToFile(String1, String2)에서 String1은 파일 명칭/경로를 뜻하는 것이고, String2는 파일의 포맷이다. 기본적으로 PNG을 기본적으로 가지고 있으며, PNG을 제외한, JPG가 적용이 가능하다.


 device.dispose();는 연결을 끊는 것이다.


 윗 방식을 이용하면, 스샷을 찍어서 png 포맷을 가진 out.png 파일이 생성된다.

Posted by JunkMam
,