基本介绍:

从以前的博客中提到,我们,最后,通过关机过程变化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. C陷阱与缺陷之语法陷阱

    2.1理解函数声明 不论什么C变量的声明都由两部分组成:类型以及一组类似表达式的声明符号.比如 float f; 这个声明的含义是:当对其求值时,表达式f和g的类型为浮点数类.由于声 明符与表达式的相 ...

  2. HDU 1201

    18岁生日 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. OGG-01008 Extract displays Discarding bad record (discard recs=1) when using filter or where clause

    因为在extract參数文件里使用了where语句,而where后面的的条件列又不是主键,没有为update.delete操作记录日志,因此会报1008错误. Applies to: Oracle G ...

  4. C该程序生成一个唯一的序列号

    在实际的软件开发项目,通常,它包括产生一唯一的序列号.在本文中,一个切实可行的方案,例如,它引入了一个唯一的序列号生成过程. 本文生成的序列号的样式为:MMDDHHMINSS_XXXXXX. 程序例如 ...

  5. Java实现字符全阵列阵列

    import org.junit.Test; public class AllSort { public void permutation(char[] buf, int start, int end ...

  6. 凝视条件推断浏览器&lt;!--[if !IE]&gt;&lt;!--[if IE]&gt;&lt;!--[if lt IE 6]&gt;&lt;!--[if gte IE 6]&gt;

    <!--[if !IE]><!--> 除IE外可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![e ...

  7. 从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...

  8. 解决Centos 7 dhcp服务器-no subnet declaration for start (no IPV4 addresses.)

    上面的配置是hyper-v 安装的 centos 7.0 安装dhcp 服务器的方法是 yum install dhcpd 在安装和配置好后,运行的时候出现错误 错误提示如下: no subnet d ...

  9. URAL 1725. Sold Out!(数学啊 )

    题目链接:space=1&num=1725" target="_blank">http://acm.timus.ru/problem.aspx?space= ...

  10. Android搜索芽发展clientVersion1.0结束(过程和结果显示)

    本文原:http://blog.csdn.net/minimicall 转载标明. 博士生.找我,我希望有一个合作伙伴.为了帮助他解决了移动终端产品.他给了我他的想法的叙述性说明,搜索布.要搜索布图像 ...