测试机型 | 是否支持第三方应用检测开机启动 | 是否支持第三方应用跳转到设置页 |
---|---|---|
小米2s | 支持 | 不支持(仅能进入到应用详情) |
华为Mate7 | 不支持 | 支持 |
进入设置开机启动的界面. 经过 adb shell dumpsys activity activities | grep "*"
可见当前堆栈信息java
// 这个就是最上层的activity名字。可见目标apk的包名是com.android.settings。初步推断应该是系统的Setting的apk com.android.settings/com.miui.securitycenter.permission.AppPermissionsEditor
去系统中找到对应的apkandroid
确定是系统级。因此咱们直接去/system/app/
下面看看.shell
能够找到Settings.apk. 这个看上去颇有可能就是咱们找到。app
后面就是反编译apk了。unzip >> dex2jar >> jad .细节这里就不在赘述。ide
查看AppPermissionsEditor 找到以下的关键代码:函数
结论:测试
miui经过applicationInfo的flags中来断定是否支持开机启动。ui
代码:3d
仅能进入应用详情界面。没法跳转到设置开机权限界面code
代码:
华为的历程仍是比较艰难的。
思路和Miui同样。找到对应的apk,反编译,找到关键代码。看看是否能复现。
进入设置开机启动的界面. 经过 adb shell dumpsys activity activities | grep "*"
可见当前堆栈信息
发现包名是com.huawei.systemmanager Activity为.optimize.bootstart.BootStartActivity
一样去system/app
找到最类似的apk
这个是odex文件。因此须要将odex转为dex. 这个须要下载baksmali,smali这个东西。 具体odex到dex命令以下 adb pull /system/framework . java -jar baksmali-2.0.3.jar -d . -x HwSystemManager.odex java -Xmx512M -jar smali-2.0.3.jar out -o classes.dex 这样咱们就拿到dex了.路上会一堆警告先不用管。
而后dex反编译。发现根本走不通。会出现error。是得咱们不能找到想要的optimize.bootstart.BootStartActivity。
只能经过查看smali文件。
思路:
界面是个ListView。那么确定对应有adapter。里面的数据确定包含是否容许开机启动的变量。
并且确定有入口设置开机启动状态。由于界面有个button么。哈。
最终咱们找到changeSwitchStatus这个函数发现mAllow属性就是控制是否开机启动的。
同时发现重要的成员变量:mFilteredAllStartAppList
而后顺着mFilteredAllStartAppList。能够发现Adapter在构造的时候第一参数传进去的。
mFilteredAllStartAppList加载是经过StartupInfoLoadingTask加载的。而后经过静态方法access$100把结果放回去。
天然去doInBackground搞去
发现高能函数BootStartManager#getAllStartAppList。以后可找到getForbidAppListInTable。这个是加获取禁止启动加载数据的。
最 终,可见经过ContentProvider获取禁止启动app的数据。
下面这句话说明的请求的uri
sget-object v1, Lcom/huawei/systemmanager/optimize/Const;->START_UP_FORBIDDEN_APPS_URI:Landroid/net/Uri;
而后经过Uri,本觉得能够happy的拿到数据了。写完代码以后。运行。Crash...
java.lang.SecurityException: Permission Denial: opening provider com.huawei.systemmanager.optimize.db.OptimizeProvider from ProcessRecord{43aae548 15462:com.gudong.client/u0a95} (pid=15462, uid=10095) requires com.android.permission.system_manager_interface or com.android.permission.system_manager_interface
请求其余app时须要权限。加上提示中的权限也不可。
反编译AndroidManifest.xml。看看究竟是什么缘由。
java -jar ~/Software/java-decompile/AXMLPrinter2.jar AndroidManifest.xml >> AndroidManifest.txt
protectionLevel值为3.查文档以下。非相同证书签名或系统才能使用此权限
结论:
并不能直接读取华为meta7中,禁止开机启动的数据
有AndroidManifest.xml。 直接启动该Activity便可。
代码: