修改Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析
简介:
从之前的博文中我们提到过,关机流程中最后是通过修改Android属性进行关机操作(SystemProperties.java通过JNI调用访问系统属性),当然我们也可以通过adb命令修改Android系统属性执行关机操作,例如adb shell setpro sys.powerctl shutdown,这里我们简单介绍下修改Android属性关机的原理或流程。
native_set()<SystemProperties.java>--->SystemProperties_set()<android_os_SystemProperties.cpp>
这是SystemProperties.java类中设置系统函数的方法。
0119 /**
0120 * Set the value for the given key.
0121 * @throws IllegalArgumentException if the key exceeds 32 characters
0122 * @throws IllegalArgumentException if the value exceeds 92 characters
0123 */
0124 public static void set(String key, String val) {
0125 if (key.length() > PROP_NAME_MAX) {
0126 throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
0127 }
0128 if (val != null && val.length() > PROP_VALUE_MAX) {
0129 throw new IllegalArgumentException("val.length > " +
0130 PROP_VALUE_MAX);
0131 }
0132 native_set(key, val);//SystemProperties.java通过JNI调用访问系统属性
0133 }
SystemProperties接口类在初始环境中注册对应CPP接口android_os_SystemProperties.cpp,实际操作通过JNI调用对应cpp文件,frameworks/base/core/jni/AndroidRuntime.cpp.点击查看源码
extern int register_android_os_SystemProperties(JNIEnv *env);
frameworks/base/core/jni/android_os_SystemProperties.cpp;点击查看完整源码
0162 static void SystemProperties_set(JNIEnv *env, jobject clazz,
0163 jstring keyJ, jstring valJ)
0164 {
0165 int err;
0166 const char* key;
0167 const char* val;
0168
0169 if (keyJ == NULL) {
0170 jniThrowNullPointerException(env, "key must not be null.");
0171 return ;
0172 }
0173 key = env->GetStringUTFChars(keyJ, NULL);
0174 *从java程序中传过去的String对象在本地方法中对应的是jstring类型,jstring类型和c中的char*不同,如果你直接作为char*使用的话,就会出错。因此使用之前需要进行转换。转换方式就是GetStringUTFChars(keyJ, NULL)<JNIenv方式>,即将jstring转换成UTF-8格式的char*。*/
0175 if (valJ == NULL) {
0176 val = ""; /* NULL pointer not allowed here */
0177 } else {
0178 val = env->GetStringUTFChars(valJ, NULL);
0179 }
0180
0181 err = property_set(key, val);
0182
0183 env->ReleaseStringUTFChars(keyJ, key);
0184 /*释放指向UTF-8格式的char*的指针*/
0185 if (valJ != NULL) {
0186 env->ReleaseStringUTFChars(valJ, val);
0187 }
0188
0189 if (err < 0) {
0190 jniThrowException(env, "java/lang/RuntimeException",
0191 "failed to set system property");
0192 }
0193 }
修改Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析的更多相关文章
- 变化Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析
基本介绍: 从以前的博客中提到,我们,最后,通过关机过程变化Android关机属性(SystemProperties.java由JNI呼叫接入系统属性),当然,我们也能adb命令变化Android系统 ...
- Android 系统属性-SystemProperties详解***
创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是androi ...
- Android系统属性SystemProperties在应用层的用法【转】
本文转载自:https://blog.csdn.net/lilidejing/article/details/53288243 如果你看到这篇文章了,说明你已经是资深程序员,会发现整个Android系 ...
- Android系统属性SystemProperties分析
下面这几个博客总结的不错,有空看下: http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html http://blog.csdn.n ...
- Android 系统属性
/************************************************************************ * Android 系统属性 * 说明: * 由于需 ...
- 修改Android系统字号(二)
/*********************************************************************** * 修改Android系统字号(二) * 说明: * ...
- 修改Android系统字号(一)
/*********************************************************************** * 修改Android系统字号(一) * 说明: * ...
- getprop 获取android系统属性
Android属性系统 property_get/property_set (很透彻)http://www.blogjava.net/MEYE/articles/359773.html getpro ...
- 修改android系统开机动画
本文转载自:http://blog.csdn.net/u012301841/article/details/51598115 修改android系统开机动画
随机推荐
- css 表格
1.给元素的display属性添加为以下值 table : <table> table-caption :<caption> table-cell : <td> t ...
- DPDK内存管理(1)
1 前言 DPDK将利用hugepage预留的物理内存统一的组织管理起来,然后以库的方式对外提供使用的接口.下图展示了DPDK中内存有关的模块的相互关系. rte_eal 是统一 ...
- C++ 消息中间件(MQ4CPP)
MQ4CPP支持: MultiThreading Sockets Cluster Encription Compression Service lookup Message routing 看到MQ4 ...
- Redis常用命令入门3:列表类型
列表类型 列表类型也是一个我们很长要用到的一个类型.比如我们发博客,要用到博客列表.如果没有列表我们就只能遍历键来获取所有文章或一部分文章了,这个语法是keys,但是这个命令需要遍历数据库中的所有键, ...
- @@identity的使用
-- ============================================= -- Author: Qiuhua,Huang -- Create date: 08/09/2012 ...
- 记一次联想A820t救砖线刷
因为是看着教程刷的(有大神放出教程,只管伸手拿来就好啦)但是照着教程做的过程中出现了一些问题还是值得注意的,在这里总结一下,给新手提供一点建议 教程比较长,我放到博客的文件中,需要的自己下载一下.或者 ...
- spider_jpg
__author__ = 'sus' #urllib模块提供了读取Web页面数据的接口import urllib#re模块主要包含了正则表达式import re#定义一个getHtml()函数def ...
- Beginning.......
第一次写博客,希望能坚持下去.................
- 个人记录比较好的css样式
background:#835838; filter:alpha(opacity=70);-moz-opacity:0.7;opacity:0.8; 设置背景颜色为透明! IE6. IE7.IE8. ...
- Codeforces Round #380 (Div. 1, Rated, Based on Technocup 2017 - Elimination Round 2)
http://codeforces.com/contest/737 A: 题目大意: 有n辆车,每辆车有一个价钱ci和油箱容量vi.在x轴上,起点为0,终点为s,中途有k个加油站,坐标分别是pi,到每 ...