为Android增加一个关机命令

来源:互联网 发布:大数据 服务型政府 编辑:程序博客网 时间:2024/06/14 10:58

首先在external目录下创建一个目录shutdown,然后进入shutdown目录,创建两个文件Android.mk和shutdown.c,增加内容如下:

#define LOG_TAG "shutdown"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/reboot.h>#include <utils/Log.h>int main(int argc, char *argv[]){int ret;ALOGI("Shutdown now...\n");ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,RB_POWER_OFF, NULL);if (ret < 0) {ALOGE("Shutdown failed!\n");exit(-1);}return 0;}

Android.mk
LOCAL_PATH :=$(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := shutdown.cLOCAL_SHARED_LIBRARIES := liblogLOCAL_MODULE := shutdowninclude $(BUILD_EXECUTABLE)

mm方式编译一下,然后push到/system/bin目录下,执行shutdown命令就可以实现关机操作了。


// 2015.07.30 add

shutdown.c修改如下:

#define LOG_TAG "shutdown"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/reboot.h>#include <utils/Log.h>int main(int argc, char *argv[]){        int ret;        ALOGI("Shutdown now...\n");        /*ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,                                RB_POWER_OFF, NULL);*/        ret = reboot(RB_POWER_OFF);        if (ret < 0) {                ALOGE("Shutdown failed!\n");                exit(-1);        }        return 0;}
这里采用reboot这个系统调用,这个系统调用是glibc提供的,原型如下:
#include <unistd.h>#include <sys/reboot.h>int reboot(int cmd);
通过man可以看到常见支持下面的命令:

LINUX_REBOOT_CMD_RESTARTLINUX_REBOOT_CMD_POWER_OFF

分别对应重启和关机,而这里为什么用了RB_POWER_OFF这个参数呢,可以在android中的bionic/libc/include/sys/reboot.h文件中看到RB_POWER_OFF就是一个宏定义,定义为LINUX_REBOOT_CMD_POWER_OFF。

0 0
原创粉丝点击