본문 바로가기
이미지 매크로

C# .NET 매크로 프로그램 만들기. (안드로이드 휴대폰 매크로 만들기 with ADB 2부)

by 업무자동화 2024. 5. 21.
반응형

유료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product_review 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#매크로 #메크로 #매크로프로그램 #엔지엠소프트웨어 #엔지엠에디터 #엔지엠플레이어 #비활성매크로 #하드웨어매크로 #기계식매크로 #마우스광클릭 #키보드매크로 #이미지서치 #이미지매치 #블로그 #카페 #인스타그램 #유튜브 #소셜네트워크 #카카오톡 #텔레그램 #자동화

 

 

  • 엔지엠 커뮤니티 월 이용료: 4,500원, 1년 이용료: 55,000원 (전체 기능의 80프로)
  • 엔지엠 얼티밋 월 이용료: 6,500원, 1년 이용료: 77,000원 (전체 기능의 90프로)
  • 엔지엠 엔터프라이즈 월 이용료: 9,200원, 1년 이용료: 110,000원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 요즘 와이프와 자전거 라이딩을 하면서 이런저런 이야기들을 하고 있는데요. 더이상 컨텐츠로 쓸만한 내용을 찾기가 쉽지 않네요. 그렇더라도 꾸준히 뭔가 하다보면 중구난방으로 올리는 내용들도 정리가 되고, 어느 순간 성과가 나오지 않을까요? 요즘 동기부여 관련된 내용들을 자주 보는데요. 매일 반복되는 일과에 지쳐서 그런지 게을러지려고 그러는거 같아요. 그래서, 이런 글들을 보면서 다시 힘을 낼 수 있어서 그런듯합니다.

 

오늘은 1부에 이어서 안드로이드 기기들을 어떻게 제어할 수 있는지를 알아볼께요. 엔지엠 매크로 6에도 ADB 기능이 이미 만들어져 있는데요. 아무래도 만든지가 벌써 몇년이 흘렀기 때문에 최신의 기능을 포함하고 있는 ADB로는 할 수 없는 것들이 있더라고요. 구 버전에서 지원하지 않는 것들을 이번에 새롭게 추가하고, 편의성도 개선할 수 있으면 좋겠네요. 일단 또다시 공부하면서 어떤 기능들이 새롭게 추가되었는지 그리고, 어떻게 구현할 수 있는지를 공부해봅시다.

 

ADB 명령 액션에서 제공할 기능 목록은 아래와 같습니다.

public enum AdbCommand
{
    Home = 0,
    Back = 1,
    StartApp = 2,
    StopApp = 3,
    Upload = 4,
    Download = 5,
    AirplaneModeOn = 8,
    AirplaneModeOff = 9,
    WifiOn = 10,
    WifiOff = 11,
    AppInstall = 20,
    AppUninstall = 21,
    RemoveFile = 30,
    RemoveFolder = 31,
    Capture = 99
}

 

 

내용이 많아서 다 구현된건 아니지만, 몇가지만 개발하고 테스트를 해볼께요. 이전 시간에 이미 모델은 추가를 해두었기 때문에 여기에 코딩을 진행합니다.

 

 

사용자가 선택한 명령을 수행하기 위해 속성을 하나 추가했어요.

public class CommandModel : BaseModel
{
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("Commands")]
    [LocalizedDescription("AdbCommands")]
    [Browsable(true)]
    [DefaultValue(typeof(Ai.Definition.AdbCommand), "Home")]
    public Ai.Definition.AdbCommand AdbCommand { get; set; } = Ai.Definition.AdbCommand.Home;

 

기본 구조와 디자인은 모두 동일합니다.

