1. 程式人生 > >Android 模擬系統事件(一)

Android 模擬系統事件(一)

簡介

Android系統是在Linux 2.6版本上開發的,所以起使用裝置驅動  /dev/input/event  X (x為0到7)分別來對映不同事件。

內容

這裡就簡單介紹兩種系統自帶類來實現系統事件注入。

方式一:

需要使用的類如下:

android.os.ServiceManager
android.view.IWindowManager

很不幸,筆者在引用他的使用,發現已經被隱藏了,經過查閱資料,有兩種方法可引用。

1、在專案中建立對應路徑的包和類,然後引用,如下:

package android.os;

import android.os.IBinder;

public class ServiceManager {
	public static IBinder getService(String serviceName) {
		return null;
	}
}

package android.view;

import android.os.IBinder;
import android.view.KeyEvent;
import android.view.MotionEvent;

public interface IWindowManager {
	public static class Stub {
		public static IWindowManager asInterface(IBinder binder) {
			return null;
		}
	}

	// 注入自己的視窗事件
	public boolean injectKeyEvent(KeyEvent ev, boolean sync);

	public boolean injectPointerEvent(MotionEvent ev, boolean sync);

	public boolean injectTrackballEvent(MotionEvent ev, boolean sync);

	// public boolean injectInputEventNoWait(InputEvent ev);
}
2、載入類,新增程式碼替換原來的實現方法。
	try{
	  Object object = new Object();
	  Method getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
	  Object obj = getService.invoke(object, new Object[]{new String("window")});
	  //System.out.println(obj.toString());
	  windowMger = IWindowManager.Stub.asInterface((IBinder)obj);
	  }catch(Exception ex){
	  }

方式二:

需要使用的類如下:

android.app.Instrumentation

Instrumentation是Android 測試環境的一個核心框架,在這個框架下,你的測試應用程式可以精確控制應用程式。使用Instrumentation,你可以在主程式啟動之前,建立模擬的系統物件,如Context;控制應用程式的多個生命週期;傳送UI事件給應用程式;在執行期間檢查程式狀態。 Instrumentation框架通過將主程式和測試程式執行在同一個程序來實現這些功能。

測試如下:

						Instrumentation m_Instrumentation = new Instrumentation();
						m_Instrumentation
								.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);


注意:以上方法只能用於本程式,用於其它程式會包INJECT_EVENTS許可權不夠錯誤,但筆者添加了INJECT_EVENTS許可權,沒有起到作用。
    <uses-permission android:name="android.permission.INJECT_EVENTS" /> 
    //允許一個程式截獲使用者事件如按鍵、觸控、軌跡球等等到一個時間流,android 開發網提醒算是hook技術吧

那麼如何突破INJECT_EVENTS許可權問題?方法有兩:

一、將你的程式或服務改成系統級別的,在manifest加如下程式碼:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.banketree.testinjectorandroid"
    android:versionCode="1"
    android:versionName="1.0"
    android:sharedUserId="android.uid.system" >

然後原始檔新增到新增Android.mk檔案,重新編譯原始碼。

二、通過jni的方法將kernel 的傳送keyevent的方法用NDK封裝成方法,做成庫給java呼叫,封裝事件寫入jni,然後Java呼叫,從而不必通過Android WindowsManagerService的驗證,具體如何實現,後期貼出。

結束

簡單的介紹了向系統注入事件的兩種方法,該兩種方法都可以達到功能要求,但僅能在原生程式中執行。

專案下載

相關推薦

Android 模擬系統事件

簡介 Android系統是在Linux 2.6版本上開發的,所以起使用裝置驅動  /dev/input/event  X (x為0到7)分別來對映不同事件。 內容 這裡就簡單介紹兩種系統自帶類來實現系統事件注入。 方式一: 需要使用的類如下: android.os.Ser

android編譯系統分析source build/envsetup.sh與lunch

雖然已經有很多人分析過Android的編譯系統的程式碼了,我也看過他們的部落格,也學到了不少知識,但單純的看別人分析,終究還是理解的不深入,所以,我還是要自己再認真的分析一遍。 想想我們編譯android系統的過程: 首先:source build/envsetup

Android系統架構

查詢 核心 手機 例如 ava 模塊 api 操作系統 運行   一、Android系統版本簡介   Android操作系統已占據了手機操作系統的大半壁江山,截至本文寫作時,Android操作系統系統版本及其詳細信息,已發生了變化,具體信息見下表,當然也可以訪問https:

Android音視訊】Android Onvif-IPC開發——在Android端搭建伺服器模擬Onvif-IP-Camera

Android端實現Onvif IPC開發: 本篇內容簡介: 本篇是上一文章移植失敗採取的第二方案,通過在android搭建service,模擬成一個onvif協議對接的IPC端,在這之前,首先需要明白,onvif裝置對接的流程或者說方式,接下來的文章內容

Android的Touch系統簡介

一、Android touch事件的相關概念 使用者的Touch事件被包裝成MotionEvent 使用者當前的touch事件主要型別有: ACTION_DOWN: 表示使用者開始觸控.  ACTION_MOVE: 表示使用者在移動(手指或者其他)  ACTION_

