作者博客
http://www.jianshu.com/u/abc8086489c7
文章目录
1
前言
“黑科技什么的最喜欢了! 对,我们就是要搞事。 来呀。谁怕谁。三年血赚,死刑不亏。(๑´ڡ`๑) ” -- 来自暗世界android工程师
这个世界上手机有三大系统,苹果、 安卓、 中国安卓 。本篇强烈呼吁大家不要去做哪些违反用户体验的黑科技功能,研究研究玩玩就好了啦。全当增长技术,在真实的项目开发中尽量能不用就不要用得好。道理大家都懂的。
2
系列目录
那些年Android黑科技①:只要活着,就有希望
那些年Android黑科技②:欺骗的艺术
待续····
那些年Android黑科技③:干大事不择手段
待续····
3
Android应用内执行shell
android系统本身是Linux作为内核,我们一般开发中使用 adb shell 命令来操作。但其实本身在应用内也是可以执行的。强大的地方是在root的情况下,可以实现静默安装和操作一切你想在设备内做事情。其方法如下。
没有root权限的情况下在屏幕上操作,实测可被执行的命令只有swipe和部分keyevent可以生效,其余的可以通过adb的方式调用成功。但是一但在应用内通过shell是不可以的。这确保了android手机的安全。
其中keyevent 返回键 音量键可以调用 而home按键这种则不可以。如果你试图调用dumpsys activity activities 来查看。会抛出权限的异常如下。实测中我有申请权限,但一样无法在应用内部调起。
Permission Denial: can't dump ActivityManager from from pid=12414, uid=10369 without permission android.permission.DUMP0
使用参考:
Root情况下静默安装:
源码:https://github.com/BolexLiu/AndroidShell
4
双进程保活aidl版 (android5.0以下)
原理介绍:实现的机制并不复杂,通过AIDL的方式开启两个服务分别在不同进程中启动,然后互相守护监听对方是否被关闭,如果有一方被断开连接,另一方测重启服务。因为android在5.0之前销毁进程是一个一个销毁的,他并不能同时销毁两个。所以可以做这件事。(被修改的rom除外,比如华为4.4就不行,但三星可以。)
1.配置服务进程。注意process属性会独立在另一个进程中。
2.我们拥有两个服务LocalService RemoteService。项目运行后第一件事,同时启动服务。
3.在LocalService中绑定RemoteService并监听对方的创建和销毁,RemoteService中的实现也一样。
源码:https://github.com/BolexLiu/DoubleProcess
5
双进程保活jni版 (android5.0以下)
原理介绍:这种双进程守利用了Linux子进程在父进程被干掉后还能运行而实现。所以我们要做的是通过java去fork一段C的代码。通过动态链接库封装起来。然后在C代码里不断轮训父进程的ppid是否存活。如果挂掉了侧重新唤醒。
1.配置服务进程。注意process属性会独立在另一个进程中。
2.在DaemonService里利用静态代码块调起so。
3.so中的C代码轮训进程判断是否存活。
感谢CharonChui开源代码。处应该有掌声!
源码:https://github.com/CharonChui/DaemonService
6
保活 JobService版 (android5.0++)
原理: JobService是官方推荐的方式,即使app完成被杀死的状态下也能调用起来,本质是向系统注册一个任务。通过getSystemService拿到系统的JobScheduler。然后通过JobInfo.Buidler进行构造。需要注意的是一定要指定被触发的条件。比如:设备充电中、空闲状态、连接wifi... 非常类似以前的广播保护原理。但是实现不一样。这次是我们反向注册给系统,而不是接收系统的广播。
1.在AndroidManifest进行配置添加permission属性
2.MyJobServer继承JobService类:
3.在合适的地方向系统注册
注意:jobScheduler无法兼容Android 5.0以下的设备,可以参考下面的项目,在低版本中也可以使用。
源码:https://github.com/evant/JobSchedulerCompat