Android INJECT_EVENTS permission
Starting from API 18 there is UiAutomation class, which isn't bound to user permissions.
For more information see http://developer.android.com/reference/android/app/Instrumentation.html#getUiAutomation()
Actually, this is pretty simple on a rooted device. I think any app that is running off /system will get access to whatever permissions it requires. So simply manually install your App to /system (as described here http://androidforums.com/droid-all-things-root/64603-installing-apk-system-app-directory.html ):
Execute the following commands in the terminal emulator to remount the /system directory as read/write and to install the application into the /system/app directory from the SDCARD:
su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
cp /sdcard/APP.apk /system/app
If you prefer to use adb from your computer, execute these commands:
adb remount
adb shell cp /sdcard/APP.apk /system/app
Several users have utilized root explorer from the Google marketplace to simplify this process.
Alternatively, check this out: How to compile Android Application with system permissions
Using Touch Events:
Sign the application with the same signature that the ROM is signed with
Download keytool-importkeypair to do this
Find platform.pk8 + platform.x509.pem: {Android Source}/build/target/product/security
Then generate a certificate:
./keytool-importkeypair -k google_certificate.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform
Now export your app from Eclipse and sign with the new certificate you generated
Build ROM, flash to device, install app
Check out http://code.google.com/p/android-event-injector/
To inject events into a separate process, it is required to both install your app into /system/app and sign your APK with the system certificate.
1. Add permission to the app manifest
<uses-permission android:name="android.permission.INJECT_EVENTS"/>
2. Sign your APK with the system certificate
This requires that you have the AOSP source in order to build a keystore with the google keys used to build the system running on the phone.
Given you have an AOSP directory, @Eli does an excellent job of showing how to build the keystore using a nice script called 'keytool-importkeypair'
Using IntelliJ as an example, choose Generate Signed APK.. from the Build menu. Locate the keystore created above, type in the password given (e.g., android), give the key the same password, if desired. Note that the signed apk is written to the project root (!) not to the typical location (./out/production//).
3. Install into /system/app/
adb root
adb remount
adb push MyApp.apk /system/app
The 'installation' happens automatically. Note, however, that unlike the normal app installation process, any native libraries in your APK are not copied into /system/lib/. You will need to do that manually, if you are using the NDK to build and call your own native libraries.