试了很多种方法,有说导入系统的framework.jar的,试过依然不行,最后确认可行的办法就是导入layoutlib.jar包。
1.在Sdk/platform/android-XX/data目录下找到layoutlib.jar包然后拷贝到android工程app/lib/目录下:
然后右键选择Add Library,添加成功标志如下:
软件也会自动生成依赖 implementation files(‘libs\layoutlib.jar’),如果没有需要手动添加。
2.然后就是导入库和使用方法了!
import android.os.SystemProperties;
SystemProperties.set("persist.env.××××.enable","true");
如果是做系统开发的话,还会有权限相关的报错需要修改,我们只需要根据报错增加相关的SElinux权限就可以了。报错如下:
avc: denied { write } for name="property_service" dev="tmpfs" ino=14898 scontext=u:r:untrusted_app:s0:c512,c768
tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0
根据avc报错解决相关权限:
allow untrusted_app property_socket:sock_file write;
另外还要在property_contexts(保存系统中所有属性的安全上下问题)中添加对应的属性:
persist.env.××××.enable u:object_r:default_prop:s0
在system_app.te中增加set权限:
allow system_app {
ctl_default_prop
fm_prop
usf_prop
+ default_prop
}:property_service set;
增加权限之后会编译报错;
libsepol.report_failure: neverallow on line 343 of system/sepolicy/domain.te (or line 9215 of policy.conf) violated by allow system_app default_prop:property_service { set };
libsepol.check_assertions: 1 neverallow failures occurred
Error while expanding policy
out/host/linux-x86/bin/checkpolicy: loading policy configuration from out/target/product/msm8953_64/obj/ETC/sepolicy_intermediates/policy.conf
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] 错误 1
解决
343 neverallow { domain -init -system_server -system_app} default_prop:property_service set;