android监控进程有哪些,android 监控应用进程

在android系统中,怎么监控应用的进程改变及消亡呢?

至于监控应用进程能做什么,这个就不多说了,你懂的。

在android系统中有这么一个类ActivityManagerNative,看名称就大概能猜到该类是做什么用的了,该类中有个方法“registerProcessObserver”

1 public voidregisterProcessObserver(IProcessObserver observer) throws RemoteException {

2 Parcel data =Parcel.obtain();

3 Parcel reply =Parcel.obtain();

4 data.writeInterfaceToken(IActivityManager.descriptor);

5 data.writeStrongBinder(observer != null ? observer.asBinder() : null);

6 mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);

7 reply.readException();

8 data.recycle();

9 reply.recycle();

10 }

该方法就是注册 进程观察者方法,传入的对象为IProcessObserver 类型,而查看工程源码会发现,整个工程中都不能找到IProcessObserver .java;那这个类是怎么来的呢?

搜索源码你可以找到对应的IProcessObserver .aidl文件,对了,就是这个aidl文件编译后,会产生对应的类。

该类中有三个方法:

1 private IProcessObserver mProcessObserver = newIProcessObserver.Stub() {

2

3 @Override

4 public void onForegroundActivitiesChanged(int pid, intuid, boolean foregroundActivities) {

5 Log.i(TAG, "onForegroundActivitiesChanged: pid " + pid + " uid " +uid);

6 }

7

8

9 @Override

10 public void onProcessDied(int pid, intuid) {

11 Log.i(TAG, "onProcessDied: pid " + pid + " uid " +uid);

12 }

13

14 @Override

15 public void onImportanceChanged(int pid, int uid, intimportance)

16 throws RemoteException {

17

18 }

19 };

我们可以利用这里面的方法监控应用进程。上面是监控进程的相关方法及类,这只是第一步。

查看ActivityManagerNative源码可以看出,该类是标准的sdk类,无法正常调用;

1 /** [email protected]} */

2 public abstract classActivityManagerNative extends Binder implements IActivityManager

3 {

4 ...

5 }

这怎么办呢?----反射

另外,IProcessObserver.aidl这个文件必须拿出来,建立与系统同样的包名,把该文件放在该包下面,然后编译就可以得到该类。

下面直接上代码,反射过程就不讲解;

1 public voidmoniterAppProcess() {

2

3 try{

4

5 Class> activityManagerNative = Class.forName("android.app.ActivityManagerNative");

6 Method getDefaultMethod = activityManagerNative.getMethod("getDefault");

7 Object iActivityManager = getDefaultMethod.invoke((Object[]) null, (Object[]) null);

8 if (iActivityManager != null) {

9

10 Method registerMethod = activityManagerNative.getMethod("registerProcessObserver", new Class[]{IProcessObserver.class});

11

12 registerMethod.invoke(iActivityManager, mProcessObserver);

13

14 }

15

16 } catch(Exception e) {

17 e.printStackTrace();

18 }

19 }

这样执行函数后,就可以实现监控了;什么?报错

W/System.err(12920): Caused by: java.lang.SecurityException: Permission Denial: registerProcessObserver() from pid=12920, uid=10207requires android.permission.SET_ACTIVITY_WATCHER

W/System.err(12920): at android.os.Parcel.readException(Parcel.java:1465)

W/System.err(12920): at android.os.Parcel.readException(Parcel.java:1419)

W/System.err(12920): at android.app.ActivityManagerProxy.registerProcessObserver(ActivityManagerNative.java:4378)

W/System.err(12920): ... 18 more

好吧,看错误log就知道是权限问题,在AndroidManifest中添加权限

这样应该就OK了吧,什么???还不行,还是报这个错,好吧去网上搜索看看是什么原因了,为什么添加了权限还是报对应的错

http://stackoverflow.com/questions/20604709/android-permission-and-protectionlevel

http://hubingforever.blog.163.com/blog/static/171040579201301135541438/

原来该权限必须是系统应用且签名是系统签名才可以调用;想想也是,如果任意第三方都有这个权限,那android就出大漏洞了;所以你的应用必须是系统级的应用且是使用系统签名的才可以用该方法实现应用的监控

说了这么多,是不是感觉是废话了,像某些app,属于第三方且没有系统签名是怎么做到的呢,期待大家交流!!!

原文:http://www.cnblogs.com/successjerry/p/4399817.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值