Frep이 그닥 빛을 보지 못하는거 같아서... 아예 su권한 없이 ADB 도움 1회만 받고 터치이벤트를 발생시키는 기법을 알아 냈는데요.
그나저나 폰내에서 터치나 키 이벤트 최대 스피드가 얼마정도 되는지 궁금합니다.
도저히 일반 프로그램으론 /dev/input/event 즉 키나 터치스크린에 접근 권한을 부여 받지 못하여 연구한 결과
루팅없이 접근가능한 임시폴더내에서 프로그램이 동작할 경우 터치이벤트를 발생시키는게 가능함을 알았습니다.
몇 주간 이거만 붙들고 한숨만 쉬었네요;;;
고수 분들이 보고 응용해서 좋은 프로그램을 만들어 주셨으면 합니다.
대략적인 구조를 그림으로 그리면요
임시폴더 내 어플 폰에서 직접 개발하여 계속 컴파일해서 바꿔갈 수 있는 소스
-------------------------------- 통신 중 -----------------------------------
터치/키 이벤트 발생기 + Socket Server <-------------> 메크로 소스 + Socket Client
-------------------------------- -----------------------------------
이런 구조로 되어 있습니다.
현재 거의 초 단위이상 되야 2회 터치도 겨우 될 것으로 보입니다
일단 머 폰에서 개발한 소스가 너무 느린거라 그럴지도 모르겠지만요ㅠㅠ
얼마나 세월이 걸릴지도 모르겠고... 이거만 몇 주째인지...
공유 메모리를 쓰는 기법은 아직 시도를 안해봤는데요. 머 해보다가 파일 디스크립션 공유가 어려워 포기
도저히 속도가 못 따라가면 갈아타서 공유 메모리에 담아 일괄처리를 하든
터치이벤트 발생기를 더 복잡하게 만들고 버퍼링 할 수 있게 만드려고 합니다.
Frep도 거의 똑같은 방법일거라 추정합니다.
0.2초의 한계를 뚫고자 했지만 넘사벽인거 같은 느낌이 자꾸드는...
왜 프로그램 언어를 지원하지 않는지 이놈은 어케 노루팅에서도 되는걸까에서 착안...
벤치마킹 했습니다.
이 기세를 몰아 안드로이드에서 Autohotkey를 지원하게 만들고 싶지만
아무리 노력해도 1초에 한번 터치되는 불상사가 터질까봐... 못하겠네요
스크린샷도 찍어봐야하고 아직도 Fully Automatic까진 먼산입니다.
이건 게임메크로가 아니고 디바이스 제어프로그램이니... 악용만 안하면 되는건가
07/27 Critical 문제점
1. Foreground에서 돌게 될 경우 ADB의 도움은 실제 1회지만 ADB와의 연결이 끊어지는 순간 프로세스 강제종료로 인하여 기껏 켜둔 서버가 없어지는 것으로 보임 -> 현재 결론: 죽지 않는 프로세스 Frep은 어케 된 녀석이지?!
2. 현재 Background에서 영원히 가동 할 방법 고안 연구 중...
07/28
1. Background에서 가동할 방법 찾았습니다 2중 nohup 기법 통함
07/29
1. 최종 OS관련 업데이트 이후에도 Frep도 제 방법도 모두 잘 가동하는 것을 확인
--> 현재 특성 Socket통신도 배제하고 딜레이 없이 txt로 만든 스크립트에서 명령어를 읽어서
최대로 찍을 수 있는 속도는 초당 30회 가량 됨
07/30
1. 더 연구한 결과 Sendevent 함수 또한 폰 내부에서 사용 가능함 너무 쉬워서 소스 공개하기로 결정 ^^
노트4 최신 업데이트 기준
sendevent_vashTS.cpp
----------------------------------------------------------------------------
#include <stdlib.h> //system 함수가 내장된 라이브러리
#include <unistd.h> //usleep 함수가 내장된 라이브러리
int main()
{
system("sendevent /dev/input/event2 3 57 0");
system("sendevent /dev/input/event2 3 53 10"); //원하는 x좌표(10)
system("sendevent /dev/input/event2 3 54 10"); //원하는 y좌표(10)
system("sendevent /dev/input/event2 3 58 50"); //원하는 압력값(50)
system("sendevent /dev/input/event2 1 330 1");
system("sendevent /dev/input/event2 0 0 0");
usleep(1000000); //쉬는 시간 1초(1000000us)
system("sendevent /dev/input/event2 3 57 -1");
system("sendevent /dev/input/event2 1 330 0");
system("sendevent /dev/input/event2 0 0 0");
return 0;
}
-------------------------------------------------------------------------------
Android.mk
-------------------------------------------------------------------------------
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := sendevent_vashTS
LOCAL_SRC_FILES := sendevent_vashTS.cpp
include $(BUILD_EXECUTABLE)
--------------------------------------------------------------------------------
Application.mk
---------------------------------------------------------------------------------
APP_ABI := armeabi-v7a
APP_PLATFORM := android-19
---------------------------------------------------------------------------------
간략 사용법
1. <아무프로젝트명>/jni/ 폴더 안에 3개의 파일을 넣는다.
2. 현재 폴더가 <아무 프로젝트명> 에 위치한 상태에서 Android ndk 컴파일 명령어 ndk-build 를 수행한다.
(요청 시 ndk-build방법 자료 정리하겠습니다.)
3. /data/local/tmp 폴더는 일반적으로 보이지 않지만 ADB로 접근 가능한 궁극의(?) 폴더안으로 libs/armeabi-v7a 안에 생성된
sendevent_vashTS 바이너리를 복사하여 넣는다.( adb push libs/armeabi-v7a/sendevent_vashTS /data/local/tmp/ )
4. 실행 권한을 부여한다. (adb shell "chmod 777 /data/local/tmp/sendevent_vashTS")
5. 바이너리를 실행한다. (adb shell /data/local/tmp/sendevent_vashTS)
이상 다른 하드웨어에서도 이 방법이 되는지 알고 싶습니다 저만 되는 불상사가 없기를;;;
잠금해제 직후 나오는 바탕화면에서 이 소스를 가동하면 메뉴의 상단바를 쭉 내리려고 시도할랑 말랑한 그런 상태가 됩니다.
system 함수가 sendevent에도 먹는 이상 고수들은 보자마자 아하 이거 쩐다 할겁니다 거기다
adb로 직접 때리는 명령어과 거의 유사....활용도 도 매우 높습니다. 다만 이 방법으론 최고 스피드를 내기는 어려울것 같습니다만
웬만한 일은 다 할 수 있습니다
-_-;;;
히로매크로는 초당10회정도 터치까지 되는거같더라고요