如题,拿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吗,答案当然是能。

到这里我需要隆重介绍三个利器Lordroidenjarify以及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,华为等手机的系统应用的指定页面的更多相关文章

  1. 华为Android手机打开Log

    华为Android手机打开Log, 显示日志方法 今天在华为u8650上调试应用程序时,发现Eclipse的log始终无法显示,在网上找了好多资料,甚至stack overflow也查了,最后终于找到 ...

  2. (转)华为 安卓手机在MAC系统下 ADB 识别

    使用MACOS发现在Android开发环境完整的情况下,接入小米,SAMSUNG,HTC,ZTE等手机都可以自动识别,如果暂时不能识别,只需要在 adb_usb.ini 中设置之后也可以识别,并可以在 ...

  3. 关于华为P9手机的解锁、刷Recovery、获取Root、安装Busybox,以及升级降级的全过程(和一些错误的解决方法)

    我有一部华为P9手机,型号EVA-TL00,属于移动定制机.用了半年多了,想给手机添加一些功能,发现有些功能必须Root之后才能用代码实现,所以动了Root的打算. 一.手机解锁.(不解锁则无法对手机 ...

  4. CSS制作华为mate8手机模型示例

    CSS制作华为mate8手机模型效果图 1.HTML代码 <!DOCTYPE html> <html> <head> <meta charset=" ...

  5. 华为Mate8手机优化技巧

    我的华为Mate8手机手机存储(手机内存)32G, 运行内存3G,2016年买的手机,两样数值都偏小,导致使用手机的时候经常卡顿,一天来回清理垃圾.清理内存很多次,要运行微信.QQ等占用运行内存较多的 ...

  6. adb软件国产安卓手机对系统的把控

    国产安卓手机对系统的把控,现在想搞机的方法是愈来愈麻烦,华为最先的申请解锁码,到现在直接系统锁死不给解.让我等搞机小伙伴是望机兴叹.安卓手机的通病随着系统升级,手机就越来越卡.本想通过卸载系统自带应用 ...

  7. 微信跳转,手机WAP浏览器一键超级跳转微信指定页面

    微信跳转,手机WAP浏览器一键超级跳转微信指定页面 这篇文章主要介绍了如何在手机浏览器wap网页中点击链接跳转到微信界面,需要的朋友可以参考下 先说第一种,最简单的唤起微信协议,weixin://主流 ...

  8. 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP

    不管是app的下载链接还是普通文件的链接在微信内置浏览器或者QQ内置浏览器都会被屏蔽.这是微信对第三方下载域名实施的拦截政策.被拦截了用户在微信内打开就会提示“已停止访问该网页”. 那么当我们遇到这个 ...

  9. js防止安卓手机软键盘弹出挤压页面导致变形的方法

    5防止安卓手机软键盘弹出挤压页面导致变形的方法 输入框定位在底部,手机端打开,输入框聚焦后软键盘打开为什么会瞬间自动关闭呢? 先看看问题: 1.原来是这样的: 2.在苹果手机里面是正常的: 3.到了安 ...

随机推荐

  1. MD5、SHA校验命令

    linux系统的软件很多时候都以境像的方式提供下载,但我们如何确实下载的文件是没有被篡改过的呢?Linux中一般用对下载的文件进行MD5和SHA校验来确认. MD5 我们拿iptraf软件来试验: 我 ...

  2. spring mvc 返回xml格式数据

    1.问题 : 因为业务需要,需要发送xml格式的数据,使用spring mvc 自己解析,就不用费心去自己搞这些东西. 2.解决: 新建一个实体类,直接在实体类中添加注解即可,如下: @XmlRoot ...

  3. Selenium LoadableComponent加载组件

    继承LoadableComponent类可以在打开地址时, 判断浏览器是否打开了预期的网址, 需要重写load()与isLoad()方法: 即使没有定义get()方法, 也可以进行get()方法的调用 ...

  4. TensorFlow 同时调用多个预训练好的模型

    在某些任务中,我们需要针对不同的情况训练多个不同的神经网络模型,这时候,在测试阶段,我们就需要调用多个预训练好的模型分别来进行预测. 调用单个预训练好的模型请点击此处 弄明白了如何调用单个模型,其实调 ...

  5. Python 进阶(一些进阶技巧)

    个人笔记,基本都摘抄自 Python3 官方文档 一. 上下文管理 1. 传统的类方式 Java 使用 try 来自动管理资源,只要实现了 AutoCloseable 接口,就可以部分摆脱手动 col ...

  6. Go基础篇【第6篇】: 内置库模块 flag

    import "flag" flag包实现了命令行参数的解析.每个参数认为一条记录,根据实际进行定义,到一个set集合.每条都有各自的状态参数. 在使用flag时正常流程: 1.  ...

  7. Week2 Teamework from Z.XML 软件分析与用户需求调查(三)必应助手体验评测

    评测人:毛宇 肖俊鹏 说明:言辞激烈,请勿介意 我花了2天的时间来试用这个软件<必应缤纷桌面手机助手>,有了很多体会,这里,我来谈一下这款软件在体验部分的表现情况. 体验部分主要分为三个部 ...

  8. lintcode-123-单词搜索

    123-单词搜索 给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词. 单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻.每个单元中的字母最多只能使用一次. ...

  9. mysql 数据包太小会引发错误信息

    Error querying database.  Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for quer ...

  10. ActiveMQ使用详解---相关概念

    一.前言 公司之前使用activeMQ做过一款用于系统之间传递信息的工具,最近才正式投入生产使用,这期间出现了一些比较奇怪的问题,最终发现是没有清晰的了解activeMQ的相关配置以及一些相关概念,借 ...