唐山丰南建设局网站,做平台网站需要多少钱,推荐几个好的网站,江苏建设工程背景我们想启动 APK 程序#xff0c;有很多种方法#xff0c;可以使用 Intent#xff0c;也可以使用 adb shell 命令来启动#xff0c;还有通过反射来启动 APk 程序。我们这里主要讨论通过反射的方式来启动 apk 程序。Android10 之前#xff0c;我们通过反射来启动 APK有很多种方法可以使用 Intent也可以使用 adb shell 命令来启动还有通过反射来启动 APk 程序。我们这里主要讨论通过反射的方式来启动 apk 程序。Android10 之前我们通过反射来启动 APK反射的是 startActivityAndWait(…) 方法该方法是在 IActivityMessage.java 实现的通过来启动 APk 程序。在 Android10 的时候该方案不太适用需要反射 shellCommand(…) 来启动 Android 系统 10 的 APK 程序。本方案是基于 AM 启动 Activity 的方式来实现的。核心技术方案和原理图Android 10 为了增加安全性 IActivityMessage.java 类去掉了变为 IActivityMessage.aidl 文件其中 startActivityAndWait(…) 方法转移到了 ActivityManagerServer.java 服务类中。所以我们不能使用 IActivityMessage.java 去执行 startActivityAndWait(…) 方法。Android 10 AM.java 启动源码Android 10 原先 AM.java 功能逻辑转移到 ActivityManagerShellCommand.java 源码如下我们要反射 mAm.asBinder().shellCommand 来启动 APK。方案实现时序图如下技术优势兼容了 Android10 通过反射启动 APK 。技术实现1.首先获取 ActivityManagerNative 类对象。2.获取 IActivityManager 对象。3.获取当前的手机系统版本。4.调用 IActivityManager 中的 asBinder 方法,可以通过该方法获取 BinderProxy 对象。5.反射获取 ShellCallback 类对象和 ResultReceiver 类对象。6.获取 shellCommand 方法。7.调用 shellCommand 方法。整体实现代码效果展示Android 10 手机nbsp 运行成功 cmd 界面截图nbsp 启动成功后的 APK 界面