apk中代码执行adb指令实现

news/2024/4/19 16:51:11/文章来源:https://blog.csdn.net/liuqinhou/article/details/129167757

        背景:想要在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72784.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(18)目标检测算法之数据集标签格式转换:json2txt、xml2txt

目标检测算法之数据集标签格式转换&#xff1a;json2txt、xml2txt 目标检测最常见的模型&#xff1a;YOLO&#xff0c;常见的几种标注方式&#xff1a;矩形框、旋转矩形框、实例分割中的多边形标注等类型&#xff0c;根据其标注标签&#xff0c;目标检测主要有以下两种转换方式…

Word中批量调整图片大小

当一个文档中图片较多&#xff0c;又需要调整图片大小时&#xff0c;这时可以通过“宏”执行代码来批量调整。打开一个Word文档。“AltF8"键打开宏。设置“宏名”&#xff0c;并单击“创建”。创建完宏后&#xff0c;将进入Visual Basic 编辑器界面。在代码编辑区全选&…

【面试题】TCP如何保证传输可靠性?TCP流量控制实现、拥塞控制、ARQ协议、停止等待ARQ、连续ARQ

文章目录1. TCP 如何保证传输的可靠性&#xff1f;2.TCP 如何实现流量控制&#xff1f;3.TCP 的拥塞控制是怎么实现的&#xff1f;3.ARQ 协议了解吗?4.停止等待 ARQ 协议5.连续 ARQ 协议1. TCP 如何保证传输的可靠性&#xff1f; 基于数据块传输 &#xff1a;应用数据被分割成…

前端编译、JIT编译、AOT编译

一、前端编译&#xff1a;java设计之初就是强调跨平台&#xff0c;通过javac将源文件编译成于平台无关的class文件&#xff0c; 它定义了执行 Java 程序所需的所有信息&#xff08;许多Java"语法糖"&#xff0c;是在这个阶段完成的&#xff0c;不依赖虚拟机&#xff…

01-MySQL基础-简介安装navicat使用SQL(DDL、DML、(DCL)、DML)

文章目录MySQL基础1&#xff0c;数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL2&#xff0c;MySQL2.1~2.4 mysql安装2.5 MySQL数据模型3&#xff0c;SQL概述3.1 SQL简介3.2 通用语法3.3 SQL分类4&#xff0c;DDL:操作数据库4.1 查询4.2 创建数据…

Java笔记026-集合/数组、Collection接口、ArrayList、Vector、LinkedList

集合集合的理解和好处保存多个数据使用的是数组&#xff0c;分析数组的弊端数组1、长度开始必须指定&#xff0c;而且一旦指定&#xff0c;不能更改2、保存的必须为同一类型的元素3、使用数组进行增加/删除元素的示意代码-比较麻烦Person数组扩容示意代码Person[] pers new Pe…

手把手搭建springboot项目05-springboot整合Redis及其业务场景

目录前言一、食用步骤1.1 安装步骤1.1.1 客户端安装1.2 添加依赖1.3 修改配置1.4 项目使用1.5 序列化二、应用场景2.1 缓存2.2.分布式锁2.2.1 redis实现2.2.2 使用Redisson 作为分布式锁2.3 全局ID、计数器、限流2.4 购物车2.5 消息队列 (List)2.6 点赞、签到、打卡 (Set)2.7 筛…

Liunx服务器安装SVN

一、下载svn安装包链接&#xff1a;https://pan.baidu.com/s/1gkS0tef2kQP6nvXOS64hUw 提取码&#xff1a;cyuw二、SVN安装部署通过sftp将文件拉取到目的主机路径&#xff1a;/usr/package 跳转文件路径: cd /usr/package 执行解压命令:tar -zxvf subversion-1.14.2.tar.gz 执行…

idea启动报错If you already have a 64-bit JDK installed, define a JAVA HOME variable

IDEA启动报错&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a; 1.根据以下路径找到文件idea64.exe.vmoptions &#xff0c;路径如下图所示&#xff1a; C:\Users\Thinkpad\AppData\Roaming\JetBrains\IntelliJIdea2020.3\idea64.exe.vmoptions 其中Thinkpad是电脑的…

