platform :msm8916
OS:android5.1
安卓系统属性是以键值对的形式存在,系统属性,一般放在system.prop,build.prop,default.prop等文件中,
应用通过函数String key = SystemProperties.get("ro.android.myprop");返回属性ro.android.myprop对应的key值。
一. build.prop生成过程,它是由android编译系统生成的文件,主要属性配置来源与三个方面。
① build/tools/buildinfo.sh执行脚本,并输出到build.prop
② 把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中
③ 收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。
可用adb命令修改,或者adb push上去,修改完后权限一定是0644,要不然系统无法启动。
二. 可以修改device/qcom/M9PLUS_10/system.prop来设置系统的属性,
比如修改:#修改图标显示大小(屏幕dpi)
ro.sf.lcd_density=480
#默认时区为中国标准时区。
persist.sys.timezone=Asia/Shanghai
#强制横屏(persist.panel.orientation=0时为强制竖屏)
persist.panel.orientation=270
修改好之后,执行make -j8.编译完成后,build.prop修改的内容全部还原了。后来发现out/target/product/M9PLUS_10/system/ 下有文件:build.prop.bakforspec 。这个会一直把修改后的build.prop文件强制还原到以前的状态。直接把这个文件删了,再次
编译即可。
一般添加属性或者修改属性可以修改下面两个文件:
1、 build/target/product/core_base.mk
2. $(TARGET_DEVICE_DIR)/system.prop
我的平台目录:device/qcom/M9PLUS_10/system.prop
在编译system的时候会更新到build.prop中!
三 . 自己增加一个系统属性,作为宏开关。
例1:
1. 在system.prop添加属性ro.nbpt.mystatus=false或者ro.nbpt.mystatus=true
或者利用setpropro.nbpt.mystatus false或者setpropro.nbpt.mystatus true.这句命令也可以放在别的
应用中执行,可以实现应用之间的通信,也可以用来调试。
2. 应用可以通过下面的函数和判断哎做相应的操作:
String mode = SystemProperties.get("ro.nbpt.mystatus");
例2
在高通平台,想要添加一个宏开关,可以尽量控制更大范围的代码,我选择了system.prop文件中,添加了一个开关
tinno_gms_able = false
在java中的使用方法
-
import android.os.SystemProperties;
-
if(SystemProperties.getBoolean(
"tinno_gms_able",
false) ==
true){
-
..................
-
}
这个使用方式,需要应用程序有system或root权限。
将android程序的权限提升到system权限,有下面方法:
(1)在AndroidManifest.xml中,在manifest加入
android:sharedUserId="android.uid.system"
- 1
(2)在Android.mk中,將LOCAL_CERTIFICATE := XXX修改成
LOCAL_CERTIFICATE := platform
- 1
(3)有时会显示无法import android.os.SystemProperties
修改方法如下:
注释掉相应Android.mk文件中的以下内容:
#LOCAL_SDK_VERSION := current
- 1
备注:因为SystemProperties是非标准的SDK接口,如果要使用,不能定义LOCAL_SDK_VERSION变量。该变量表示应用只使用标准的SDK接口。
在cpp文件中的使用方式
#include <cutils/properties.h>
- 1
-
char tinnoGmsValue[PROPERTY_VALUE_MAX];
-
bool tinno_gms_enabled =
false;
-
if(property_get(
"tinno_gms_able", tinnoGmsValue,
"false")) {
-
tinno_gms_enabled = atoi(tinnoGmsValue) || !
strncmp(
"true", tinnoGmsValue,
4);
-
}
-
if(tinno_gms_enabled ==
true){
-
.................
}
安卓系统属性一般存放位置:
system.prop
build.prop
default.prop
local.prop
-
-
四. 根据屏幕大小来设置系统属性
在kernel里面kernel/drivers/video/fbsysfs.c会导出数据/sys/class/graphics/fb0/virtual_size
在Y:\LA.BR.1.2.4-05310-8x16.0\device\qcom\common\init\init_msm8916.c 中获取virtual_size值,根据不同的屏幕大小设置ro.sf.lcd_density。
其中 PROP_LCDDENSITY的值,当然也可以设置其他的系统属性,利用 property_set()
-
#define VIRTUAL_SIZE "/sys/class/graphics/fb0/virtual_size"
-
#define BUF_SIZE 64
-
-
void init_msm_properties(unsigned long msm_id, unsigned long msm_ver, char *board_type)
-
{
-
char platform[PROP_VALUE_MAX];
-
int rc;
-
unsigned
long virtual_size =
0;
-
char str[BUF_SIZE];
-
-
UNUSED(msm_id);
-
UNUSED(msm_ver);
-
-
rc = property_get(
"ro.board.platform", platform);
-
if (!rc || !ISMATCH(platform, ANDROID_TARGET)){
-
return;
-
}
-
-
rc = read_file2(VIRTUAL_SIZE, str,
sizeof(str));
-
if (rc) {
-
virtual_size = strtoul(str,
NULL,
0);
-
}
-
-
if(virtual_size >=
1080) {
-
if (ISMATCH(board_type,
"SBC")) {
-
property_set(PROP_LCDDENSITY,
"240");
-
property_set(PROP_QEMU_NAVKEY,
"0");
-
}
else
-
property_set(PROP_LCDDENSITY,
"480");
-
}
else
if (virtual_size >=
720) {
-
// For 720x1280 resolution
-
property_set(PROP_LCDDENSITY,
"320");
-
}
else
if (virtual_size >=
480) {
-
// For 480x854 resolution QRD.
-
property_set(PROP_LCDDENSITY,
"240");
-
}
else
-
property_set(PROP_LCDDENSITY,
"320");
-
-
if (msm_id >=
239 && msm_id <=
243) {
-
property_set(
"media.msm8939hw",
"1");
-
}
-
-
if (msm_id >=
268 && msm_id <=
271) {
-
property_set(
"media.msm8929hw",
"1");
-
}
-
-
if (msm_id ==
206) {
-
property_set(
"vidc.enc.narrow.searchrange",
"0");
-
}
-
}
-
-
-
kernel/drivers/video/fbsysfs.
c
-
-
static ssize_t
show_virtual
(struct device *device,
-
struct device_attribute *attr, char *buf)
-
{
-
struct fb_info *fb_info = dev_get_drvdata(device);
-
return
snprintf(buf, PAGE_SIZE,
"%d,%d\n", fb_info->var.xres_virtual,
-
fb_info->var.yres_virtual);
-
}
-
-
在Msm_fb.c (drivers\video\msm) 定义fb_info->var.xres_virtual
-
-
var->xres_virtual = panel_info->xres;
-
var->yres_virtual = panel_info->yres * mfd->fb_page +
-
((PAGE_SIZE - remainder)/fix->line_length) * mfd->fb_page;
platform :msm8916
OS:android5.1
安卓系统属性是以键值对的形式存在,系统属性,一般放在system.prop,build.prop,default.prop等文件中,
应用通过函数String key = SystemProperties.get("ro.android.myprop");返回属性ro.android.myprop对应的key值。
一. build.prop生成过程,它是由android编译系统生成的文件,主要属性配置来源与三个方面。
① build/tools/buildinfo.sh执行脚本,并输出到build.prop
② 把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中
③ 收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。
可用adb命令修改,或者adb push上去,修改完后权限一定是0644,要不然系统无法启动。
二. 可以修改device/qcom/M9PLUS_10/system.prop来设置系统的属性,
比如修改:#修改图标显示大小(屏幕dpi)
ro.sf.lcd_density=480
#默认时区为中国标准时区。
persist.sys.timezone=Asia/Shanghai
#强制横屏(persist.panel.orientation=0时为强制竖屏)
persist.panel.orientation=270
修改好之后,执行make -j8.编译完成后,build.prop修改的内容全部还原了。后来发现out/target/product/M9PLUS_10/system/ 下有文件:build.prop.bakforspec 。这个会一直把修改后的build.prop文件强制还原到以前的状态。直接把这个文件删了,再次
编译即可。
一般添加属性或者修改属性可以修改下面两个文件:
1、 build/target/product/core_base.mk
2. $(TARGET_DEVICE_DIR)/system.prop
我的平台目录:device/qcom/M9PLUS_10/system.prop
在编译system的时候会更新到build.prop中!
三 . 自己增加一个系统属性,作为宏开关。
例1:
1. 在system.prop添加属性ro.nbpt.mystatus=false或者ro.nbpt.mystatus=true
或者利用setpropro.nbpt.mystatus false或者setpropro.nbpt.mystatus true.这句命令也可以放在别的
应用中执行,可以实现应用之间的通信,也可以用来调试。
2. 应用可以通过下面的函数和判断哎做相应的操作:
String mode = SystemProperties.get("ro.nbpt.mystatus");
例2
在高通平台,想要添加一个宏开关,可以尽量控制更大范围的代码,我选择了system.prop文件中,添加了一个开关
tinno_gms_able = false
在java中的使用方法
-
import android.os.SystemProperties;
-
if(SystemProperties.getBoolean(
"tinno_gms_able",
false) ==
true){
-
..................
-
}
这个使用方式,需要应用程序有system或root权限。
将android程序的权限提升到system权限,有下面方法:
(1)在AndroidManifest.xml中,在manifest加入
android:sharedUserId="android.uid.system"
- 1
(2)在Android.mk中,將LOCAL_CERTIFICATE := XXX修改成
LOCAL_CERTIFICATE := platform
- 1
(3)有时会显示无法import android.os.SystemProperties
修改方法如下:
注释掉相应Android.mk文件中的以下内容:
#LOCAL_SDK_VERSION := current
- 1
备注:因为SystemProperties是非标准的SDK接口,如果要使用,不能定义LOCAL_SDK_VERSION变量。该变量表示应用只使用标准的SDK接口。
在cpp文件中的使用方式
#include <cutils/properties.h>
- 1
-
char tinnoGmsValue[PROPERTY_VALUE_MAX];
-
bool tinno_gms_enabled =
false;
-
if(property_get(
"tinno_gms_able", tinnoGmsValue,
"false")) {
-
tinno_gms_enabled = atoi(tinnoGmsValue) || !
strncmp(
"true", tinnoGmsValue,
4);
-
}
-
if(tinno_gms_enabled ==
true){
-
.................
}
安卓系统属性一般存放位置:
system.prop
build.prop
default.prop
local.prop
-
-
四. 根据屏幕大小来设置系统属性
在kernel里面kernel/drivers/video/fbsysfs.c会导出数据/sys/class/graphics/fb0/virtual_size
在Y:\LA.BR.1.2.4-05310-8x16.0\device\qcom\common\init\init_msm8916.c 中获取virtual_size值,根据不同的屏幕大小设置ro.sf.lcd_density。
其中 PROP_LCDDENSITY的值,当然也可以设置其他的系统属性,利用 property_set()
-
#define VIRTUAL_SIZE "/sys/class/graphics/fb0/virtual_size"
-
#define BUF_SIZE 64
-
-
void init_msm_properties(unsigned long msm_id, unsigned long msm_ver, char *board_type)
-
{
-
char platform[PROP_VALUE_MAX];
-
int rc;
-
unsigned
long virtual_size =
0;
-
char str[BUF_SIZE];
-
-
UNUSED(msm_id);
-
UNUSED(msm_ver);
-
-
rc = property_get(
"ro.board.platform", platform);
-
if (!rc || !ISMATCH(platform, ANDROID_TARGET)){
-
return;
-
}
-
-
rc = read_file2(VIRTUAL_SIZE, str,
sizeof(str));
-
if (rc) {
-
virtual_size = strtoul(str,
NULL,
0);
-
}
-
-
if(virtual_size >=
1080) {
-
if (ISMATCH(board_type,
"SBC")) {
-
property_set(PROP_LCDDENSITY,
"240");
-
property_set(PROP_QEMU_NAVKEY,
"0");
-
}
else
-
property_set(PROP_LCDDENSITY,
"480");
-
}
else
if (virtual_size >=
720) {
-
// For 720x1280 resolution
-
property_set(PROP_LCDDENSITY,
"320");
-
}
else
if (virtual_size >=
480) {
-
// For 480x854 resolution QRD.
-
property_set(PROP_LCDDENSITY,
"240");
-
}
else
-
property_set(PROP_LCDDENSITY,
"320");
-
-
if (msm_id >=
239 && msm_id <=
243) {
-
property_set(
"media.msm8939hw",
"1");
-
}
-
-
if (msm_id >=
268 && msm_id <=
271) {
-
property_set(
"media.msm8929hw",
"1");
-
}
-
-
if (msm_id ==
206) {
-
property_set(
"vidc.enc.narrow.searchrange",
"0");
-
}
-
}
-
-
-
kernel/drivers/video/fbsysfs.
c
-
-
static ssize_t
show_virtual
(struct device *device,
-
struct device_attribute *attr, char *buf)
-
{
-
struct fb_info *fb_info = dev_get_drvdata(device);
-
return
snprintf(buf, PAGE_SIZE,
"%d,%d\n", fb_info->var.xres_virtual,
-
fb_info->var.yres_virtual);
-
}
-
-
在Msm_fb.c (drivers\video\msm) 定义fb_info->var.xres_virtual
-
-
var->xres_virtual = panel_info->xres;
-
var->yres_virtual = panel_info->yres * mfd->fb_page +
-
((PAGE_SIZE - remainder)/fix->line_length) * mfd->fb_page;