티스토리 뷰

안녕하세요.
이번에 "키보드스위치" 앱(마켓에서 검색하심 나옵니다.)을 만들면서 얻게된 팁(?)입니다.
인터넷을 많이 검색해봤는데 이 방법이 잘 없었습니다.
안드로이드, 리눅스, 자바 다 처음이라.... 이거 알아내는게 좀 힘들었습니다..
고수분들에게는 의미없을지 몰라도 저같은 초보에게는 정말 필요한 것 같아서 이렇게 올립니다.

** 루팅된 폰에서만 되는 방법입니다. **

제가 "키보드스위치" 앱을 만들면서 InputMethodManager의 SetInputMethod를 쓸려고 했지만 레퍼런스 문서에 나와있듯이
현재 작동하고 있는 키보드앱의 token을 알아야만 동작한다는 것을 알았습니다. 좌절했죠..
그런데 안드로이드 소스의 InputMethodManager 부분을 보니까 WRITE_SECURE_SETTINGS 권한을 가진 경우
token을 null로 입력해도 SetInputMethod를 이용할 수 있다는 것을 알아냈습니다.
그러나 WRITE_SECURE_SETTINGS 권한을 그냥 쓸 경우에는 무조건 에러가 났습니다.ㅡㅜ
(보니까 뭐 Shared user id를 android.uid.system으로 해주면 된다고 하던데.. 잘 안됐습니다. 그리고 이 방법은 굳이 Shared user id를 android.uid.system으로 해주지 않아도 됩니다.)
그래서 좀 더 알아보니 프로젝트를 unsigned APK 로 export 하고 안드로이드 소스에 포함된 platform key로 unsigned APK를 서명하고
플랫폼 키로 서명된 APK를 /system/app 폴더에 넣어주면 WRITE_SECURE_SETTINGS 권한을 획득한 상태로 앱이 동작이 되는 것입니다!!
이렇게 WRITE_SECURE_SETTINGS 권한은 얻으면 할 수 있는 일이 더 많지 않을까요? (조금 위험하기는 하지만..)

그런데.. 일단 이렇게 앱을 만들어서 사용자가 사용하기 위해서 /system/app 폴더에 넣기에는 과정이 너무 복잡하기에
저는 권한을 획득한 앱을 /system/app 폴더에 넣어주는 앱을 만들어서 설치 과정이 쉽도록 했습니다.
/system/app 폴더에 넣어주는 것은 assets와 쉘 커맨드를 이용했습니다. ("su")

부가적으로
설치 앱을 만들면서 알게된 방법입니다.
su를 이용해서 파일을 옮길 때 mvcp 커맨드로 파일을 옮기려고 하면
무조건 퍼미션 디나이 뜹니다. 그러나 cat 커맨드를 써서 "cat ***.apk > /system/app/***.apk"  <== 요렇게 해주면 괜찮습니다.
물론 원본은 남아있으므로 원본을 지우려면 "rm ***.apk" 이렇게 해줘야 합니다.

'Android > Apk Signing' 카테고리의 다른 글

About .apk Signing  (0) 2013.03.26
App Key  (0) 2013.03.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 30 31
글 보관함