switch (AdbCommand)
{
    case Definition.AdbCommand.Home:
        if (player.Manager.AdbInfo.AdbFilter == null || player.Manager.AdbInfo.AdbFilter.Length == 0)
            player.Manager.AdbInfo.ADB.ClickHomeButtonAsync(device, player.CT);
        else
        {
            if (player.Manager.AdbInfo.AdbFilter.Contains(device.Model) || player.Manager.AdbInfo.AdbFilter.Contains(device.Serial))
                player.Manager.AdbInfo.ADB.ClickHomeButtonAsync(device);
        }
        break;

 

ADB 서버가 실행되고, 각각의 장치(Device)들은 서버와 통신합니다. 우리가 흔히 생각하는 웹 방식을 생각하면 이해하기 쉬울거예요. 그래서, 한번에 모든 명령을 동일하게 수행할 수 있는데요. 이렇게하면 개별적으로 장치를 제어할 수 없는 단점이 있습니다.

 

이 단점을 극복하기 위해서 개별로 안드로이드폰을 하나씩 붙이면 좋겠지만, 이는 생각보다 비효율적인 작업입니다. 컴퓨터에 100대 가까이 안드로이드폰을 연결한 상태에서 하나씩 붙여 나간다면 총 100번의 명령을 수행해야 합니다. 그렇기 때문에 서버에 연결된 모든 장치를 가져와서 동시에 처리하는게 좋습니다. 하지만, 특수한 경우에는 각각 처리할 수 있어야 하는데요. 이 시나리오는 다음에 한번 알아보도록 할께요. 현재는 모든 디바이스에 명령을 주는 방식으로 처리됩니다.

 

그래서, 위 코드를 보면 신호를 받을 기기만 필터를 통해 명령을 수행할 수 있도록 코딩되어 있습니다. 기기를 하나씩 제어하고 싶다면 각각의 스크립트를 만들어서 개별적으로 실행해야 합니다. 물론, 필터는 각각 디바이스 모델명으로 처리해야 합니다. 아직 테스트 해보지는 않았지만, 이미 멀티 핸들 기능을 만들어서 내부적으로 스크립트 복제가 되도록 했었습니다. 이 부분과 연동하면 크게 변경 없이 처리할 수 있을거 같기도 합니다. 다만, 필터 분기를 각각의 핸들마다 어떻게 처리할지는 고민이 필요할듯 합니다.

 

아래 3개의 속성은 앱을 설치하거나 삭제 또는 안드로이드 휴대폰에 파일을 업로드하거나 삭제할 때 사용하는 보조적인 속성들입니다.

[LocalizedCategory("Action")]
[LocalizedDisplayName("SelectFile")]
[LocalizedDescription("SelectFile")]
[Browsable(true)]
[DefaultValue(null)]
[Editor(typeof(TypeEditor.OpenFileSelectorEditor), typeof(UITypeEditor))]
public string? SelectFile { get; set; }

[LocalizedCategory("Package")]
[LocalizedDisplayName("ADBPackageName")]
[LocalizedDescription("ADBPackageName")]
[Browsable(true)]
[DefaultValue(null)]
[TypeConverter(typeof(TypeConverter.AndroidAppConverter))]
public string? ADBPackageName { get; set; }

[LocalizedCategory("Package")]
[LocalizedDisplayName("ADBAllPackageName")]
[LocalizedDescription("ADBAllPackageName")]
[Browsable(true)]
[DefaultValue(false)]
public bool AllPackage { get; set; }

 

이제 홈 버튼이 제대로 동작하는지 테스트를 해볼께요. 테스트를 위해서 녹스 앱플레이어와 USB로 연결된 휴대폰에 구글 크롬을 실행 했습니다.

 

 

이제 완성된 내용을 테스트 해볼께요. 자세한 내용은 아래 동영상을 참고해주세요.^^

https://youtu.be/vBOxi8ZYCTU

 

 

 

이번에는 Back(백) 버튼을 클릭하는걸 만들어 볼께요. 어차피 AdbClient에 모두 구현되어 잇는 함수를 호출하기만 하면 되기 때문에 코드는 대부분 동일합니다.

case Definition.AdbCommand.Back:
    if (player.Manager.AdbInfo.AdbFilter == null || player.Manager.AdbInfo.AdbFilter.Length == 0)
        player.Manager.AdbInfo.ADB.ClickBackButtonAsync(device, player.CT);
    else
    {
        if (player.Manager.AdbInfo.AdbFilter.Contains(device.Model) || player.Manager.AdbInfo.AdbFilter.Contains(device.Serial))
            player.Manager.AdbInfo.ADB.ClickBackButtonAsync(device);
    }
    break;

 

이 테스트도 아래 동영상과 같이 쉽게 확인할 수 있습니다. 안드로이드폰의 Back 버튼을 누르기 위해서 연결된 장치 모두 엔지엠소프트웨어 홈페이지에 접속 해두었습니다. 그리고, 이전 페이지는 네이버인데요. 백(Back) 버튼을 누르면 엔지엠소프트웨어 홈페이지에서 뒤로가서 네이버 사이트로 이동하는걸 확인할 수 있습니다.

https://youtu.be/OL3C_bk4_zM

 

 

 

오늘은 간단하게 Home 버튼과 Back 버튼이 ADB로 연결된 모든 장치(안드로이드 디바이스)에 적용되는지 확인 해봤습니다. 만약, 필터에 장치의 모델명 또는 시리얼 정보를 입력하면 해당 장치만 명령을 수행하게 됩니다. 이 내용은 다음에 추가할 내용과 함께 같이 테스트 해보도록 할께요. 다음에 할 내용은 몇가지 옵션들이 더 추가되어야 하기 때문에 약간 복잡할 수 있긴합니다만, 이미 잘 만들어진 ADB 프레임워크를 이용하면 쉽게 구현이 가능합니다. 다음 내용도 많이 기대 해주세요.^^

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

 

반응형

댓글