基本介绍:

从以前的博客中提到,我们,最后,通过关机过程变化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(&quot;sys.powerctl&quot;, &quot;shutdown&quot;)关机分析的更多相关文章

  1. 修改Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析

    简介: 从之前的博文中我们提到过,关机流程中最后是通过修改Android属性进行关机操作(SystemProperties.java通过JNI调用访问系统属性),当然我们也可以通过adb命令修改And ...

  2. Android 系统属性-SystemProperties详解***

    创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是androi ...

  3. Android系统属性SystemProperties在应用层的用法【转】

    本文转载自:https://blog.csdn.net/lilidejing/article/details/53288243 如果你看到这篇文章了,说明你已经是资深程序员,会发现整个Android系 ...

  4. Android系统属性SystemProperties分析

    下面这几个博客总结的不错,有空看下: http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html http://blog.csdn.n ...

  5. Android 系统属性

    /************************************************************************ * Android 系统属性 * 说明: * 由于需 ...

  6. getprop 获取android系统属性

    Android属性系统 property_get/property_set  (很透彻)http://www.blogjava.net/MEYE/articles/359773.html getpro ...

  7. Android的系统属性SystemProperties

    创建与修改android属性用Systemproperties.set(name, value) 获取android属性用Systemproperties.get(name) 注意:android属性 ...

  8. Android 系统属性SystemProperty分析

     http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html Android System Property 一 System Pro ...

  9. Android系统属性简介

    查看Android源码你会发现,代码中大量存在:SystemProperties.set()/SystemProperties.get():通过这两个接口可以对系统的属性进行读取/设置,顾名思义系统属 ...

随机推荐

  1. 高性能 TCP &amp; UDP 通信框架 HP-Socket v3.2.2 正式公布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  2. Windows远程桌面连接Ubuntu 14.04 (转)

    由于xrdp.gnome和unity之间的兼容性问题,在Ubuntu 14.04版本中仍然无法使用xrdp登陆gnome或unity的远程桌面,现象是登录后只有黑白点为背景,无图标也无法操作.与13. ...

  3. Oracle SQL Lesson (3) - 使用单行函数自定义输出

    大小写转换函数LOWER('SQL Course') = sql courseUPPER('SQL Course') = SQL COURSEINITCAP('SQL Course') = Sql C ...

  4. JavaScript 常见陷阱

    JavaScript中的一些特性和通常我们想象的不太一样.这里我总结了一些有悖直觉的语言特性. 1 数组 1.1 数组的遍历 在直接支持for a in b的语言中,比方Python/Ruby里的a的 ...

  5. 非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)

    1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开 ...

  6. Directx11学习笔记【二十】 使用DirectX Tool Kit加载mesh

    本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/p/5788482.html 现在directx已经不再支持.x文件了, ...

  7. 深入理解spring中的各种注解(转)

    Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...

  8. NET WEB

    .NET WEB程序员需要掌握的技能 2015-12-28 08:50 by 敏捷的水, 3997 阅读, 66 评论, 收藏, 编辑 本来这个是我给我们公司入职的新人做一个参考,由于 @张善友 老师 ...

  9. WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法

    原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ...

  10. Error Code: 1318. Incorrect number of arguments for PROCEDURE company.new_procedure; expected 2, got

    1.错误叙述性说明 20:27:34 call new_procedure(20150112) Error Code: 1318. Incorrect number of arguments for ...