j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题

Jeeg-boot j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题 最近用到了Jeeg-boot j-vxe-table的组件&#xff0c;这组件时真J8难用&#xff0c;还好多BUG&#xff0c;想用个slot插槽也用不了&#xff0c;好像官方写了个基础就没怎么管了。&#x1f611; 问题&#xf…

JavaEE-初识Servlet

目录Servlet 是什么?完成一个servlet程序1.创建一个maven项目2.引入依赖3.创建目录4.编写Servlet代码5.打包6.部署7.验证程序第三方工具简化Servlet 是什么? Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app. …

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法&#xff0c;如SSD和YOLO等虽然实现了实时的速度&#xff0c;但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢&#xff1f;何凯明等人将其归咎于正、负样本的不平衡&#xff0c;并基于此提出了新的损失函数Focal L…

支持向量机SVM详细原理,Libsvm工具箱详解,svm参数说明,svm应用实例,神经网络1000案例之15

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例&#xff0c;基于SVM的股票价格预测 支持向量机SVM的详细原理 SVM的定义 支持向量机&#xff08;support vector machines, SVM&#xff09;是一种二分类模型&a…

Linux文件系统操作与磁盘管理

查看磁盘和目录的容量 使用 df 命令查看磁盘的容量 df在实验楼的环境中你将看到如下的输出内容&#xff1a; 但在实际的物理主机上会更像这样&#xff1a; 物理主机上的 /dev/sda2 是对应着主机硬盘的分区&#xff0c;后面的数字表示分区号&#xff0c;数字前面的字母 a 表示…

《JeecgBoot系列》 如何设计表单实现“下拉组件二级联动“ ? 以省市二级联动为例

《JeecgBoot系列》 如何设计表单实现"下拉组件二级联动" ? 以省市二级联动为例 一、准备字典表 1.1 创建字典表 CREATE TABLE sys_link_table ( id int NULL, pid int NULL, name varchar(64) null );1.2 准备数据 idpidname1全国21浙江省32杭州市42宁波市51江苏…

投出1000份简历,苦于软件测试没有项目经验,全部石沉大海,辞职5个月,我失业了......

想要找一份高薪的软件测试工作&#xff0c;简历项目必不可少&#xff08;即使是应届生&#xff0c;你也要写上实习项目&#xff09;。所以很多自学的朋友找工作时会碰到一个令人颇感绝望的拦路虎&#xff1a;个人并没有实际的项目工作经验怎么办&#xff1f; 怎么办&#xff1f…

Kotlin新手教程九(协程)

一、协程 协程从Kotlin1.3开始引入&#xff0c;本质上协程就是轻量级的线程。协程的基本功能点有&#xff1a; 轻量&#xff1a;可以在单个线程上运行多个协程&#xff0c;因为协程支持挂起&#xff0c;不会使正在运行协程的线程阻塞。挂起比阻塞节省内存&#xff0c;且支持多…

python -- 魔术方法

魔术方法就算定义在类里面的一些特殊的方法 特点&#xff1a;这些func的名字前面都有两个下划线 __new__方法 相当于一个类的创建一个对象的过程 __init__方法 相当于为这个类创建好的对象分配地址初始化的过程 __del__方法 一个类声明这个方法后&#xff0c;创建的对象如果…

缺少IT人员的服装行业该如何进行数字化转型?

服装行业上、下游产业链长&#xff0c;产品属性复杂&#xff0c;是劳动密集型和技术密集型紧密结合的产物&#xff0c;是典型的实体经济代表。 近二十年是服装业发展的机遇和挑战之年&#xff0c;从“世界工厂”“中国制造”&#xff0c;逐渐向“中国设计”转变,中国服装产业经…

c++常用stl算法

1、头文件 这些算法通常包含在头文件<algorithm> <functional> <numeric>中。 2、常用遍历算法 for_each(v.begin(),v.end(), 元素处理函数/仿函数) 注意&#xff1a;在使用transform转存时&#xff0c;目标容器需要提取开辟合适的空间。 void printfunc(…