开机启动调研
结论
|
测试机型
|
是否支持第三方应用检测开机启动
|
是否支持第三方应用跳转到设置页
|
|
小米2s
|
支持
|
不支持(仅能进入到应用详情)
|
|
华为Mate7
|
不支持
|
支持
|
详细步骤
Miui
--开机启动
-
进入设置开机启动的界面. 通过
adb shell dumpsys activity activities | grep "*"
可见当前堆栈信息
// 这个就是最上层的activity名字。可见目标apk的包名是com.android.settings。初步推断应该是系统的Setting的apk
com.android.settings/com.miui.securitycenter.permission.AppPermissionsEditor
-
去系统中找到对应的apk
肯定是系统级。所以我们直接去
/system/app/
下面看看.
可以找到Settings.apk. 这个看上去很有可能就是我们找到。
-
后面就是反编译apk了。unzip >> dex2jar >> jad .细节这里就不在赘述。
-
查看AppPermissionsEditor 找到如下的关键代码:
-
结论:
miui通过applicationInfo的flags中来判定是否支持开机启动。
-
代码:
--启动设置页
-
仅能进入应用详情界面。无法跳转到设置开机权限界面
-
代码:
华为
--开机启动
华为的历程还是比较艰难的。
思路和Miui一样。找到对应的apk,反编译,找到关键代码。看看是否能复现。
-
进入设置开机启动的界面. 通过
adb shell dumpsys activity activities | grep "*"
可见当前堆栈信息
发现包名是com.huawei.systemmanager
Activity为.optimize.bootstart.BootStartActivity
这个是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即可。
-
代码:
linux git clone生成公钥私钥
1、安装Git$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
$ yum install git (1)创建一个git用户组和用户,用来运行git服务:$ groupadd git
$ useradd git -g git2
qt widgets designer 如何设置槽函数
Qt自定义信号和槽函数实际开发中,如果仅使用 Qt 提供的信号函数和槽函数,会经常遇到信号函数的参数类型和个数无法满足实际需求、信号函数和槽函数的参数类型不匹配等问题。解决此类问题,最简单有效的方式就是:自定义场景需要的信号函数和槽函数。自定义信号函数信号函数指的是符合以下条件的函数:定义在某个类中,该类直接或间接继承自 QObject 类;
用 signals 关键字修饰;函数只需要声明,不需要
3.2025-08-31:可行数组的数目。用go语言,给定一个长度为 n 的初始数组(记作原数组)和一个包含 n 个闭区间的列表(第 i 个区间为 [ui, vi])。要求统计所有长度为 n 的候选数组,
4.控制系统提升决策能力的三大方法
5.除了Lodash,还有哪些库可以实现对象数组按属性值长度排序?