NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET 매크로 프로그램 만들기. (안드로이드 기기에 카카오톡 앱 설치와 삭제 및 화면 캡쳐 with ADB 5부)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 안드로이드 기기에 카카오톡 앱을 설치하고, 삭제하는 방법에 대해서 알아볼께요. 업무 자동화 매크로를 만들다보면 멀티 다계정이나 멀티 다클라 기능이 필요한 경우가 많습니다. 컴퓨터에 안드로이드 휴대폰이 100대가 연결되어 있다고 생각 해보세요. 전부 초기화하고, 자동화 할 앱을 설치해야 한다면 매우 많은 시간이 소요될거예요. 안드로이드폰에 앱 설치 기능을 사용하면 좀 더 쉽게 자동화 작업을 수행할 수 있습니다.

     

    앱 설치와 삭제 코드는 아래와 같습니다.

    case Definition.AdbCommand.AppInstall:
        PackageManager aim = new PackageManager(player.Manager.AdbInfo.ADB, device);
        aim.InstallPackage(SelectFile, callback: null);
        break;
    case Definition.AdbCommand.AppUninstall:
        aim = new PackageManager(player.Manager.AdbInfo.ADB, device);
        aim.UninstallPackage(ADBPackageName);

     

    앱 설치 패키지 메소드는 아래와 같습니다.

    callback?.Invoke(new InstallProgressEventArgs(PackageInstallProgressState.Installing));
    ValidateDevice();
    StringBuilder stringBuilder = new StringBuilder("pm install");
    if (arguments != null)
    {
        foreach (string value in arguments)
        {
            stringBuilder.Append(' ').Append(value);
        }
    }
    
    stringBuilder.AppendFormat(" \"{0}\"", remoteFilePath);
    string command = stringBuilder.ToString();
    InstallOutputReceiver installOutputReceiver = new InstallOutputReceiver();
    AdbClient.ExecuteShellCommand(Device, command, installOutputReceiver);
    if (!string.IsNullOrEmpty(installOutputReceiver.ErrorMessage))
    {
        throw new PackageInstallationException(installOutputReceiver.ErrorMessage);
    }

     

    스크립트는 ADB에 연결한 후 명령 액션으로 카카오톡 앱을 설치하도록 했습니다. 카카오톡뿐만 아니라 apk 파일은 모두 설치가 가능합니다.

    gEOOp8K.jpeg

     

     

    안드로이드폰에 설치할 앱 apk 파일은 미리 준비해야 합니다. 제가 이용하는 사이트는 ApkPure 입니다. 아래 링크를 클릭하면 접속할 수 있습니다.

    [ ApkPure ]

     

    카카오톡을 검색해서 하단에 다운로드를 클릭하면 파일을 받을 수 있습니다.

    A4YSA4F.jpeg

     

     

    바탕화면에 카카오톡 설치 파일인 apk가 받아졌습니다.

    OBehqWn.jpeg

     

     

    앱 설치 및 삭제 테스트는 아래 동영상을 참고해서 테스트할 수 있습니다.

     

     

    이번에는 핸드폰 화면을 캡쳐하는 방법을 알아볼께요. 이 내용은 약간 복잡한데요. ADB에서 스크린샷 명령을 내리면 연결된 윈도우로 캡쳐를 저장하는게 아닌 안드로이드 스마트폰의 특정 위치에 캡쳐한 이미지가 저장됩니다. 따라서, 지금까지 알아본 모든 내용을 총 집합해서 처리해줘야 합니다.

     

    스크린샷 명령을 내리고, 파일 다운로드를 통해서 윈도우로 파일을 이동시킵니다. 그리고, 파일 삭제 명령을 통해서 캡쳐했던 이미지를 삭제해야 합니다. 그리고, 유니크 아이디와 관련된 로직도 필요합니다. 왜냐하면, 연속해서 캡쳐할 때 동일한 이름으로 파일을 저장하면 연속된 작업을 수행할 수 없기 때문입니다.

    case Definition.AdbCommand.Capture:
        uniqueID = DateTime.Now.ToString("yyyyMMddHHmmssfff");
        fileName = Path.Combine(DeviceFilePath, $"{uniqueID}.png");
        fileName = fileName.Replace('\\', '/');
        var imageName = fileName;
    
        if (!string.IsNullOrEmpty(DeviceFilePath))
        {
            process = Process.Start(new ProcessStartInfo
            {
                FileName = "cmd.exe",
                Arguments = $"/c adb shell screencap \"{fileName}\"",
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
            });
    
            process.WaitForExit(3000);
        }
    
        using (SyncService service = new SyncService(new AdbSocket(player.Manager.AdbInfo.ADB.EndPoint), device))
        {
            downloadPath = SelectFile;
            fileName = Path.GetFileNameWithoutExtension(downloadPath);
            ext = Path.GetExtension(downloadPath);
            dirPath = Path.GetDirectoryName(downloadPath);
            downloadPath = Path.Combine(dirPath, $"{fileName}_{uniqueID}{ext}");
    
            using (Stream stream = File.OpenWrite(downloadPath))
                service.Pull(imageName, stream, null);
        }
    
        if (UseCaptureRemove)
        {
            process = Process.Start(new ProcessStartInfo
            {
                FileName = "cmd.exe",
                Arguments = $"/c adb shell rm \"{DeviceFilePath}/{Path.GetFileName(SelectFile)}\"",
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
            });
        }
        break;

     

    간단하게 테스트한 내용은 아래 동영상을 참고하시면 됩니다.

     

     

    이 글이 도움이 되셨다면~ 커피 한잔이라도 후원 부탁드립니다^^

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.