1. 程式人生 > >將程式變成system app 實現home、back、menu等按鍵模擬

將程式變成system app 實現home、back、menu等按鍵模擬

1.使一個程式成為系統程式

我們必須在manifest 中配置android:sharedUserId="android.uid.system"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.flyaudio.floatwindows"
    android:versionCode="1"
    android:sharedUserId="android.uid.system" 
    android:versionName="1.0" >
加上許可權:<uses-permission android:name="android.permission.INJECT_EVENTS" />

這個許可權就是為了允許一個程式截獲使用者事件如按鍵、觸控、軌跡球等等到一個時間流。

2.模擬home、back、menu

	private void homePress()
	{
		Intent mHomeIntent = new Intent(Intent.ACTION_MAIN);
        mHomeIntent.addCategory(Intent.CATEGORY_HOME);
        mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        getContext().startActivity(mHomeIntent);
	}
	
	private void backPress()
	{
        Runtime runtime = Runtime.getRuntime();
        try {
			runtime.exec("input keyevent " + KeyEvent.KEYCODE_BACK);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private void menuPress()
	{ 
        Runtime runtime = Runtime.getRuntime();
        try {
			runtime.exec("input keyevent " + KeyEvent.KEYCODE_MENU);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
其實還有一種方法就是:
		new Thread(){
			   public void run() {
			    try{
			     Instrumentation inst = new Instrumentation();
			     inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
			    }
			    catch (Exception e) {
			                 Log.e("Exception when onBack", e.toString());
			             }
			   }
			  }.start();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
這裡可以傳入任何鍵值。

3.新增系統簽名

完成上面2個步驟之後,安裝程式發現會出現Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]錯誤。因為使用eclipse編譯後的程式不帶有platform簽名,所以作為系統程式安裝不了。

所以需要對apk進行簽名

    將簽名工具(signapk.jar)、簽名證書(platform.pk8和platform.x509.pem)及編譯出來的apk檔案都放到同一目錄

    終端進入該目錄執行java -jar signapk.jar -w platform.x509.pem platform.pk8 XXX.apk out/XXX.apk

    拿出out目錄下被簽名後的apk進行安裝

4.附上簽名工具