网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月09日漏签0天
wp7吧 关注:858,236贴子:67,723,781
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 26回复贴,共2页
  • ,跳到 页  
<<返回wp7吧
>0< 加载中...

通过ADB让第三方应用程序调用Android系统级API教程

  • 只看楼主
  • 收藏

  • 回复
  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
通过ADB让第三方应用程序调用Android系统级API教程
你以为我要通过Shizuku授权来调用?
错误的!
不依赖Shizuku,从0开始实现。
阅读水准要求:需要会一点微小的Android应用开发基础、稍微了解Java基础、大概会用adb命令、了解Linux Shell基础语法。
教程大纲:
1、前景概要
2、分析Shizuku、黑yu、AppManager软件工作原理
3、分析部分adb命令源码实现
4、简单介绍Android跨进程通信
5、提出实现假设
6、代码论证
7、实现功能
8、项目开源地址


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1、前景概要
现在新出的手机基本都不再允许ROOT与解锁BL,而且各个厂商的定制系统也在日益完善,但是仍然会有一些问题存在,比如系统内置广告无法关闭、安装个软件要一直被监控扫描、垃圾APP强制占用后台、垃圾应用互相唤醒、恶意申请无用权限且不给权限就不让用、后台无用服务过多等,很多直击用户痛处的问题。
很多时候,用户往往对上述问题是束手无策的,在以前还没那么严格的时候,用户可以选择ROOT或者刷机的方式,来精简与安装对应的模块达到优化体验的目的,可是这种办法,在现在来说,已经不可取了,一方面是厂商逐渐封闭BL,一方面是Android的提权漏洞也越来越难利用了,虽然Google官方还给开发者留下了adb这一条后路,可是这个对普通用户来说,未免也太折腾了,不可能每个用户都要会用adb命令吧?
这种时候,就有一些民间开发人员,通过研究Android Framework源码,发现里面很多带有@hide注解的函数,它们是不允许被第三方应用开发者所调用的,仅允许OEM系统厂商内部使用,但是呢,它们也同样可以被adb shell通过调用对应的命令来实现相同的功能,于是,便诞生出来了黑yu、Shizuku、AppManager、AppOpsX、冰箱等一系列优化软件,它们可以在不需要ROOT的情况下,通过引导用户复制并执行一段命令,即可激活使用,达到开箱即用的作用。
本文作者也在研究Shizuku、黑yu、AppManager项目源码的时候,发现这其中的奥秘,但是国内一些论坛、社区平台,对这方面的分析与见解,都是有头无尾、模棱两可的,让人很摸不着头脑,只能硬啃源码,然后一步一坑,摸着石头过河,好在,最后是成功了。


经过一段时间的测试与优化,已经可以转化为普通大众可以理解的话语了,因此,经过几天的思考,决定还是要在贴吧里再发布一次,以造福广大机油,促使越来越多的,类似应用出来,方便大家使用。



2025-12-09 09:08:26
广告
不感兴趣
开通SVIP免广告
  • fjzjk
  • 此贴必火
    16
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
建议左转酷安


  • 茫茫绿草原
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
sorry,@hide函数是可以调用的,能不能正常使用取决于该方法所需的权限


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
怎么贴吧也删啊,发一个,删一个


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2、分析Shizuku、黑yu、AppManager软件工作原理
由于贴吧特殊的言论规则,被删了几层楼后,我放弃了出列源码,直接说原理实现。
2.1 shizuku工作原理
shizuku是类似面具、SuperSU那样的一个权限管理应用,可以管理接入它SDK的应用,它需要通过adb来激活一个服务,这个服务从shizuku开源项目里可以看到,它需要通过app_process这个命令来执行该Java程序,这样,该Java程序进程就可以继承执行者的PID,跟执行者一样的级别与权限,但是shizuku做的只是起到类似中转的功能,它并不提供额外的内容。
2.2 黑yu工作原理
黑yu因为各种元素的加成,不方便说太多,它也是需要通过app_process来启动一个C语言编写的服务,来调用系统的API接口函数,比如终止后台进程、强制设置应用为打盹待机模式等功能,其中打盹模式是安卓6以后加入的,这也是黑yu最低只支持安卓6使用打盹模式的原因。
2.3 AppManager工作原理
为什么要把这个加入过来,因为它的功能性很丰富,而且它支持adb与root两种工作模式,它也是通过app_process命令激活服务来实现对应功能的,可以从它开源项目源码里面看到。


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
3. 分析部分adb命令源码实现
3.1 am force-stop pkgname
这个命令是用来强制停止后台进程的。
安卓7之前的源码实现在AM源文件的runForceStop函数。
安卓8以后的源码实现在AM源文件与ActivityManagerShellCommand源文件里的runAmCmd与runCMD里面实现。
它们最终都是调用IActivityManager里面的forceStopPackage函数
3.2 pm uninstall pkgname
卸载一个已安装的应用程序
安卓9以前的源码实现在PM源文件的runUninstall函数。
安卓10以后源码实现在PackageManagerShellCommand源文件里的runUninstall函数。
在安卓4.4时,最终调用IPackageManager里的deletePackageAsUser函数。
安卓5以上,最终调用IPackageInstaller里的uninstall函数。
3.3 appops
这个是安卓5以后用来管理应用权限的命令
安卓6之前在AppOpsCommand源文件里面的runSet函数。
安卓7之后在AppOpsService源文件里的setMode函数。
它们最终都是调用IAppOpsService源文件里的setMode。


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
4、简单介绍Android跨进程通信
进程间通信简称IPC,英文为 Inter Process Communication ,在操作系统中,线程是CPU调度的基本单元,进程是操作系统调度的基本单元。在Android中一个进程一般指一个应用程序,可以包含多个线程,但最少有一个线程,在Android是主线程。
Android的跨进程通信方式有:Bundle、AIDL、Socket、文件共享、Messager、
ContentProvider


