zoukankan      html  css  js  c++  java
  • 如何打开小米,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吗,答案当然是能。

    到这里我需要隆重介绍三个利器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效果如下 

    这里写图片描述

    理论上讲有了这样的方法,我们基本上可以直达任何应用的可以被外部访问的界面了

  • 相关阅读:
    C++获得系统路径
    HDU
    直接插入排序
    《python基础教程(第二版)》学习笔记 函数(第6章)
    《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)
    《python基础教程(第二版)》学习笔记 字典(第4章)
    《python基础教程(第二版)》学习笔记 字符串(第3章)
    《python基础教程(第二版)》学习笔记 列表/元组(第2章)
    R语言 使用命令行参数运行R程序
    add new row to data.frame/dataframe
  • 原文地址:https://www.cnblogs.com/xinmengwuheng/p/7605417.html
Copyright © 2011-2022 走看看