Android 系统默认参数的修改(一)
(2016-06-01 14:36:40)
标签:
itandroid壁纸背景图片 |
分类: 嵌入式Android |
Android 系统默认参数的修改
写在前面的话
一般在新项目开始之初,我们需要针对客户需求进行各种系统默认属性的配置,通常这些属性都是通过build.prop、settings.db
那么,要满足客户的定制需求,对于我们开发者来说,修改SettingsProvider默认值,而第一次开机时,用来填充settings.db的数据都是从
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
接下来,我将从我所参与过的项目中,去一点点的记录需要修改的属性都怎么设置。
对于Android手机ODM界的朋友,通读这篇文章后,基本上能完成项目前期70%的适配工作(如果是做MTK平台的话,那更好,可以用来控制的宏变量更加丰富)。
对于带项目的人来说,这些东西都是前期工作必不可少的修改点,对于MMI工程师,手头拿到客户需求类的BUG时 ,这些东西也是能帮助你快速debug的手册。
话不多说,这些小的知识点,都是我在平常的工作中总结出来的,有的是通用的,有的是在特定平台中才会用的到的,仅供各位参考,开阔一下思路而已,这篇博文我会不定时更新,分享更多以后项目中遇到的一些通用参数配置的修改。
1. 去掉“亮度”中的自动调节
第一步、修改frameworks/base/core/res/res/values/config.xml中的
false
第二步、在Marvell1908平台中,没有根据此property来确定“自动”按钮的显示还是隐藏,所以还需在SystemUI中动态确定该CheckBox的显示与否:
BrightnessController.java中添加如下方法
在updateMode()中调用该方法:
private
//
}
updateAutomaticButton(mAutomaticAvailable);
}
在ToggleSlider.java中添加接口:
Tip:
不支持光感设备去掉“自动调节亮度”需要考虑
2. 修改“亮度”的最值、默认值、半暗值
修改frameworks/base/core/res/res/values/config.xml中的
10
255
102
10
3. 修改开机时的默认亮度
修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml中的
4. 修改开关机铃声
开关机动画相关所在路径是在frameworks/base/cmds/bootanimation/中去操作的(不同平台略有不同);
Android设备的铃声资源都是在frameworks/base/data/sounds中
Marvell
#define
#define
#define
#define
用需要替换的开关机铃声overlay
Qualcomm平台是在frameworks/base/cmds/bootanimation/
void
{
//
}
需要将替换的资源overlay下boot.wav
5. 修改Android默认壁纸
Overlay掉frameworks/base/core/res/res/drawable-nodpi/
6. 编译版本时不生成odex
一般odex化是在4.0以后的版本中有的功能,odex化可以使系统的启动和程序运行速度大大提高,稳定性不变。但是编译时生成odex包会大大增加system.img的体积,不利于ota升级,t卡升级,所以在编译时可以去odex。
需要在.mk文件中添加属性:
#remove
DISABLE_DEXPREOPT:=true
7. 修改默认来电铃声、通知铃声
首先需要检查要修改的资源是否在frameworks/base/data/sounds/下的notifications/和ringtones/中,如果没有,需要添加上去,将资源在该目录下的.mk中按照其他的资源的方式添加进去。然后在device下的.mk中添加属性:
ADDITIONAL_BUILD_PROPERTIES
ro.config.ringtone
ro.config.notification_sound=Heaven.ogg
注意,在不同的平台中properties的宏定义可能有所不同,在Marvell中ADDITIONAL_BUILD_PROPERTIES为property的overlay
8. 修改语言列表、默认语言
在.mk中修改属性:
#
PRODUCT_LOCALES
PRODUCT_PROPERTY_OVERRIDES
注意是
:=
+=
?=
在这里就是将这些属性全部覆盖之前的定义。可以看到在这里定义了
9. 修改默认时区
在.mk中添加:
PRODUCT_PROPERTY_OVERRIDES
persist.sys.timezone=
另外还有一种方法:
#set
setprop
直接在底层修改默认时区(如果不熟悉,最好让驱动工程师来修改)
10. 修改开关机动画
与修改开关机铃声一样,开关机动画相关代码都是在frameworks/base/cmds/bootanimation/中,需要我们根据代码去制作动画。
一般在Android设备中,开关机动画都是通过帧动画来实现的。
以Marvell平台为参考:
frameworks/base/cmds/bootanimation/BootAnimation.cpp
#define
#define
//add
#define
#define
所以需要去overlay
1)
2)
3)
4)
5)
desc.txt
我们看一个dest.txt:
320
p
p
320
p
p
最后必须要有回车符,确保指令都已经完成。
6)
需要选择“压缩文件格式”为
需要选择“压缩方式”为“存储”。
制作完成。
11. 修改状态栏透明
状态栏透明的属性是在andorid4.4上面出现的新特性,不过对于状态栏透明效果的设置要求比较高,一般是在运行内存>=512M的设备上才能运行,因为要实现状态栏透明需要硬件加速来配合,不然动画效果十分卡顿。修改状态栏透明需要SystemUI与Launcher配合,才能达到效果。
1)
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java::
public
//
2)
parent="@android:style/Theme.Holo.Wallpaper.NoTitleBar">
在android4.4以后framewok中Theme.xml中增加了以下两个属性节点:
由于Marvell项目中使用的是实体按键,所以就只覆盖了上面那个属性。
3)
}
在Launcher的onCreate方法中使用自定义属性,或者直接在AndroidMainest.xml中通过android:theme=”@style/
12. 去掉桌面上的Google搜索框
一般这个需求是针对使用Google原生启动器Launcher2而言的。因为在Google原生代码里,有显示GoogleSearch的代码,主要是为了显示Google搜索,如果有GoogleVoice还可以显示语音搜索按钮,针对大陆手机来说,Google
第一、去掉Google搜索框
1.
packages/apps/Launcher2/src/com/android/launcher2/Launcher.java::
private
final
ComponentName
if(Build.DEVICE.equals("pxa1L88H3"))
}
if
//
else
}
}
在Launcher2进程启动时,onCreate和onResume中会更新GlobalSearch图标并保存在数组中,上面的修改
if
2.
在packages/apps/Launcher2/res/values/dimens.xml中修改节点
0dp
这样也能保证永不显示Google搜索框
3.
去掉AndroidManifest.xml的下面节点:
比较可取的是1、3这两种方法。
第二、去掉Workspace的占位
主要是微调布局,修改values/dimens.xml,按需修改适当的数值,下面是几个亲测符合ho9021项目4.3寸屏的布局
调整cellLayout的布局+调整ShortcutIcon的间距,使其整体上移
28dp
48dp
18dp
另外还可以通过设置Workspace的高度配合调整ShortcutIcon的间距也能实现:
100dp
13. 在Launcher中隐藏掉某个App
在这里所说的Launcher都是Google原生的Launcher2应用。
修改packages/apps/Launcher2/src/com/android/launcher2/LauncherModel.java::
private
//
apps
}
if
return;
}
//
ResolveInfo
if(null!=
info.activityInfo.packageName.equals("com.android.spare_parts"))
removeApp
}
}
if(null
apps.remove(removeApp);
}
//
N
//
}
上面的代码是在启动器启动时会通过一个List将各个app信息保存起来,然后再添加到桌布上,上面的代码就是遍历获取到的所有的符合条件的app,过滤掉我们不想显示的。当然该代码可以抽取出来成一个方法,或者放入油条包中,抽象成一个static的工具。
那么如果要隐藏掉的app比较多的时候怎么办?
14. 在任务管理器“全部”中去掉某个App
任务管理器是Setting模块下的一个功能,其实也就是“设置—应用程序—全部”。需要修改packages/apps/settings/src/com/android/settings/applications/ManageApplications.java
static
ArrayList
ArrayList
//
if
}
//
}
}
该需求的实现与隐藏掉Launcher中的某个App的逻辑相同。Patch如下:
15. 修改输入法列表、设置默认的输入法
默认输入法是在frameworks/base/packages/SettingsProvider/res/values/defaults.xml中的节点,只需要在.mk中去overlay即可。
com.android.inputmethod.latin/
其中def_enable_input_methods是要显示到输入法列表中的默认输入法,可以看到这个节点中默认的有两个输入法,Android键盘和百度输入法;
def_input_method是默认被选中的那个输入法,可以看到这个节点中默认被选中的输入法是百度输入法。
com.baidu.input
->在AndroidManifest.xml中的
.ImeService
16. 修改默认不锁屏
1.在.mk
2.Overlay
frameworks/base/packages/SettingsProvider/res/values/defaults.xml:
false
因为在frameworks/base/packages/settingsprovider/src/com/android/providers/settings/
如果设置了
17. 设置第一次开机时的默认Launcher
该需求是在Marvell的ho_9021上做的,在9021上除了Google原生Launcher之外,还预置了一个宾果桌面,那么在第一次开机时,由于没有设置preferred
这个需求是在第一次开机时,直接进入默认的Launcher,不弹出选项框,当用户从“设置—应用—全部”,选择正在使用的Launcher,并点击“清除默认设置”;就能去掉Launcher的preferred
该需求修改的前提是系统没有开机向导,使用Android默认的开机向导。在Android源码会有有个packages/apps/Provision模块,很少有人注意到他。
从他的AndroidManifest.xml中从category
下面就步入正题,分析一下怎么设置默认launcher,首先有两个关键点:
1.
2.
ComponentName
pm.setComponentEnabledSetti
这段代码是将Provision
设置默认Luancher:
1.
Tips:
在此处获取系统中Launcher的List时不能使用pckageManager的
getHomeActivities(List
2.
int
for(int
final
final
if(null
resolveInfoList.remove(i);
size
}
i++;
3.
ComponentName[]
ComponentName
"com.ibingo.launcher2.Launcher");
int
for(int
final
final
if(null
continue;
}
set[i]
if(defaultLauncher.getClassName().equals(activityInfo.name))
Slog.d(TAG,
}
4.
IntentFilter
filter.addAction(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
filter.addCategory(Intent.CATEGORY_DEFAULT);
pm.clearPackagePreferredAct
pm.addPreferredActivity(filter,
Slog.d(TAG,
我们可以看到第2、3步骤都是在为PackageManager的addPreferredActivity方法获取参数,主要的设置preferred
Tips:
在整个添加的代码中需要加上try-catch保护
那么我们再来看一下addPreferredActivity这个方法:
Filter是过滤条件,也就是Application中满足filter的参数配置的Activity才会被操作;
Match
Set
Activity
了解了这个方法之后,不仅是默认Launcher,我们同样也可以从满足一定filter条件的Applications中选择一个,设置成默认值。
18. 修改Wifi便携式热点的默认SSID名称
frameworks/base/wifi/java/android/net/wifi/WifiApConfigStore.java中的
setDefaultApConfiguratio
//
config.SSID
//
}
两种方法:
1.
2.
config.SSID
mContext.getString(R.string.wifi_tether_configure_ssid_default));
19. 修改Wifi Direct 的默认名字
1.
2.
DatabaseHelper.java中添加:
loadGlobalSettings(SQLiteDatabase
//
loadSetting(stmt,Settings.Global.WIFI_P2P_DEVICE_NAME,
SystemProperties.get("ro.settings.wifi_p2p_name",""));
//
}
3.
getPersistedDeviceName()
String
//
if
//
}
//
}
一般情况下正常修改,第1第2步就行了,比较规范,如果再添加上第3步的修改,更加保险,逻辑紧密,无懈可击;如果只在第3步的getPersistedDeviceName()
20. 修改WIFI热点中默认网络SSID名称AndroidAP
请修改frameworks/base/core/res/res/values/Strings.xml文件中的如下默认字符:
AndroidAP
修改为需要的字符串;