关闭

通过反射来读写build.prop参数

标签: java手机android反射build-prop
336人阅读 评论(0) 收藏 举报
分类:

通过反射来读写build.prop参数

build.prop里面有很多关于手机参数的相关配置信息,其对应的参数读写是在android.os.SystemProperties.java这个类中完成。除非我们的应用有系统签名,不然的话不能直接调用里面的方法。但是通过java的反射我们就可以很容易的去调用。
我们先来看一下SystemProperties.java这个类的两个关键的方法get和set:

/**
     * Get the value for the given key.
     * @return an empty string if the key isn't found
     * @throws IllegalArgumentException if the key exceeds 32 characters
     */
    public static String get(String key) {
        if (key.length() > PROP_NAME_MAX) {
            throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
        }
        return native_get(key);
    }
/**
     * Set the value for the given key.
     * @throws IllegalArgumentException if the key exceeds 32 characters
     * @throws IllegalArgumentException if the value exceeds 92 characters
     */
    public static void set(String key, String val) {
        if (key.length() > PROP_NAME_MAX) {
            throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
        }
        if (val != null && val.length() > PROP_VALUE_MAX) {
            throw new IllegalArgumentException("val.length > " +
                PROP_VALUE_MAX);
        }
        native_set(key, val);
    }

get方法传入一个键,然后就可以获取这个键对应的值(在adb shell里面我们可以通过getprop命令来查看所有的键以及对应的值)。
set方法参数是对应的键和值。
根据这些信息,我们可以很容易来通过反射来读写:

// 读
 private String getValueFromProp() {
        String value = "";
        Class<?> classType = null;
        try {
            classType = Class.forName("android.os.SystemProperties");
            //拿到get方法,此方法传入一个String类型参数。
            Method getMethod = classType.getDeclaredMethod("get", new Class<?>[]{String.class});
            // 键值persist.sys.sb.hide,其他的也可以。
            value = (String) getMethod.invoke(classType, new Object[]{"persist.sys.sb.hide"});
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return value;
    }
// 写
 private void setValueToProp() {
        Class<?> classType = null;
        try {
            classType = Class.forName("android.os.SystemProperties");
            //拿到set方法,此方法传入两个String类型参数,一个是键,一个是设定的值。
            Method getMethod = classType.getDeclaredMethod("set", new Class[]{String.class, String.class});
            // 对persist.sys.sb.hide这一项设定值为1。
            getMethod.invoke(classType, new String[]{"persist.sys.sb.hide", "1"});
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

    }
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Build.prop重要参数解释

以开发版4.7.25为例 # begin build properties——开始设置系统性能 # autogenerated by buildinfo.sh——通过设置形成系统信息 ro....
  • zwq1457
  • zwq1457
  • 2015-12-07 15:56
  • 2212

Android build.prop修改详细说明

用RE进入/system/挂载读写(前提是系统已经被ROOT过), 找到build.prop复制到/sdcarrd进行修改比较保险. 也可以挂载读写后,直接选择用文本编辑器打开,进行编辑.乱改有风险...
  • sunxingzhesunjinbiao
  • sunxingzhesunjinbiao
  • 2014-05-20 09:53
  • 15905

使用反射来实现参数绑定

public class FormHandler { private Object form; public FormHandler(Object form){ this.form=form; } ...
  • qq_28331477
  • qq_28331477
  • 2016-05-03 11:34
  • 147

通过反射来实现懒加载

代码写多了,得总结和借鉴,这是在kafka源码中拷贝下来的,一个小技巧: 当时用的是jdk中的帮助类时,可以直接通过new关键字来实现, 但是当依赖的时外部的类时,最好通过反射来实现,也就是说,只...
  • tianjun2012
  • tianjun2012
  • 4天前 15:23
  • 11

build.prop 文件的部分参数

build.prop 文件的部分参数
  • sunsteam
  • sunsteam
  • 2017-04-12 15:30
  • 166

Android build.prop生成过程分析

build.prop的是build/core/Makefile生成的。ifdef TARGET_SYSTEM_PROP system_prop_file := $(TARGET_SYSTEM_PROP...
  • u014782319
  • u014782319
  • 2015-01-28 17:34
  • 1151

利用反射来设计BaseDao

package com.dao.impl; import java.lang.reflect.Field; import java.sql.Connection; import java.sql...
  • wang1992_1992
  • wang1992_1992
  • 2016-07-24 13:30
  • 758

Build.prop部分优化参数

Build.prop部分优化参数 Build.prop (编辑 /system/build.prop 文件(需要root, 可以用文件管理器或者其他root explorer)如果build.pro...
  • mk1111
  • mk1111
  • 2013-09-01 21:45
  • 1501

使用反射来加载类

Properties properties=new Properties(); BufferedReader read=new BufferedReader(new FileReade...
  • zhou920786312
  • zhou920786312
  • 2017-04-08 01:45
  • 106

如何通过反射来调用类方法

通过反射调用类方法有一下几个步骤:1.加载类 2.创建类实例 3.获...
  • sxl200852
  • sxl200852
  • 2013-04-30 19:45
  • 226
    个人资料
    • 访问:8732次
    • 积分:160
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论