Windows 프로그램 RemoteAccessHub를 안드로이드로 옮긴 것으로, 흐름은 같고(공유기 로그인 → PC 켜기 → 부팅 확인 → 원격 접속) VPN 접속은 제외함.
Kotlin + Jetpack Compose로 만들었습니다.
| 항목 | 내용 |
|---|---|
| 휴대폰 | Android 8.0 이상 |
| Android System WebView | Play 스토어에서 최신으로 업데이트(공유기 화면을 띄움) |
| 원격 데스크톱 앱 (일반 접속) | Microsoft Windows App(옛 이름 원격 데스크톱) 같은, rdp:// 주소나 .rdp 파일을 여는 앱 |
| 크롬 원격 데스크톱 (선택) | 기기 ID를 저장했으면 Chrome 브라우저로 그 PC를 바로 엽니다(Chrome에 구글 계정 로그인). 기기 ID가 없으면 Chrome Remote Desktop 앱(없으면 브라우저)의 기기 목록 |
| 공유기 | ipTIME. 원격 관리 허용, WOL 목록에 PC 등록 |
| 집 PC | 원격 데스크톱 허용 + 공유기 포트포워딩, 또는 크롬 원격 데스크톱 호스트 |
RemoteAccessHub-android-<버전>.apk를 휴대폰으로 옮겨 실행합니다. Play 스토어 앱이 아니므로 설치할 때 "출처를 알 수 없는 앱" 설치를 허용할지 휴대폰이 묻습니다. 허용 여부는 직접 판단해 주세요.
APK 서명:
keystore.properties가 있으면 그 키로 서명합니다(아래 5번).- 없으면 빌드한 PC의 디버그 키로 서명합니다. 같은 PC에서 만든 APK끼리만 덮어쓰기 업데이트가 됩니다. 다른 PC나 CI에서 만든 APK로 바꾸려면 먼저 지워야 합니다(설정은 [설정 파일 내보내기]로 옮기세요).
처음 실행하면 시작 설정이 열립니다: 시작 → 공유기 주소([연결 확인]) → 켤 PC(이름, 선택 MAC) → 접속 방법(일반 접속 / 크롬 원격 데스크톱) → 확인.
- 공유기 로그인 화면이 앱 전체에 열립니다. 아이디·비밀번호·보안문자는 직접 입력합니다. 앱은 입력을 대신하지 않고 저장하지 않습니다(비밀번호 관리자 자동 저장도 막음).
- 로그인이 확인되면 공유기 화면이 저절로 닫히고, 닫힌 채로 [관리도구]를 자동으로 누릅니다. "공유기 관리 화면이 준비됐습니다"가 뜰 때까지 동작 버튼은 잠깁니다.
- [▶ PC 켜고 접속] → 접속 방식(일반 접속 / 크롬 원격 데스크톱)을 고르면
- WOL 화면으로 이동해 설정한 PC 행의 [PC 켜기]만 누르고, 확인창 [확인]도 자동으로 누릅니다. 대상을 특정하지 못하면 아무것도 누르지 않습니다.
- 원격 데스크톱 포트가 응답할 때까지 기다린 뒤(부팅 확인) 원격 데스크톱 앱을 엽니다. 자격 증명은 그 앱에서 입력합니다.
- 크롬 원격 데스크톱은 기기 ID를 저장했으면 Chrome 브라우저로 그 PC의 연결 화면을 바로 열고, 없으면 앱(없으면 브라우저)의 기기 목록을 엽니다. 구글 로그인과 PIN은 직접 입력합니다. 크롬 원격 데스크톱 앱은 주소를 받아도 특정 PC로 바로 가지 못하고 첫 화면(기기 목록)만 엽니다(1.0.0 실기기 확인). 앱으로 열고 싶으면 ⚙ 설정 → 크롬 원격 데스크톱 → 여는 방법.
- 나눠서 하려면 [⏻ PC 켜기], 이미 켜진 PC에는 [PC 접속] 만 누릅니다(공유기 로그인 없이도 됨).
- [종료]: 공유기 관리 세션을 로그아웃하고(공유기 응답으로 확인), 공유기 화면의 쿠키·저장소를 지운 뒤 앱을 닫습니다.
단계 표시(① 공유기 로그인 ② PC 켜기 ③ 부팅 확인 ④ 원격 접속), 상태 배지(공유기·PC 전원), PC가 켜져 있으면 [PC 접속]이 천천히 밝아졌다 어두워지는 것(공유기 로그인이 풀려 있으면 [공유기 화면]이 주황색으로 같은 효과), 기록 보기·공유(주소·MAC 가림, 단계별 경과 시간 포함), 진단 내보내기, 설정 내보내기·가져오기·초기화는 Windows 버전과 같습니다.
| 항목 | Windows | 안드로이드 |
|---|---|---|
| VPN 접속 | Windows VPN 연결 후 내부 IP로 접속 | 없음. 크롬 원격 데스크톱 부팅 확인·전원 배지도 일반 접속 주소만 씁니다 |
| 원격 데스크톱 | mstsc 실행 |
rdp://full%20address=s:주소:포트로 원격 데스크톱 앱을 열고, 받는 앱이 없으면 .rdp 파일(주소·포트만)로 엽니다. 둘 다 없으면 설치 안내 |
| 공유기 화면 | 별도 창 | 앱 맨 아래 층에 늘 붙어 있는 WebView. 숨기면 메인 화면이 덮을 뿐 버리지 않아 로그인 세션이 유지됩니다. 시스템이 앱 화면을 다시 만들어도(리소스 경로 변경 등) 새 화면에 이어 붙입니다 |
| 숨긴 채 자동 조작할 때의 공유기 화면 너비 | 창 크기(약 1180px) | PC 화면 너비(기본 1180 CSS px)로 넓게 그립니다. 화면 판정·WOL 대상 찾기 규칙이 PC 화면 배치(실기기 진단)에 맞춰져 있어, 휴대폰 배치로 바뀌는 것을 막기 위해서입니다. 보여 줄 때는 휴대폰 너비 그대로. ⚙ 설정 → 고급 → "자동 조작 화면 너비"(0이면 휴대폰 너비) |
| 공유기 API 관찰 | WebView2 DevTools 프로토콜 | 안드로이드 WebView에는 그 기능이 없어, 페이지가 시작될 때 XHR·fetch를 감싸는 스크립트(app/src/main/assets/netwatch.js)로 같은 정보(method 이름, 상태 코드, 결과 정상/오류 코드)만 기록합니다. 로그인 요청의 params와 응답 본문은 기록하지 않습니다 |
| 좌표 클릭 | DevTools 마우스 이벤트 | WebView에 실제 터치(누름→뗌)를 직접 전달 |
| 사생활 보호 | InPrivate 프로필 | 시작·[종료] 때 쿠키·웹 저장소·캐시를 지우고, 앱 백업을 끔 |
| 알림 | 작업 표시줄 깜박임 | 짧은 진동, 공유기 화면 띄움 |
| 창의 X | 로그아웃 없이 닫기 | 뒤로 가기: 열린 창부터 닫고, 마지막에는 앱을 뒤로 보냄(로그인 유지) |
| 진단 내보내기·설정 파일 | 파일 대화상자 | 안드로이드 파일 선택기 |
| 기록 폴더 열기 | 있음 | 없음(앱 전용 폴더에 날짜별로 남기고, 진단 내보내기에 최근 기록이 들어감) |
화면 판독 스크립트(app/src/main/assets/probe.js)와 모의 공유기 화면(app/src/debug/assets/index.html, 디버그 빌드에만 들어감)은 Windows 버전 파일을 복사한 것입니다. 두 버전이 같은 규칙으로 공유기 화면을 읽도록, Windows 쪽에서 고치면 다음으로 가져옵니다.
.\tools\sync-shared.ps1 # 형제 폴더 ..\RemoteAccessHub 에서 복사설정 파일 속성 이름이 Windows 버전과 같습니다. Windows에서 내보낸 설정 파일을 그대로 가져올 수 있고, 안드로이드에서 내보낸 파일도 Windows에서 가져올 수 있습니다. 가져올 때 VPN 항목은 쓰지 않습니다(마지막 접속 방식 "vpn" → 일반 접속, 크롬 원격 데스크톱 부팅 확인 "vpn" → 확인 안 함, 전원 확인 "vpn" → 확인 안 함).
관리자 권한 없이 사용자 폴더에 도구를 설치합니다.
.\tools\setup-sdk.ps1 -AcceptLicenses # JDK 17 + Android SDK (%LOCALAPPDATA%\Android)
.\tools\setup-sdk.ps1 -AcceptLicenses -WithEmulator # + 에뮬레이터와 AVD(rah35)-AcceptLicenses는 sdkmanager의 Android SDK 라이선스에 동의합니다. 직접 읽고 동의하려면 빼고 실행하세요.
.\build.ps1 # 디버그 APK + 단위 검사
.\build.ps1 -Release # + 배포용 APK → artifacts\RemoteAccessHub-android-<버전>.apk
.\build.ps1 -SelfTest # + 연결된 기기/에뮬레이터에서 모의 공유기 자체검사배포용 서명 키를 쓰려면 keystore.properties(저장소에 넣지 않음)를 만듭니다.
storeFile=release.jks
storePassword=...
keyAlias=remoteaccesshub
keyPassword=...디버그 빌드에서는 ⋯ 메뉴의 [디버그] 모의 공유기로 다시 열기로 실제 공유기 없이 흐름을 볼 수 있습니다(Windows의 --mock).
| 종류 | 결과 | 내용 |
|---|---|---|
단위 검사 (JUnit, testDebugUnitTest) |
112/112 통과 | Windows 검사(실기기 화면 구조, WOL 매칭, 클릭 안전 검사, 확인창, 세션 판정, 단계 표시, 버튼 조건, 접속 흐름, 크롬 원격 데스크톱, 전원 배지, 설정·마스킹)를 옮기고, 안드로이드에서 새로 만든 부분(공유기 API 기록 병합, 가짜 공유기 화면으로 PC 켜기 전체 흐름·요청 취소 재시도·확인창 자동 확인, Windows 설정 가져오기, 시작 설정 단계 검사)을 더했습니다 |
계측 자체검사 (connectedDebugAndroidTest) |
4/4 통과 (에뮬레이터 Android 15, WebView 124) | 실제 WebView + 모의 공유기: ① 로그인 → [관리도구] → WOL → 확인창 → 포트 확인 → 원격 데스크톱 앱 열기 → 크롬 원격 데스크톱 → [종료](로그아웃 확인) ② [관리도구]·확인창 [확인]을 실제 터치로 누르는 경로(넓게 그린 화면에서) ③ WOL 요청이 2번 취소돼도 목록을 새로 불러와 다시 보냄 ④ 대상 PC가 없으면 아무것도 켜지 않음 |
| 에뮬레이터 수동 확인 | 확인 | 화면을 직접 눌러 로그인 → 공유기 화면 자동 닫힘 → 관리 화면 준비 → [PC 켜고 접속] → 일반 접속 → 공유기 처리 완료·부팅 확인 → 원격 데스크톱 앱이 없어 설치 안내로 실패 처리. 설정 화면 표시 |
| 배포용 빌드(R8 코드 축소) | 확인 | 에뮬레이터에 설치해 시작 설정을 끝까지 진행 → 앱을 다시 켜도 시작 설정이 다시 뜨지 않고 저장한 주소로 열림(설정 저장·불러오기 정상), 오류 없음 |
app/src/main/java/io/github/jaehun6912/remoteaccesshub/
core/ 설정(Windows와 같은 JSON), 기록(민감정보 가림), 세션 상태, 화면 판독 모델·판정, WOL 대상 매칭, 취소 신호
router/ WebView 래퍼, 넓게 그리는 틀, 공유기 API 관찰, 화면 이동, WOL 자동화, 진단 내보내기
services/ 접속 흐름, TCP 포트 확인, 원격 데스크톱·크롬 원격 데스크톱 열기, PC 전원 배지
ui/ 제어부, 메인·설정·시작 설정 화면, 단계 상태 모델, 테마
app/src/main/assets/ probe.js(Windows와 같음), netwatch.js(공유기 API 관찰)
app/src/debug/ 모의 공유기 서버와 화면(디버그 빌드 전용)
app/src/test/ 단위 검사(JUnit)
app/src/androidTest/ 모의 공유기 자체검사(에뮬레이터·기기)
tools/ SDK 설치, Windows 저장소와 같이 쓰는 파일 가져오기
- 공유기 비밀번호·보안문자·쿠키·세션 토큰을 설정 파일, 기록, 진단 파일 어디에도 남기지 않습니다. 공유기 API 관찰 스크립트도 로그인 요청의 params는 읽지 않습니다.
- 원격 데스크톱 앱·크롬 원격 데스크톱에 넘기는 주소는 형식을 검증한 값으로만 만듭니다(셸·자격 증명 없음).
- 인증서 검증을 전역으로 끄지 않습니다. 필요할 때만 "공유기 주소 한정" 허용을 고를 수 있습니다.
- 누르기 직전에 화면을 다시 읽어, 대상 버튼이 그 자리에 그대로 있고 다른 항목(예: 로그아웃) 위가 아닐 때만 누릅니다.
- 공유기 화면에서 다른 앱 주소(
intent:등)로 이동하는 요청은 막습니다.
이 프로젝트는 개인이 만든 비공식 도구이며 ipTIME(EFM Networks)과 관련이 없습니다. ipTIME은 해당 회사의 상표입니다. 공유기 설정을 바꾸는 기능은 없고 WOL 요청과 로그아웃만 보내지만, 사용에 따른 책임은 사용자에게 있습니다.
| 버전 | 내용 |
|---|---|
| 1.0.3 | 공유기 로그인이 풀려 있으면(공유기가 "인증되지 않음"으로 응답) [공유기 화면] 버튼이 [PC 접속]과 같은 효과로 주황색이 서서히 밝아졌다 어두워짐. 공유기 화면을 띄워 둔 동안과 [종료] 중에는 멈춤 |
| 1.0.2 | 설정 화면 스크롤이 잘 안 되던 문제 수정(아래 공유기 화면으로 터치가 새지 않게 막는 처리가 터치를 소비해, 천천히 끄는 스크롤이 취소되던 것). PC 전원 확인 주기 최소값을 15초에서 1초로 낮춤(짧은 주기에서는 한 번 확인할 때 기다리는 시간도 1.5초로 줄임) |
| 1.0.1 | 어두운 테마에서 ⚙·⋯ 아이콘이 보이지 않던 문제 수정. 크롬 원격 데스크톱: 기기 ID가 있으면 Chrome 브라우저로 그 PC를 바로 열기(설정에서 앱으로 바꿀 수 있음). PC 켜기·로그인 감지의 확인 간격 단축, 기록에 단계별 경과 시간 남기기, [기록 공유] 추가 |
| 1.0.0 | 처음 공개. Windows 버전 1.7.1의 흐름을 옮김(VPN 제외) |