본문 바로가기

프로그램 개발일지

[ADB] adb 한글 전송이 안 될때 / 한글 입력이 안 될때

반응형
 

Instagram

 

www.instagram.com

 

 

 

 

 

파이썬에서

 

def shell(command):
   a = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
   print(a)
    
shell(f"adb shell input text '안녕하세요'")

 

 

이렇게 날려보자.

 

백날 해봐도 한글 전송이 안된다 ............................

 

진짜 답 없는 비상상황이 발생한거다.

 

 

 

 

 

 

 

 

 

간단한 해결 방법이 있었으니 !

 

 

 

 

먼저 스마트폰에서 G보드를 설치하자.

 

 

 

 

설치 후

 

 

shell('adb shell ime list -a -s')

 

 

이렇게 하면 리스트가 나올텐데, 

 

 

com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

 

와 유사한게 있으면 해당 키보드로 변경해주자.

 

 

shell(f'adb shell ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME')

 

 

그 후 

 

 

 

shell(f"adb shell input text 'gkdldy'")

 

 

이제 잘 전송 된다 .....

 

 

다만 여기서 문제점은 영타로 보내야만 한글로 전송이 된다는 점.

 

 

 

 

 

def reply(text):

 

 

 

 

reply 함수를 만들어 주자.

 

 

eng_table = {
    'ㅂ': 'q', 'ㅃ': 'Q', 'ㅈ': 'w', 'ㅉ': 'W', 'ㄷ': 'e', 'ㄸ': 'E', 'ㄱ': 'r', 'ㄲ': 'R', 'ㅅ': 't', 'ㅆ': 'T', 'ㅛ': 'y', 'ㅕ': 'u', 'ㅑ': 'i', 'ㅐ': 'o', 'ㅒ': 'O', 'ㅔ': 'p', 'ㅖ': 'P',
    'ㅁ': 'a', 'ㄴ': 's', 'ㅇ': 'd', 'ㄹ': 'f', 'ㅎ': 'g', 'ㅗ': 'h', 'ㅓ': 'j', 'ㅏ': 'k', 'ㅣ': 'l', 'ㅡ': 'z', 'ㅜ': 'x', 'ㅂ': 'c', 'ㅐ': 'v', 'ㅔ': 'b', 'ㅁ': 'n', 'ㄹ': 'm'
}

cho_table = ['r', 'R', 's', 'e', 'E', 'f', 'a', 'q', 'Q', 't', 'T', 'd', 'w', 'W', 'c', 'z', 'x', 'v', 'g']
jung_table = ['k', 'o', 'i', 'O', 'j', 'p', 'u', 'P', 'h', 'hk', 'ho', 'hl', 'y', 'n', 'nj', 'np', 'nl', 'b', 'm', 'ml', 'l']
jong_table = ['', 'r', 'R', 'rt', 's', 'sw', 'sg', 'e', 'f', 'fr', 'fa', 'fq', 'ft', 'fx', 'fv', 'fg', 'a', 'q', 'qt', 't', 'T', 'd', 'w', 'c', 'z', 'x', 'v', 'g']

 

 

노가다 그 자체

 

 

 

def decompose_char(c):
    if '가' <= c <= '힣':
        base_code = ord(c) - ord('가')
        cho = base_code // (21 * 28)
        jung = (base_code % (21 * 28)) // 28
        jong = base_code % 28
        return cho_table[cho], jung_table[jung], jong_table[jong]
    else:
        return c

 

 

reply 함수 안에 또 함수를 넣어주고,

 

 

result = []
for char in text:
    if char == ' ':
        result.append(' ')
    else:
        decomposed = decompose_char(char)
        if isinstance(decomposed, tuple):
            result.extend(decomposed)
        else:
            result.append(decomposed)

return ''.join(result)

 

 

위 코드로 마무리 해주면

 

 

 

reply('안녕하세요') 의 반환값은 dkssudgktpdy 가 된다.

 

 

 

 

 

 

usertxt = input('한글로 할말쓰세요')

txt = reply(usertxt)
shell(f"adb shell input text '{txt}'")

 

 

사용자가 안녕 이라고 입력하면, 자동으로 dkssud 으로 변환 후 adb 명령어를 보내기 때문에

 

실제로 스마트폰에서 입력되는것도 안녕 이라고 입력된다.

 

 

 

 

 

 

 

아 참, 네이버 카페도 개설 했고 프로그램 주문 제작도 받고 있다.

 

 

 

 

[종합 매크로] 공지사항

---업데이트 예정

myworld1004.tistory.com

 

 

 

 

코딩쟁이들 놀이터 : 네이버 카페

세상 모든 코딩쟁이들의 카페입니다

cafe.naver.com

 

 

 

주식회사 유메

#프로그램제작 #프로그램

open.kakao.com

 

반응형