基於RTP的h.264視頻傳輸系統設計

-i 感謝 項目 頻率 算術 處理 rop sel 決定 一、H.264 的層次介紹 H.264 定義三個層次,每一個層次支持一組特定的編碼功能。而且按照各個層次指定所指定的功能。基礎層次(baselineprofile)支持 I 幀和 P 幀【1】的幀內和幀間

Linux系統管理

linux redhat 服務器 系統管理 點擊下載:Linux系統管理(一)本文出自 “飛奔的魚兒” 博客,請務必保留此出處http://feiyuer.blog.51cto.com/6967044/1931977Linux系統管理(一)

在Python中用Request庫模擬登錄:字幕庫無加密,無驗證碼

用戶名 com color 了無 1-1 value img requests log 如此簡單(不安全)的登錄表單已經不多見了。字幕庫的登錄表單如下所示,其中省去了無關緊要的內容: 1 <form class="login-form" action="/User/

Android內存優化DVM和ART原理初探

java虛擬機 劃分 cimage beef 靜態 由於 jar blank 查找 要學習Android的內存優化,首先要了解Java虛擬機,此前我用了多篇文章來介紹Java虛擬機的知識,就是為了這個系列做鋪墊。在Android開發中我們接觸的是與Java虛擬機類似的Dal

磁盤及文件管理系統入門

fs 硬盤 uefi&gpt linux磁盤及文件系統管理初步目錄 1.磁盤及文件系統管理 2.機械磁盤結構 3.mknod命令 4.parted命令 5.GPT分區&UEFI 6.二進制單位Linux系統管理磁盤分區及文件系統管理RAIDLV

計算機系統基礎

指令譯碼 多核cpu 數據處理 計數 sin 單元 中央處理器 ssi 緩沖 計算機硬件系統 :運算器、控制器、存儲器、輸入設備、輸出設備 中央處理器(Center Processing Unit,CPU):運算器、控制器 存儲器:內部存儲器、外部存儲器 外部設備:輸

Android sensor 系統框架

port amp cap 錯誤 str 註釋 hardware war cas 連載上一篇http://www.cnblogs.com/hackfun/p/7327320.html (D) 如何加載訪問.so庫 在前一篇博客http://www.cnblogs.co

Linux系統管理Linux系統安裝與修復

linux系統安裝與修復一. Linux多種安裝方式與應用軟件安裝1. Linux的硬盤安裝方式(1) 復制Linux的ISO文件到硬盤某個分區(2) 用Linux安裝啟動盤啟動/DOS啟動盤啟動計算機註: DOS啟動盤中必須要存放加載Linux系統的工具及Linux內核和initrd映像文件,主要文件包括:

android的入門記錄

下載到本地 可能 安裝 subst 數據 工具包 一次 以及 由於 ---恢復內容開始--- 首先,這是我人生中的第一篇博客,也許嚴格意義上它並不算是一篇博客,但也代表著一些東西。 前言 我們往往在開始學習一門新的語言或者課程時會遇見各式各樣的問題,比

Linux系統管理Linux設備和內核管理

linux設備和內核管理一. 設備管理概述1.Linux設備的分類字符設備(c):以字符為單位,傳輸速率較低,無需緩沖區。塊設備(b):以數據塊為單位組織和傳輸數據,需要建立緩沖區網絡設備(s):一種通過SOCKET接口進行主機通信的設備2.設備文件(1)功能用於用戶訪問設備進行輸入和輸出操作(2)常見的設

操作系統學習、80x86保護模式內存管理

分享 共享棧 問題 代碼 就會 空間 階段 logs ima 整理的不好,湊合著看吧 目錄 1.內存及尋址 2.地址變換 3.分段機制 4.分頁機制 5.保護 6.去到底部 一、內存及尋址 返回目錄 二、地址變換 80X86 從 邏輯地址 到 物理地址 的轉換

PowerPC中斷系統簡介

PowerPC 中斷1. PowerPC中斷系統簡介PowerPC處理器的中斷系統由兩部分組成,一是內核的中斷及異常的處理;二是中斷控制器。以P2020處理器為例,包括E500內核中斷及異常處理系統和OpenPIC中斷控制器。在E500內核中,包含兩種可以暫時中止處理器運行當前指令的事件、中斷和異常。其中,異

Linux文件系統學習之相關概念???

正是 range 不同的 struct pan 根據 inode 存在 opera “一切皆是文件”是 Unix/Linux 的基本哲學之一。不僅普通的文件,目錄、字符設備、塊設備、套接字等在 Unix/Linux 中都是以文件被對待;它們雖然類型不同,但是對其提供的卻是同

高並發秒殺系統方案

但是 clas image 數據庫 cdn blog 方案 對象 以及 memcatch相比redis而言,無法做持久化。 JSR303:服務端的驗證框架。 首先我們可以將靜態頁面緩存在用戶的瀏覽器端或者是手機端,然後用戶的請求會到達CDN(網站的緩存和鏡

Linux操作系統基礎

Linux 運維服務器操作系統 Unix Linux:GNU/Linux WindowsLinux歷史 Linux是類Unix Unix誕生於1969年 Ken Tompson