2025-12-09 09:02:26
广告
不感兴趣
开通SVIP免广告
  • D丶小天
  • 虎躯一震
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
5、提出实现假设
上面说到了shizuku、黑yu之类的软件都是需要通过app_process命令来执行一个Java程序后台服务,来达到实现对应功能的目的,那么我们是否也可以这样做呢?
同时在上文,也介绍了跨进程通信的内容,通过app_process命令执行后的进程,跟原来的程序已经没有联系了,这种时候就需要用到跨进程通信的方式,来跟app_process命令执行后的进程进行通信。
ok,核心来了。
我们可以通过编写一个socket服务端跟socket客户端,两个分别用来处理相关的功能请求,服务端负责执行客户端发送过来的动态参数,将执行结果反馈给客户端。
实现思路:
一、创建一个socket服务端,里面加入一个对外接口函数,用于执行对应操作与反馈执行结果给客户端。
二、创建一个Java程序文件,不继承activity等其它安卓相关组件,加入Java的main函数进去,在mian函数里面调用上述socket服务并实现对应的对外接口函数,在这个文件里面执行并反馈客户端传过来的动态参数。
三、编写一段app_process启动脚本,用于启动该Java程序。
四、编写一个socket客户端,里面加入一个对外接口函数,用于提交对应的动态参数与接收服务端反馈内容。


  • 春风得意
  • 鸭梨山大
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
前排占个位。7吧不仅能互黑还能发技术贴


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
6、代码论证
由于贴吧特殊言论规则,就不上代码原文了,我不确定发图片是否可以。
经过上述功能的实现假设与思路,我们应该做成以下样子:
服务端:

被执行Java程序:

客户端:


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
7、实现功能
在上述源码里面,按道理在adb shell下执行app_process命令执行apk里面的Java程序,该Java程序进程是直接继承shell的PID,具备与adb一样的权限与级别,在这个Java程序里面,你可以调用adb可以调用的所有命令、功能、接口函数。
那么,按照这样,是不是可以仿照着做出来一个黑yu、appopsx、shizuku出来?答案是可以的,具体怎么实现跨进程与对象返回,得看你自己怎么实现,我这里是用socket实现的,一切都是通过socket进行传输,会出现一些对象无法序列化的问题,但是这部分应该采用其它办法取代,而不是盲目加入序列化接口实现。
要怎么实现am、pm、appops这些adb命令的功能呢?
这你就要去看Android Framework里面的对应命令源码了,每个安卓版本都多少有点不一样,要跟着框架里面的源码写,一模一样最好。
有些接口跟源文件没有怎么办?
你只需要建立对应的文件跟空函数实现即可,比如AppOpsManager里的strOpToOp函数,你只需要返回一个空或者0即可,满足对应的返回值类型即可,这部分是不允许外部调用的。


  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
8、项目开源地址
https://gitee.com/SorryMyLife/easyManager


2025-12-09 08:56:26
广告
不感兴趣
开通SVIP免广告
  • 贴吧用户_7V3QStU
  • 内牛满面
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这里有些问题,要给大🔥回答一下
为什么不能说的明白详细一点?
由于本人文化水平有限,加上贴吧特殊的言论规则,导致很多源码跟内容都不能发出来,这里我也没办法,本来我也想风趣与详细的表述出来的,没办法,只能让你们去看我做的成品源码了。
调用这些接口有什么用嘛?
我先来说我为什么要这样搞吧,我不想付费,所以,我去啃源码, 自己做了一套。
对于你们或者开发者来说,这样可以提升一个应用的价值,可以最大化利用adb权限做很多事情,包括应用分身、应用静默安装、权限管理、后台管理、耗电管理、存储管理等等,很多,具体要看你怎么用了。
对于各个安卓版本的差异,有必要兼容旧安卓嘛?
这个要看你自己的意愿,我因为有老设备要用,所以我做的成品是兼容安卓4.4到安卓14的。
基于这篇帖子,我是否也可以做个类似shizuku的授权管理软件?
完全可以,我的成品里面有提供对应的SDK开发包,只需要导入就可以用了,里面有详细的使用注释,具体看你采取什么方法进行远程通信。
更多问题, 请8u提供,我知道的话,会回复的。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 26回复贴,共2页
  • ,跳到 页  
<<返回wp7吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示