网上有很多介绍,但是感觉比较混乱!由于自己能力有限,只做一些简单易懂的介绍。
下面是通过反射来获取和设置系统属性的代码
public final class ReflectUtil {
public static String getProperty(String key, String defaultValue) {
String value = defaultValue;
try {
Class> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
value = (String)(get.invoke(c, key, defaultValue));
} catch (Exception e) {
e.printStackTrace();
}finally {
return value;
}
}
public static void setProperty(String key, String value) {
try {
Class> c = Class.forName("android.os.SystemProperties");
Method set = c.getMethod("set", String.class, String.class);
set.invoke(c, key, value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
没错就那么简单!但是一般人和一般设备不支持,因为权限问题!后面会说到。
即使获取得到,也会有其他问题,所以设置这个系统属性SystemProperties的设备一般是公司自己的主板,或者公司拥有板子Android源码和编译使用权限的。
即使自己的主板,在有root权限下,还有把自己设计的程序添加system权限,才能设置SystemProperties属性。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.liwen"
android:sharedUserId="android.uid.system"
>
...
manifest>
他会一直提示,要卸载之前的应用之类的语句。
但其实是需要签名的原因!我们需要在Android安装前把签名添加进去才能都正常安装。
手动添加签名文件生成apk是一个方法。
但是最好是使用app中的build.gradle进行设置每次安装的时候添加签名进去。
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.project.liwen"
minSdkVersion 21
targetSdkVersion 26
}
//声明签名文件
signingConfigs {
release {
storeFile file("../certificate/xxx.jks") //文件路径
storePassword '文件密码'
keyAlias '作者'
keyPassword '使用密码'
}
}
buildTypes {
//调试模式下,生成的apk添加签名文件
debug {
signingConfig signingConfigs.release
}
//版本模式下,生成的apk添加签名文件
release {
signingConfig signingConfigs.release
...
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
...
}
上面的配置实现默认添加签名文件,需要在自己的app同一级文件目录下添加一个文件夹certificate,然后把签名文件添加进去。
这里演示设置Android设备启动和关闭WiFi adb功能的代码
wifi adb指的是,该设备设置了时候,可以通过同一个wifi网络来实现电脑对Android设备的adb实现,而不需要用像以前那样使用数据线。
属性persist.adb.tcp.port是控制是否能实现WiFi adb的关键。
这里使用了最开始展示的反射工具类。
//获取属性,判断设备是否可以实现wifi adb功能
String property = ReflectUtil.getProperty("persist.adb.tcp.port", "0");
Log.i(TAG, "property : " + property);
//设置设备可以使用WiFi adb功能
ReflectUtil.setProperty("persist.adb.tcp.port", "5555");
//关闭设备WiFi adb功能
ReflectUtil.setProperty("persist.adb.tcp.port", "0");
到这里设置SystemProperties的属性的用法已经和大家说的很明白了。
但是关于SystemProperties属性设置的文件位置,我也不太搞得清楚!网上看了很多,但是发现和我的开发板情况不一样。