java获取apk启动activity_兼容 Android 10 启动 APK 实现方案
背景
我們想啟動(dòng) APK 程序,有很多種方法,可以使用 Intent,也可以使用 adb shell 命令來(lái)啟動(dòng),還有通過(guò)反射來(lái)啟動(dòng) APk 程序。
我們這里主要討論通過(guò)反射的方式來(lái)啟動(dòng) apk 程序。Android10 之前,我們通過(guò)反射來(lái)啟動(dòng) APK,反射的是 startActivityAndWait(…) 方法,該方法是在 IActivityMessage.java 實(shí)現(xiàn)的,通過(guò)來(lái)啟動(dòng) APk 程序。
在 Android10 的時(shí)候,該方案不太適用,需要反射 shellCommand(…) 來(lái)啟動(dòng) Android 系統(tǒng) 10 的 APK 程序。
本方案是基于 AM 啟動(dòng) Activity 的方式來(lái)實(shí)現(xiàn)的。
核心技術(shù)方案和原理圖
Android 10 為了增加安全性 IActivityMessage.java 類去掉了,變?yōu)?IActivityMessage.aidl 文件,其中 startActivityAndWait(…) 方法轉(zhuǎn)移到了 ActivityManagerServer.java 服務(wù)類中。所以,我們不能使用 IActivityMessage.java 去執(zhí)行 startActivityAndWait(…) 方法。
Android 10 AM.java 啟動(dòng)源碼:
Android 10 原先 AM.java 功能邏輯轉(zhuǎn)移到 ActivityManagerShellCommand.java 源碼如下:
我們要反射 mAm.asBinder().shellCommand 來(lái)啟動(dòng) APK。方案實(shí)現(xiàn)時(shí)序圖如下:
技術(shù)優(yōu)勢(shì)
兼容了 Android10 通過(guò)反射啟動(dòng) APK 。
技術(shù)實(shí)現(xiàn)
1.首先獲取 ActivityManagerNative 類對(duì)象。
2.獲取 IActivityManager 對(duì)象。
3.獲取當(dāng)前的手機(jī)系統(tǒng)版本。
4.調(diào)用 IActivityManager 中的 asBinder 方法,可以通過(guò)該方法獲取 BinderProxy 對(duì)象。
5.反射獲取 ShellCallback 類對(duì)象和 ResultReceiver 類對(duì)象。
6.獲取 shellCommand 方法。
7.調(diào)用 shellCommand 方法。
整體實(shí)現(xiàn)代碼
效果展示
Android 10 手機(jī)
  運(yùn)行成功 cmd 界面截圖
  啟動(dòng)成功后的 APK 界面
總結(jié)
以上是生活随笔為你收集整理的java获取apk启动activity_兼容 Android 10 启动 APK 实现方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言中文件读写面试题,在C ++中有效
- 下一篇: android限制输入字符的范围,And