变化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 v=android-4.4.4_r1&_i=register_android_os_SystemProperties" style="text-decoration:none; color:rgb(0,122,204)">register_android_os_SystemProperties(v=android-4.4.4_r1&_i=JNIEnv" style="text-decoration:none; color:rgb(0,122,204)">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命令修改And ...
- 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 系统属性 * 说明: * 由于需 ...
- getprop 获取android系统属性
Android属性系统 property_get/property_set (很透彻)http://www.blogjava.net/MEYE/articles/359773.html getpro ...
- Android的系统属性SystemProperties
创建与修改android属性用Systemproperties.set(name, value) 获取android属性用Systemproperties.get(name) 注意:android属性 ...
- Android 系统属性SystemProperty分析
http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html Android System Property 一 System Pro ...
- Android系统属性简介
查看Android源码你会发现,代码中大量存在:SystemProperties.set()/SystemProperties.get():通过这两个接口可以对系统的属性进行读取/设置,顾名思义系统属 ...
随机推荐
- hdu1532 (最大流入门,EK算法)
看着这个博客 然后敲了hdu1532这个入门题,算是对最大流有点理解了 #include <stdio.h> #include <string.h> #include < ...
- I深搜
<span style="color:#330099;">/* I - 深搜 基础 Time Limit:1000MS Memory Limit:10000KB 64b ...
- 设计模式 - 模板方法模式(template method pattern) JFrame 具体解释
模板方法模式(template method pattern) JFrame 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(templ ...
- [Python]How to handle the exception in Python?
This post demonstrates how to use try clause to handle the exceptions def test_exception(case=None): ...
- [转载] RaspberryPi B+ WiringPi 引脚对应图
Pin Numbering - Raspberry Pi Model B+ Numbering Scheme Expansion Header J8 Pinout (40-pin Header) Ad ...
- 图解Http协议 (转)
一.技术基石及概述 问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP.其实建立在TCP之上的. 当我们打开百度网页时,是这样的: https://www.baidu.co ...
- xhost和XServer相关概念汇总
1.xhost 控制什么人可以访问当前主机上的增强 X-Windows.语法:xhost [ + | - ] [ Name ] 2.xhost 是用来控制X server访问权限的.通常当你从host ...
- 【翻译自mos文章】回收 asm磁盘空间的方法
回收 asm磁盘空间的方法 參考原文: How To Reclaim Asm Disk Space? (Doc ID 351866.1) 适用于: Oracle Database - Enterpri ...
- bzoj 1874 取石子游戏 题解 & SG函数初探
[原题] 1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 334 Solved ...
- JSP中的include有哪些?有什么差别?
JSP中的include有哪些?有什么差别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include ...