如何打开小米,oppo,华为等手机的系统应用的指定页面
如题,拿Oppo 手机做个示例,小米 华为也是如此。
在编写Android应用的时候,我们经常会有这样的需求,我们想直接打开系统应用的某个页面。比如在Oppo R9 手机上我们想打开某个应用的通知管理界面如下图
点击QQ图标,跳转到如下界面
同时我们在terminal中 通过 adb logcat |grep “ActivityManager” 我们可以看到Activity的相关信息
I/ActivityManager( 902): START u0 {act=com.coloros.notificationmanager.app.detail cmp=com.coloros.notificationmanager/.AppDetailPreferenceActivity (has extras)} from uid 1000 from pid 31395 on display 0
D/ActivityManager( 902): Delay resumeKeyDispatchingLocked() to avoid deadlock.
I/ActivityManager( 902): [AppLaunch] Displayed Displayed com.coloros.notificationmanager/.AppDetailPreferenceActivity: +160ms
D/ActivityManager( 902): AP_PROF:AppLaunch_LaunchTime:com.coloros.notificationmanager/.AppDetailPreferenceActivity:160:27986714
D/ActivityManager( 902): ACT-IDLE_NOW_MSG from windowsVisible() for idle: ActivityRecord{293543ae u0 com.coloros.notificationmanager/.AppDetailPreferenceActivity t157}
通过日志我们看到了设置QQ通知管理的Activity的包名和类名分别是
com.coloros.notificationmanager/.AppDetailPreferenceActivity.但是启动这个Activity是需要附加Extras的,至少应用的包名是需要传递进去的,要不然凭什么知道这就是设置QQ的通知权限而不是微信的通知权限呢。动动脚趾头猜下 至少是传递了一个包名进去,但是具体的key我们是不得而知。怎么办!?我们想知道这个类到底传了哪些key-value,以及这个Activity是否能被外部应用吊起,那只能反编译源码,到AppDetailPreferenceActivity.java中查看到底传递了哪些key以及得到AndroidManifest.xml 查看声明的AppDetailPreferenceActivity exported 属性是否为false。
1.1既然是反编译,那首先我们要确定这个系统应用的APK到底在哪里,连上手机,打开terminal输入以下命令
adb shell pm path com.coloros.notificationmanager
输出如下
1.2 接下来的心情应该是兴高采烈,跃跃一试,迫不及待的想要把apk pull到本地,进行反编译,那么我可以很负责任的告诉你,你高兴的太早了,这样根本无法反编译出源代码。不信且看
adb pull /system/app/notification_center/notification_center.apk ~/oppo
1.3这样我们就把系统apk pull到本地了,先确认下apk中是否有dex文件
unzip notification_center.apk
1.4.然后我在解压后的文件夹想努力的找到classes.dex,最后震惊了,什么鬼,apk 怎么可以没有classes.dex文件,特么的是在逗我吗,真的不敢直视自己的才疏学浅, 反正事实就是这样子了,就是没有classes.dex,怎么着吧。既然是这样的话,那么能拿到真正的apk吗,答案当然是能。
到这里我需要隆重介绍三个利器Lordroid、enjarify以及Apktool,Lordroid 它能将系统优化过的odex 解码成dex,就是利用它能够将得到可以被反编译的Apk、enjarify可以将apk反编译成jar、Apktool可以获取apk的资源文件。具体使用请自行解决,不做过多介绍了。
正确打开方式
2.1 把手机/system 拉取到电脑上
adb pull /system ~/system
这里有三个比较重要的文件或文件夹 build.pro、framework、priv-app。请注意!!!我们目标apk notification_center.apk不是说好的在 app文件夹里面吗,怎么没有拉取到呢。怎么办?再手动拉取一遍呗!
cd priv-app
rm -rf *
adb pull /system/app/notification-center .
这样notification-center文件夹就被拉取下来了
2.2接下来打开Lordroid主界面,cd Lordroid主目录
java -jar Launcher.jar
2.3点击browse 选择 ~/system(前面拉取Apk 的目录) 目录,如下提示找到priv-app 和framework目录
2.4点击Deodex now!
2.5至此Deodex 已经成功,我们到priv-app/notification-center 中已经生成了一个notification-center.apk,再解压看看是否有classes.dex
至此我们看到了classes.dex又重回apk的怀抱。可以按常规的方法去反编译,此处省略xxx字,请自行脑补。
3.1 最后我们得到了notification-center.apk的jar包,用JD-GUI打开,定位到AppDetailPreferenceActivity,查找Extra关键字
会发现传了”pkg_name” “app_name” “class_name”三个key。
3.2 那么写个demo 验证下吧
private void startOppoNotification() {
//Intent intent = new //Intent("com.coloros.notificationmanager.app.detail_ab//andon");
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.coloros.notificationmanager", "com.coloros.notificationmanager.AppDetailPreferenceActivity"));
intent.putExtra("pkg_name", "com.coohuaclient");
intent.putExtra("app_name", "酷划锁屏");
intent.putExtra("class_name", "com.coohuaclient.ui.activity.SplashActivity");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
3.3效果如下
理论上讲有了这样的方法,我们基本上可以直达任何应用的可以被外部访问的界面了
如何打开小米,oppo,华为等手机的系统应用的指定页面的更多相关文章
- 华为Android手机打开Log
华为Android手机打开Log, 显示日志方法 今天在华为u8650上调试应用程序时,发现Eclipse的log始终无法显示,在网上找了好多资料,甚至stack overflow也查了,最后终于找到 ...
- (转)华为 安卓手机在MAC系统下 ADB 识别
使用MACOS发现在Android开发环境完整的情况下,接入小米,SAMSUNG,HTC,ZTE等手机都可以自动识别,如果暂时不能识别,只需要在 adb_usb.ini 中设置之后也可以识别,并可以在 ...
- 关于华为P9手机的解锁、刷Recovery、获取Root、安装Busybox,以及升级降级的全过程(和一些错误的解决方法)
我有一部华为P9手机,型号EVA-TL00,属于移动定制机.用了半年多了,想给手机添加一些功能,发现有些功能必须Root之后才能用代码实现,所以动了Root的打算. 一.手机解锁.(不解锁则无法对手机 ...
- CSS制作华为mate8手机模型示例
CSS制作华为mate8手机模型效果图 1.HTML代码 <!DOCTYPE html> <html> <head> <meta charset=" ...
- 华为Mate8手机优化技巧
我的华为Mate8手机手机存储(手机内存)32G, 运行内存3G,2016年买的手机,两样数值都偏小,导致使用手机的时候经常卡顿,一天来回清理垃圾.清理内存很多次,要运行微信.QQ等占用运行内存较多的 ...
- adb软件国产安卓手机对系统的把控
国产安卓手机对系统的把控,现在想搞机的方法是愈来愈麻烦,华为最先的申请解锁码,到现在直接系统锁死不给解.让我等搞机小伙伴是望机兴叹.安卓手机的通病随着系统升级,手机就越来越卡.本想通过卸载系统自带应用 ...
- 微信跳转,手机WAP浏览器一键超级跳转微信指定页面
微信跳转,手机WAP浏览器一键超级跳转微信指定页面 这篇文章主要介绍了如何在手机浏览器wap网页中点击链接跳转到微信界面,需要的朋友可以参考下 先说第一种,最简单的唤起微信协议,weixin://主流 ...
- 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
不管是app的下载链接还是普通文件的链接在微信内置浏览器或者QQ内置浏览器都会被屏蔽.这是微信对第三方下载域名实施的拦截政策.被拦截了用户在微信内打开就会提示“已停止访问该网页”. 那么当我们遇到这个 ...
- js防止安卓手机软键盘弹出挤压页面导致变形的方法
5防止安卓手机软键盘弹出挤压页面导致变形的方法 输入框定位在底部,手机端打开,输入框聚焦后软键盘打开为什么会瞬间自动关闭呢? 先看看问题: 1.原来是这样的: 2.在苹果手机里面是正常的: 3.到了安 ...
随机推荐
- 剁了xp,醉了win7
装完win7,安装各种软件完毕,重启,然并卵. cpu,内存飙升!! svchost.exe这个进程内存发疯了一样往上飙升 从 几十兆 到占用1个多G, 纳尼, 总共物理内存才2G. ╮(╯▽╰) ...
- XStream轻松转换xml和java对象
首先引入所需的jar: xstream-1.4.9.xpp3_min-1.1.4c.dom4j-1.6.1, 或用maven管理jar包时在pom.xml中添加: <!-- https://mv ...
- 利用LD_PRELOAD进行hook
原文地址:http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing-hook.html 好久没玩hook这种猥琐的东西里,今天在Linux ...
- 【多校联合】(HDU6043)KazaQ's Socks
[多校联合](HDU6043)KazaQ's Socks 一条纯粹的水题,记录下只是因为自己错的太多而已. 原因在于对数据的细节的把握不佳. 原题 KazaQ's Socks Time Limit: ...
- PHP的array_merge()合并数组
,4];print_r(array_merge($arr1,$arr2));返回结果:Array( [a] => 3 [b] => 2 [0] => 4)1注释:当 ...
- 51单片机实现外部中断0-F
#include< reg51.h> #define uint unsigned int #define uchar unsigned char sfr P0M0 = 0x94; sfr ...
- Alpha阶段展示
程序员杀产品经理祭天(SacrificePM)团队 1.团队成员简介和个人博客地址 故事 我们队伍的建立过程稍具戏剧性,大家看我们也颇为奇怪,这么一支8人队伍是怎么诞生的呢?其实我们原本分属三组,而第 ...
- Jquery tmpl详解
Jquery tmpl是动态请求数据来更新页面非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 ...
- Java——异常博客作业
本次任务地址 6. 为如下代码加上异常处理 6.1 改正代码,并增加如下功能.当找不到文件时,需提示用户找不到文件xxx,请重新输入文件名,然后尝试重新打开. 如果是其他异常则提示打开或读取文件失败! ...
- HashSet如何判定两个元素相同
在介绍java的集合时,我们提到,set是一个"罐子".我们可以向其中放入各式各样的元素,这些元素没有顺序,但不能相同.其中,HashSet是最常用的一个实现类. 首先,我们看下H ...