apk中代码执行adb指令实现

        背景:想要在android apk中直接使用adb指令,从而不需要把手机通过数据线方式连接到电脑,在电脑端执行adb指令。

一、权限相关

想要在apk代码中执行adb命令,涉及到执行权限。

  • 首先手机需要有root权限。
  • 其次就算手机已经root了,但默认运行所有命令时都仍然是普通用户身份,除非显式地切换到root用户。

所以就需要对手机进行刷root,并在apk代码中执行“su root”提权。

二、demo

        demo中演示的是在apk中执行通过adb启动某个应用的页面,即“adb shell am start -n packagename”。

1、没有root权限的手机 & 没有提权“su root”

printLog.setOnClickListener {
    Log.e("liuqinhou", "按钮被点击了")
    //Runtime.getRuntime().exec("su root") //提升到root权限
    Runtime.getRuntime().exec("am start --user 0 -n    com.crland.androiddemo2/com.crland.androiddemo2.MainActivity")

}

执行后,app无响应,相关log如下:

2、没有root权限的手机 & 提权“su root”

printLog.setOnClickListener {
    Log.e("liuqinhou", "按钮被点击了")
    Runtime.getRuntime().exec("su root") //提升到root权限
    Runtime.getRuntime().exec("am start --user 0 -n com.crland.androiddemo2/com.crland.androiddemo2.MainActivity")
}
执行后,app闪退,报错内容如下

 3、root权限的手机 & 提权“su root”

printLog.setOnClickListener {
    Log.e("liuqinhou", "按钮被点击了")
    Runtime.getRuntime().exec("su root") //提升到root权限
    Runtime.getRuntime().exec("am start --user 0 -n com.crland.androiddemo2/com.crland.androiddemo2.MainActivity")
}

        adb指令执行成功,可以通过adb方式正常打开页面com.crland.androiddemo2/com.crland.androiddemo2.MainActivity

三、--user 0介绍

        你应该注意到了,上面的adb指令使用了参数--user 0。假如不加这个参数,点击按钮无响应,详细log如下:

printLog.setOnClickListener {
    Log.e("liuqinhou", "按钮被点击了")
    //Runtime.getRuntime().exec("su root") //提升到root权限
    Runtime.getRuntime().exec("am start -n com.crland.androiddemo2/com.crland.androiddemo2.MainActivity\n")
}

 W/ActivityManager: Permission Denial: startActivityAsUser asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL

在stackoverflow上查询“Permission Denial: startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL”找到了一篇帖子,里面介绍了解决方案:

         看log还需要配置"android.permission.INTERACT_ACROSS_USERS_FULL"权限,但是我实际运行的时候不配置也没关系。所以这个感觉可加可不加吧。

<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
tools:ignore="ProtectedPermissions" />

而且看介绍,这个权限似乎只有系统应用apk才有权限。

 参考文章:

1、在Android中使用adb命令时关于权限方面的一些总结

2、https://stackoverflow.com/questions/18179159/permission-denial-startactivity-asks-to-run-as-user-2-but-is-calling-from-user

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值