问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android 怎么获取所有应用的启动次数,已经拥有root权限。

发布网友 发布时间:2022-05-30 00:54

我来回答

1个回答

热心网友 时间:2023-09-11 01:31

  一般来说, Android 下的应用程序可以“直接”得到的最大的权限为 system ,但是如果我们需要在程序中执行某些需要 root 权限的命令,如 ifconfig 等,就需要 root 权限了。按照 Simon 的文章中提到的,应用程序有以下两种办法临时获得 root 权限:
  1) 实现一个 init 实现一个 Service ,来帮助 Android 应用程序执行 root 权限的命令。
  2) 实现一个虚拟设备,这个设备帮助 Android 应用程序执行 root 权限的命令。
  
  第二种办法我这里没有尝试,暂时也不会。这里讲讲我在实现第一种办法的过程和遇到的一些问题。
  
  1. 将我们要执行的命令写成脚本,或者可执行程序。
  下面是我的脚本 ifconfig_test.sh :

  # ! /system/bin/sh
  ifconfig
  注意: 脚本的第一行必须为 # ! /system/bin/sh ,否则无法执行,通过 dmesg 可以查看到信息内容为 cannot execve ./ifconfig_test.sh: Exec format error
  
  也可以采用 C/C++ 编写需要执行的命令或者程序,并在编译 image 的时候编译成可执行程序。
  
  2. 在 init.rc 中注册 service
  Android 中的 service 需要在 init.rc 中注册, Init.rc 中定义的 Service 将会被 init 进程创建,这样将可以获得 root 权限。当得到相应的通知(通过属性设置)后, init 进程会启动该 service 。
  本文中注册的内容如下:

  service ifconfig_test /system/etc/ifconfig_test.sh
  oneshot
  disabled
  其中, oneshot 表示程序退出后不再重新启动, disabled 表示不在系统启动时启动。
  
  注意: 这里 service name 不能超过 16 个字符。我之前的 service name 由于定义的比较长, 18 个字符,设置属性通知 service 启动后查看 dmesg 可以看到提示: init: no such service 。查看 /system/core/init/parser.c 的源代码,在 parse_service->valid_name 函数中可以看到如下内容: if (strlen(name) > 16) { return 0; } ,证明 service 的名字的确不能超过 16 个字符。
  
  3. 将 Android 应用程序提升为 system 权限
  既然应用程序可以通过启动 service 获得 root 权限,那么岂不是很不安全。 Android 考虑到了这点,规定只有 system 权限的应用程序才能设置属性,通知 service 启动。关于提升 system 权限的文章网上已有很多,这里就不再细说,
  
  4. 在应用程序中添加属性设置代码
  前面已经提到,对于 Android 来说,应用程序通知 init 启动 service 是通过设置系统属性来完成的,具体为设置 System 系统属性 “ctl.start” 为 “ifconfig_test” ,这样 Android 系统将会帮我们运行 ifconfig_test 这个 service 了。
  对该系统属性的设置有三种方法,分别对应三种不同的应用程序:
  1) Java 代码
  Android 在 Java 库中提供 System.getProperty 和 System.setProperty 方法, Java 程序可以通过他们来设置和获得属性。代码如下:
  SystemProperties.set("ctl.start", "ifconfig_test");
  上面的代码是通知 Android 执行 ifconfig_test service ,如果需要查询当前 service 执行的状态,如是否执行完毕,可以通过如下代码查询:
  ret = SystemProperties.get("init.svc. ifconfig_test ", "");
  if(ret != null && ret.equals("stopped"))
  {
  return true;
  }
  2) JNI 代码
  当编写 NDK 的程序时,可以使用 property_get 和 property_set 这两个 API 来获得和设置属性。使用这两个 API 必须要包含头文件 cutils/properties.h 和链接 libcutil 库。
  
  3) Shell 脚本
  Android 提供了命令行 setprop 和 getprop 来设置和获取属性,他们可以在脚本中被使用。
  
  由于我的程序是在 JNI 中调用脚本,脚本中又执行 ifconfig ,因此我将设置属性的部分放在了脚本中完成,代码如下:
  setprop ctl.start ifconfig_test
  
  #wait for the service until it stops
  ret=1
  while [ $ret -ne 0 ]
  do
  getprop | grep "$ENABLE_MAPPER_SRV" | grep stopped
  ret=$?
  done
  通过上面 4 个步骤, Android 应用程序就获得了 root 权限,更具体的说,是在执行我们需要执行的命令时临时获得了 root 权限。
  转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦追问谢谢你!不过不是我要的答案,我已经root成功了,只是想通过代码实现统计手机里边所有应用的启动次数。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
硅胶与液态硅胶手机壳的区别 什么样的过敏会传染 过敏的原理是什么?为什么有的人过敏,有的人不过敏?谢谢! 过敏为什么会痒 评审报告需要注意什么 财政评审流程及注意事项 高效项目评审的6大注意事项 银行双录 什么意思 什么是银行双录 在异地哪些可公证 室内是肤感黄色门配什么阳台门好看? 想给3岁的宝宝买个滑滑梯,大家觉得怎么样 唐三是第三个进入杀戮之都的昊天宗弟子,另外两个人是谁? 《斗罗大陆》中,实力差距最大的师徒有哪些? 唐三的徒弟 斗罗*:唐三天赋异禀,为什么会收下雪崩和吉祥这两个徒弟? 硝酸铵的作用以及物理性质 硝酸铵的俗称 东莞号码可以用来注册深圳公司账户用吗 硝酸铵__ 硝酸铵的性质 硝酸铵(prill)是什么意思? 硝酸铵的作用 怎么申请企业?以公司名字可以申请多少个?和以公司名字办理几个手机号再用手机号注册有什么_百度问一问 硝酸铵的用途是什么? 什么是硝酸铵? java nio是epoll还是selector 把手机号加到企业名下,能防止封号吗 家具前端和后端设计师的区别 赵本山的喜剧人生,有多可笑,就有多可悲 诗歌集滑滑梯读后感 广州起义烈士陵园和黄花岗公园的门票多少钱? 啊巴町用另一个手机登陆为什么无法找到用户,,, 请教各位高手!锦鲤背鳍烂!腮部呈红色是怎么回事??? 求免费黄砖.代码. 怎么能弄到免费黄转 蓝转 AION2.0的龙界送免费黄武器,谁知道是什么任务,哪里接? 黄砖几级了可以长期免费黄砖啊? 锦鲤鱼两腮下充血,如何治愈 玫瑰小镇仓库里的免费黄玫瑰能做什么? 请问那个会用移动梦网刷免费黄砖的啊? 车牌测算 吉祥车牌号测算晋a3653w 家里养的锦鲤,鳃盖有溃烂,并且水中有白色絮状物。锦鲤身上有红血丝。该怎么办? 汽车牌照数量怎么算的 我的鱼死了,鳃里面有红有白,*流脓了点,其他没什么异常!锦鲤鱼,求大仙! 何侨生的寻根问祖 车牌号鲁vp1953测吉凶 为什么Linux的fdisk分区时First Sector是63或2048? 从SD boot还需要注意什么