自己写android的关机命令

来源:互联网 发布:关于网络利弊 编辑:程序博客网 时间:2024/05/24 05:40
<span style="font-size: 16px;">pad</span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">中自带有重启命令(</span><span style="font-size: 16px;">reboot</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">),本以为也应该有关机命令啊,可是找来找去也没有诸如</span><span style="font-size: 16px;">shutdown</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">、</span><span style="font-size: 16px;">poweroff</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">等命令。然后想到</span><span style="font-size: 16px;">busybox</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">中有一个</span><span style="font-size: 16px;">poweroff</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">命令,故又去编译了一个</span><span style="font-size: 16px;">busybox</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">推进去,执行了</span><span style="font-size: 16px;">busybox poweroff</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">之后看了下返回码是</span><span style="font-size: 16px;">0</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">(即</span><span style="font-size: 16px;">echo $?</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">),然后,然后什么也没发生……</span></span>
<span style="background-image: none; background-attachment: scroll; background-position: 0% 0%;"><span style="font-size: 16px;">网上流行的方法是在</span><span style="font-size: 16px;">Java</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%;"><span style="font-size: 16px;">端发送要求关机的</span><span style="font-size: 16px;">Intent</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%;"><span style="font-size: 16px;">,如下:</span></span>
<span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;"></span></span><pre name="code" class="java">Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(intent);
<span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">需要加上相关的权限:</span></span><span style="font-size: 16px;">android:sharedUserId="android.uid.system"</span><span style="font-size: 16px;"><uses-permission android:name="android.permission.SHUTDOWN"/></span><span style="font-size: 16px;"></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">但要从</span><span style="font-size: 16px;">apk</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">中实现关机的话,那还不如手动关呢,</span></span><span style="font-size: 16px;"><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"></span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">所以自己动手了,写个诸如</span><span style="font-size: 16px;">shutdown</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">的小命令,实现也很简单,找到系统怎么处理关机的,然后我们把那段代码拿出来就行了。</span></span><span style="font-size: 16px;"></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">系统中处理关机部分的代码路径:</span><span style="font-size: 16px;">frameworks/base/core/jni/android_os_Power.cpp</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">,里面有个</span><span style="font-size: 16px;">android_os_Power_shutdown</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">方法,具体如下:</span></span><pre name="code" class="java">static void android_os_Power_shutdown(JNIEnv *env, jobject clazz){    sync();#ifdef HAVE_ANDROID_OS    reboot(RB_POWER_OFF);#endif}
<span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">看到有个</span><span style="font-size: 16px;">reboot</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">函数,然后再追踪这个</span><span style="font-size: 16px;">reboot(RB_POWER_OFF)</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">函数,看到其最终会调用</span><span style="font-size: 16px;">__reboot</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">这个函数(汇编实现的),我们只要给它传递“合适”的参数就行了。</span></span><span style="font-size: 16px;">        </span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">代码实现:</span></span><span style="font-size: 16px;">1</span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">、在</span><span style="font-size: 16px;">Android</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">源码目录中的</span><span style="font-size: 16px;">packages/apps/</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">下创建一个目录,例如:</span><span style="font-size: 16px;">Hello</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">。</span></span><span style="font-size: 16px;">2</span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">、编写</span><span style="font-size: 16px;">Android.mk</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">文件:</span></span><span style="font-size: 16px;">LOCAL_PATH:= $(call my-dir)</span><span style="font-size: 16px;">include $(CLEAR_VARS)</span><span style="font-size: 16px;"><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"></span></span><span style="font-size: 16px;">LOCAL_SRC_FILES:= shutdown.c</span><span style="font-size: 16px;"><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"></span></span><span style="font-size: 16px;">LOCAL_MODULE:= shutdown </span><span style="font-size: 16px;">LOCAL_PRELINK_MODULE:= false</span><span style="font-size: 16px;">LOCAL_SHARED_LIBRARIES:= libutils</span><span style="font-size: 16px;">include $(BUILD_EXECUTABLE)</span><span style="font-size: 16px;">3</span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">、编写</span><span style="font-size: 16px;">shutdown.c</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">源文件,如下:</span></span>
#include <stdio.h>#include <stdlib.h>#include <utils/Log.h>#include <sys/reboot.h>#ifndef LOG_TAG#define LOG_TAG "dxyh"#endifint main(int argc, char **argv){int retval;if ((retval = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,RB_POWER_OFF, NULL)) < 0) {LOGE("Try to shutdown the machine failed!");exit(EXIT_FAILURE);}return 0;}
<span style="font-size: 16px;">4</span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">、</span><span style="font-size: 16px;">mm</span></span><span style="font-size: 16px;">5</span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">、将生成的</span><span style="font-size: 16px;">shutdown</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">可执行程序推入到</span><span style="font-size: 16px;">pad</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">中的</span><span style="font-size: 16px;">/system/bin</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">下即可。</span></span><span style="font-size: 16px;">6</span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">、然后就可以和其他命令一样运行了,例如</span><span style="font-size: 16px;">adb shell shutdown</span></span><span style="background-image: none; background-attachment: scroll; background-color: transparent; background-position: 0% 0%; background-repeat: repeat repeat;"><span style="font-size: 16px;">。</span></span>

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 爱奇艺绑定的手机号丢了怎么办 高铁票订错时间怎么办 微信音频视频打出没反应怎么办 海尔超低温保存箱低温报警怎么办 孕期吃了烧烤蔬菜怎么办 百姓动迁政府说话不算数怎么办 孕妇用了青草膏怎么办 药材不知道啥名怎么办 诛仙手游鸿蒙紫气不见了怎么办 紫叶兰叶干了怎么办 绿萝叶子中毒了怎么办? 怀孕初期胃疼的厉害怎么办 怀孕胃疼的厉害怎么办 天然气热水器风口一封闭怎么办 热水器着火后火变大怎么办? 人如果没有天魂怎么办 被鬼魂附体了该怎么办 被吸血蠓咬了怎么办 股份公司大股东占用资金怎么办 抱小孩抱的胳膊疼怎么办 一个月好几个性伴侣怎么办 惹了势力大的人怎么办 给佛像换新法器旧的怎么办 cad填充图案拾取不了点怎么办 cad填充图案太密怎么办 桃木葫芦挂件裂口了怎么办 皮肤被太阳晒伤变黑怎么办 皮肤又粗又黑该怎么办 盆栽红薯长疯了怎么办 四叶草叶子发黄怎么办 美篇不想让别人看到怎么办 黑魂3暗灵入侵怎么办 问道手游账号忘了怎么办 问道手游密码忘了怎么办 毒蚂蚁咬了红肿怎么办 电脑开机后有电流声怎么办 小学生阅读方面不会总结怎么办 天龙八部手游转职装备怎么办 投简历没回应该怎么办? 开车开的腰疼怎么办 开车腰疼怎么办吃什么