Android 高通8909 系统之路之裁剪系统 一

   *Android系统之应用裁剪

   *Android系统之服务裁剪

 

此前在MTK6573,6577 做了很多系统裁剪以及部分驱动,接下来对之前MTK经验基础上对高通8909(7.1.1),8905(5.1)进行系统裁剪与定制,开始前记录下 系统定制之路遇到过的坑!

android系统裁剪优化一直是各个厂商定制产品的关键步骤,包括浅层次的去除不必要的apk(android apk裁剪定制 )和深层次的裁剪整个编译系统和框架层.   android作为开源系统,各个产品同质化严重,只有深层次的裁剪定制自己的系统,才能充分体现各自产品的特性,也是优化各自产品的关键步骤,此篇文章主要关注编译系统和框架层的裁剪,抛砖引玉, 还有很多地方可以改进的地方,基于工作中时间限制,没有彻彻底底的进行。

android系统裁减之应用裁减


  android系统大而繁杂,对于不太熟悉android真个框架的朋友可以从简单删除应用入手:
1:   给予原生的代码镜像,adb shell进入单板, 主要是查看/system文件夹的内容,从这个文件夹入手,裁剪不必要的服务,库文件,apk,等等.
2:  了解真个编译系统,从编译过程入手,看隐含的可裁剪项,过程和思路很重要
具体裁剪内容:
1: build/target/product是编译产品关键的mk文件存放处,此处可以更加各个mk文件编译内容进行裁剪
base.mk文件:去除不必要的lib库文件和bin文件
core_minimal.mk:  dmtracedump, Shell, HTMLViewer, screencap等工具和apk等
core.mk:   libnfc_ndef, mms-common  nfc功能库文件和mms短信功能等
embedded.mk:    dumpstate, dumpsys
emulator.mk:     camera.goldfish , camera.goldfish.jpeg , lights.goldfish , gps.goldfish等
full_base.mk:   去除不需要的库和apk
full_base_telephony.mk: 去除apk和电话功能
generic_no_telephony.mk:去除apk和不必要的库
languages_full.mk,locales_full.mk: 去除不需要的语言设置(可以去除res包的大小)
2:
external/icu4c/stubdata/icu-data-default.txt: 修改此文件,去除编译出的icu.dat文件大小,去除不需要的语言,重新用脚本生成想要的dat文件即可
external/skia/Android.mk: 去除其中test的编译
3:
frameworks/base/data/etc/platform.xml: 去除不需要的属性
frameworks/base/data/fonts/Android.mk: 去除不需要的字体
frameworks/base/data/fonts/fallback_fonts.xml: 去除不需要的字体
frameworks/base/data/fonts/fonts.mk: 去除不需要的字体
4:
frameworks/base/data/sounds/AllAudio.mk: 去除不需要的声音文件(除了ui的保留,其他都可以去除)
frameworks/base/data/videos/VideoPackage1.mk: 去除不需要的视频文件
frameworks/native/data/etc/handheld_core_hardware.xml: 去除不需要的属性
frameworks/native/data/etc/tablet_core_hardware.xml:  去除不需要的属性
frameworks/base/preloaded-classes: 裁剪不必要的资源加载
5:
init.rc: 裁剪不需要的本地服务
system.prop: 裁剪不必要的属性内容

以上这些内容可以使得镜像大大的减少,包括参加apk内容,根据实践,镜像减少100M,当然还有可以裁剪的地方,请广大同胞搞点玉出来,我也好学习学习

1,

Andriod 4.0.4系统包 Andriod 4.1.1系统包 说明  
ApplicationsProvider.apk ApplicationsProvider.apk 应用程序存储、 程序管理器(不可删)  
BackupRestoreConfirmation.apk BackupRestoreConfirmation.apk (不能删)  
Bluetooth.apk Bluetooth.apk 蓝牙(不能删,你懂的)  
BooksTablet.apk Books.apk 谷歌读书软件(可删,没用的看书软件,可用GGbook或者其他代替,没啥用,我删了)  
BrowserGoogle.apk BrowserGoogle.apk 自带浏览器(可删,没啥用,我删了,反正我用UC浏览器)  
Calculator.apk Calculator.apk 计算器(可删,鸡肋的计算器,可用其他多功能计算器代替,没啥用,我删了)  
CalendarGoogle.apk CalendarGoogle.apk 日历(可删,鸡肋的日历,我删了,加个中华万年历)  
CalendarProvider.apk CalendarProvider.apk 日历储存(可删,上面删了这个也要删)  
CameraGoogle.apk   相机(不能删,系统自带的好过其他软件,我已经对比过很多照相软件都没自带的好.原生的强大啊!
CertInstaller.apk CertInstaller.apk 证书(不能删)  
ChromeBookmarksSyncAdapter.apk ChromeBookmarksSyncAdapter.apk 书签同步(可删,没啥用,我删了)  
Contacts.apk Contacts.apk 通讯录(不建议删,自带通讯录)  
ContactsProvider.apk ContactsProvider.apk 联系人储存(不建议删,如果用QQ通讯录可直接删掉)  
  Currents.apk 新鲜汇(4.1.1新增,可删,没用过)  
DefaultContainerService.apk DefaultContainerService.apk 软件包访问(不能删,删了不能安装软件了)  
DeskClockGoogle.apk DeskClockGoogle.apk 时钟(可删,可用整点闹钟代替,没啥用,我删了)  
DownloadProvider.apk. DownloadProvider.apk 下载提供(可删,那个下载内容,没啥用,我删了)  
DownloadProviderUi.apk DownloadProviderUi.apk 下载提供UI(可删,没啥用,我删了)  
DrmProvider.apk DrmProvider.apk DRM受保护数据存储服务(不能删)  
EmailGoogle.apk EmailGoogle.apk 电子邮件(可删,没用手机看邮件的可删,可用其他代替)  
ExchangeGoogle.apk Exchange2Google.apk 电子邮件服务(可删,上面删了,这也删)  
FaceLock.apk FaceLock.apk 人脸识别(不能删,删了就不能通过人脸锁屏了)  
GalleryGoogle.apk GalleryGoogle.apk 图库 4.1.1包括了相机(不要删,很强大,很好用)  
GenieWidget.apk GenieWidget.apk 新闻与天气(可删,没用的东西)  
Gmail.apk Gmail.apk 谷歌邮箱(可删,没用谷歌邮箱都可以删,反正我就删了)  
  GmsCore.apk 谷歌PLAY服务(4.1.1新增,可删,不用Google PLAY的可删)  
GoogleBackupTransport.apk GoogleBackupTransport.apk 谷歌备份传输(建议不删,不喜谷歌者或不需要可删,无FC)  
GoogleContactsSyncAdapter.apk GoogleContactsSyncAdapter.apk 谷歌联系人同步适配器(可删,不喜谷歌者或不需要可删,无FC)  
  GoogleEars.apk 歌曲识别功能(可删,不怎么用)  
GoogleEarth.apk GoogleEarth.apk 谷歌地球(可删,没啥用的东西,电脑上用还可以,手机简直无用)  
GoogleFeedback.apk GoogleFeedback.apk 电子市场反馈(可删,不用自带的电子市场就可以删掉这个了,没啥用,反正我就删了)  
GoogleLoginService.apk GoogleLoginService.apk 谷歌账户管理(可删,谷歌帐户,我从不用谷歌帐号的,我删了)  
GooglePartnerSetup.apk GooglePartnerSetup.apk 谷歌合作伙伴(可删,要用谷歌的服务的别删.没啥用,我删了)  
GoogleQuickSearchBox.apk   谷歌搜索(可删,要用谷歌搜索的别删.没啥用,我删了)  
GoogleServicesFramework.apk GoogleServicesFramework.apk 谷歌服务构架(可删,不喜谷歌者或不需要可删,无FC)  
GoogleTTS.apk GoogleTTS.apk 文字转语音(可删,没啥用的东西,反正我就删了)  
HoloSpiralWallpaper.apk HoloSpiralWallpaper.apk 不能删,删了出FC  
HTMLViewer.apk HTMLViewer.apk HTML查看器(可删,没啥用,反正我删了,无FC)  
  InputDevices.apk 4.1.1新增,不能删  
KeyChain.apk KeyChain.apk 密码管理服务, 系统基本组件, 不可卸载(不能删)  
LatinImeDictionaryPack.apk LatinImeDictionaryPack.apk 词典大全(可删.没啥用,,无FC)  
LatinImeGoogle.apk LatinImeGoogle.apk 安卓键盘(可删,没啥用,可百度输入法替代)  
Launcher2.apk Launcher2.apk 启动器(不能删,删了你就没有桌面,也就是用不了了,除非你用其他桌面软件替代
LiveWallpapers.apk LiveWallpapers.apk 动态壁纸(可删,上面删看这个也要删)  
LiveWallpapersPicker.apk LiveWallpapersPicker.apk 动态壁纸选择器(可删,反正我不用动态壁纸的,卡啊!,反正我就删了)  
  Magazines.apk 谷歌杂志(4.1.1新增,可删,没怎么用)  
Map.apk Maps.apk 地图(可删,可用高德地图或者导航替代,没啥用,我删了)  
MediaProvider.apk MediaProvider.apk 媒体储存(不能删,删除后会出现无法设置铃声)  
MediaUploader.apk MediaUploader.apk 上传的内容(可删,不发彩信的可删)  
Microbes.apk   微生物动态壁纸(可删,反正我不用动态壁纸的,我删了)  
Mms.apk Mms.apk 短信(删除后接受不了彩信)  
Music2.apk Music2.apk 音乐(可删,没有天天动听好用,反正我删了)  
MusicFX.apk MusicFX.apk 音乐音效(可删,上面删了,这也删)  
NetworkLocation.apk NetworkLocation.apk 提供网络位置(可删,删除后有时无法定位,GPS好的时候就没影响)
Nfc.apk Nfc.apk 近场通讯(可删,反正也用不上)  
NoiseField.apk NoiseField.apk 动态壁纸(可删,反正我不用动态壁纸的,我删了)  
OneTimeInitializer.apk OneTimeInitializer.apk (建议不删,刷机后第一次启动用到的,现在没啥用了,我删了)
PackageInstaller.apk PackageInstaller.apk 打包安装管理(不能删)  
PhaseBeam.apk PhaseBeam.apk 动态壁纸(可删,反正我不用动态壁纸的,我删了)  
Phone.apk Phone.apk 手机拨号器(不能删)  
Phoneskyapk Phonesky.apk Google play电子市场(可删,反正不用电子市场,删了就不能从google play上下载软件了)  
PlusOne.apk PlusOne.apk google+社区软件(可删,没啥用,我删了)  
Settings.apk Settings.apk 设置(不能删)  
SettingsProvider.apk SettingsProvider.apk 设置储存(不能删)  
SetupWizard.apk SetupWizard.apk 设置向导(不建议删,如果删了,在恢复出厂值开机的时候进不去)
SharedStorageBackup.apk SharedStorageBackup.apk 共享存储备份(不能删)  
SoundRecorder.apk SoundRecorder.apk 录音机(建议不删,不用的可删)  
Stk.apx Stk.apk SIM卡管理程序(不可删)  
Street.apk Street.apk 谷歌街景(可删,没啥用,我删了,大把软件替代)  
Superuser.apk Superuser.apk Root后才有的(当然不能删)  
SystemUI.apk SystemUI.apk 系统用户界面(不能删)  
TagGoogle.apk TagGoogle.apk NFC标记(建议不删,删了NFC功能不能用)  
Talk.apk Talk.apk 谷歌talk(可删,没啥用,反正我就删了)  
Talkback.apk talkback.apk 盲人辅助(可删,在辅助功能里的,没啥用,反正我就删了)  
TelephonyProvider.apk TelephonyProvider.apk 电话信息储存(不能删)  
Thinkfree.apk Thinkfree.apk 文档软件(可删,没啥用,用其他文档软件可替代)  
UserDictionaryProvider.apk UserDictionaryProvider.apk 我的字典(不能删,删了这个设置语言和输入法的时候会出现FC)
  Velvet.apk 谷歌搜索(4.1.1新增,可删,要用谷歌搜索的别删)  
VideoEditorGoogle.apk VideoEditorGoogle.apk 电影(可删,没啥用,反正我就删了)  
Videos.apk Videos.apk 视频(可删,没啥用,反正我就删了)  
VisualizationWallpapers.apk VisualizationWallpapers.apk 可视化壁纸(可删,反正我不用动态壁纸的,我删了)  
VoiceDialer.apk   语音拨号器(可删,语音?那不如那国产山寨机哦,识别速度慢死了,有后天进程,我删了)  
VoiceSearch.apk   语音搜索(可删,理由同上)  
  VoiceSearchStub.apk 语音搜索(4.1.1改名了 不用语音搜索的可删)  
v*p*nDialogs.apk v*p*nDialogs.apk v*p*n连接上网管理(不可删)  
YouTube.apk YouTube.apk (可删,国内都用不了,都被封了,建议都删)  

3,

序号 不可以删除(15项)
1 AccountAndSyncSettings.apk 同步与帐户设定
2 ApplicationsProvider.apk 应用程序支持服务
3 CertInstaller.apk 证书服务
4 ContactsProvider.apk 通讯录/联系人数据存储服务
5 DefaultContainerService.apk 默认通讯录服务
6 DownloadProvider.apk 下载管理器
7 DrmProvider.apk DRM 受保护数据存储服务
8 googlevoice.apk 这个是电话和短信功能
9 MediaProvider.apk 媒体数据存储服务
10 MtkBt.apk 全球卫星定位系统接收器
11 PackageInstaller.apk 程序安装
12 Phone.apk 电话拨号程序
13 Settings.apk 系统设置
14 SettingsProvider.apk 设置服务程序
15 TelephonyProvider.apk 拨号记录存储服务
建议保留(23项)
1 AcwfDialog.APK 
2 apkCompassCH.apk 超级指南针(建议保留)
3 Bluetooth.apk 蓝牙(删了就没有蓝牙了)建议保留 
4 Calculator.apk 计算器(自带计算器较弱,可用其他替代) 
5 Camera.apk 自带相机(用360的可删) 
6 Contacts.apk 通讯录/联系人(用第三方通讯录的可删) 
7 DataDialog.apk 数据对话框 不确定,没删 
8 DeskClock.apk 自带闹钟(用第三方闹钟的可删) 
9 EngineerMode.apk 工程师模式 不确定,没删 
10 ES_filemanager.apk 资源浏览器(建议保留) 
11 fmradio.apk 收音机(可删) 
12 Gallery3D.apk 相机相框 (可删) 
13 GoLauncher.apk 桌面 
14 Mms.apk 自带信息(可删,用第三方短信的就删了吧,提示:删了后,用handsms的的弹出短信框会变得延时,chomp没自带短信甚至不能使用) 
15 Music.apk 自带音乐(可删,换成其他播放器) 
16 Provision.apk 开机引导程序 
17 SetupWizard.apk 开机引导(在定制rom时不可删,刷好机可用rootexplorer删掉,恢复出厂前要装回去) 
18 SoundRecorder.apk 录音机(可用第三方录音软件替代) 
19 Stk.apk s卡服务(可删,有机油把联系人复制在s卡上的就不要删它,删了可解决信号问题) 
20 Superuser.apk 授权程序(就是程序列表上面那个,用这个获取root才有的) 
21 Term.apk 访问终端的 
22 VolumeControl.apk 音量控制中心 
23 YGPS.apk 这个应该和GPS有关吧
可删除(57项)
1 Browser.apk 谷歌浏览器(喜欢UC的可用UC替代) 
2 Calendar.apk 日历(不用日历的可删) 
3 CalendarProvider.apk 日历程序支持服务(不用日历的可删) 
4 ChtPack.apk touchpal输入法注音语言包(从来不用注音的删) 
5 Email.apk Email(不用自带email接受邮件的可删) 
6 facebook.apk facebook(用不到的删) 
7 GenieWidget.apk 天气与新闻(我自己不用他看新闻,删了) 
8 Gmail.apk Gmail邮件(可删) 
9 GoogleBackupTransport.apk 谷歌备份(可删) 
10 GoogleCalendarSyncAdapter.apk 谷歌日历同步适配器(可删) 
11 GoogleContactsSyncAdapter.apk 谷歌联系人同步适配器(可删) 
12 GoogleFeedback.apk 谷歌反馈(可删) 
13 GooglePartnerSetup.apk 谷歌合作伙伴设置(可删) 
14 GoogleQuickSearchBox.apk 谷歌搜索(删了影响到桌面的搜索插件) 
15 GoogleServicesFramework.apk 谷歌同步支持服务框架(删了不能同步联系人,不能登录google) 
16 HTMLViewer.apk HTML浏览器(本地看html,用不到可删) 
17 HWCalla_TaiWan.apk 繁体中文手写输入法(可写简体的,不用手写的可删) 
18 KaiXinAccountService.apk 未知程序,没敢删 
19 LatinIME.apk android键盘输入法(可删) 
20 LatinImeGoogle.apk 未知程序,没敢删 输入法谷歌,换百度输入了,删 
21 LatinImeTutorial.apk android键盘输入法设置(可删) 
22 Launcher2.apk 2.2原生桌面(用ADW和PRO的可删,删了以后第三方桌面要在开机以后从电脑安装,91,豌豆助手都可) 
23 LiveWallpapers.apk 动态壁纸 
24 LiveWallpapersPicker.apk 同上动态壁纸(可删) 
25 LiveWalls.apk 动态壁纸(可删) 
26 MagicSmokeWallpapers.apk 魔术烟雾壁纸 
27 Maps.apk Google地图(可删,自行换成brust版本) 
28 MarketUpdater.apk 谷歌市场升级(软件更新用到,可删) 
29 MediaUploader.apk 媒体上传(可删) 
30 MMITest_II.apk 工程模式里用到的手机测试程序(可删) 
31 NetworkLocation.apk 网络位置(可删) 
32 NotePad.apk 记事本(可删) 
33 OneTimeInitiaLizer.apk 首次启动时用来装 Google Apps 的,可删除 
34 PicoTts.apk 可删(文字语言转换的语音合成引擎,设置-语音输入与输出中) 
35 PingYinIME.apk 拼音输入法 
36 ProjectMenuAct.apk 工程菜单 
37 Protips.apk 桌面小绿人插件(可删,就是有提示怎么玩手机) 
38 RenRenAccountService.apk 
39 SNSCommon.apk 常见的SNS,不需要,删 
40 SnsContentProvider.apk SnS的内容提供商,删 
41 SnsWidget.apk SnS的小工具,删 
42 SnsWidget24.apk SnS社区,删 
43 Soundback.apk 辅助功能 删 
44 Street.apk 谷歌街道(可删,对于国内街道无效果的貌似,与地图关联) 
45 Talk.apk 谷歌talk(可删,但删了就用不了电子市场) 
46 Talkback.apk 辅助功能 删 
47 TouchPal.apk TouchPal输入法(可删,但自带的三种输入法最好至少保留一种) 
48 TtsService.apk Google TTS(Text-to-speech)语音库服务(可删) 
49 TwidroydFree342-Huawei-rev1.apk twitter客户端(不用的删了) 
50 Updataonline.apk 在线升级(可删) 
51 UserDictionaryProvider.apk 用户数据字典服务(可删) 
52 Vending.apk 电子市场(可删,不过不建议,很多软件的自动升级时候有它很方便) 
53 VisualizationWalls.apk 动态音乐背景壁纸 (删了) 
54 VoiceSearch.apk 语音搜索(可删,虽然看上去很美好,事实上我从未用过) 
55 VpnServices.apk VPN服务(vpn服务,可删) 
56 YouTube.apk YouTube视频(要vpn才能看,删了) 
57 zhuyincangjieIME.apk 注音仓颉输入法,用百度了,删
注:转自网络,特供参考。

android系统裁减之服务裁减

android系统服务分本地(native)服务和java服务。

1、本地(native)服务裁减

很明显:本地(native)服务是基于C/C++实现的,本地服务的启动都在init.rc中通过脚本的方式控制,如surfaceflinger这个服务的启动,

service surfaceflinger /system/bin/surfaceflingerclass coreuser systemgroup graphics drmrpconrestart restart zygote

本地(native)服务由ServiceManager注册和管理,如下所示:

sp<IServiceManager> sm(defaultServiceManager);
sm->addService(String16(SurfaceFlinger::getServiceName), flinger, false);

所以对于本地服务的裁减其实只要将相应的服务从init.rc中删除,同时屏蔽掉相应的源码即可。

2、java服务裁减

系统中大部分的服务都以java服务的方法存在,可以在adb shell下通过如下命令查看有哪些服务在后台运行:

<strong>service list</strong>

java服务大部分都在frameworks/base/services/java/com/android/server/SystemServer.java中进行添加,在这里有如下几个方法:

startBootstrapServices:在这里启动了一些系统启动依赖的服务,如:InstallerService、ActivityManagerService、PowerManagerService等等。

startCoreServices:在这里启动了一些如:LightsService、BatteryService、WebViewUpdateService等

startOtherServices:这里启动的服务就比较多了,系统开机耗时也主要在这里,如:TelephonyRegistry、AccountManagerService、VibratorService、FingerprintService、LauncherAppsService等。

所有的java服务都通过ServiceManager注册和管理,对于要裁减掉的java服务,只需要在这里不让其注册就可以了,但对于系统依赖度很高的一些服务,像TelephonyRegistry,单纯的不让其注册是行不通的,系统启动之后会报错误,需要另行处理(后面再说)。

对于一些系统依赖不是很高的服务,可简单的通过如下方法裁减掉,如VibratorService

boolean disableVibrator = SystemProperties.getBoolean("config.disable_vibrator", false);if(!disableVibrator){Slog.i(TAG, "Vibrator Service");<pre name="code" class="plain">service check vibrator

vibrator = new VibratorService(context); ServiceManager.addService("vibrator", vibrator); }然后在对应的vendor中加入如下properties属性值即可,

#Xandy add only for system service config
PRODUCT_PROPERTY_OVERRIDES += \config.disable_vibrator = true

删掉system目录下的build.prop,重新编译system,烧录启动系统之后,运行如下命令

service check vibrator

得到如下提示:

<strong>service check vibrator
Service vibrator: not found</strong>

ANDROID修改源代码控制永不锁屏

锁定屏幕对于移动终端来说是非常有必要的,但是对于机顶盒产品就没有这个必要了。所以本文介绍一下怎样让Android设备永不锁屏。
Android系统的锁屏时间存放在Setting数据库中,字段为Settings.System.SCREEN_OFF_TIMEOUT。查看SettingsProvider源码,查看如下文件的源码:
frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java

查看loadSystemSettings()函数的代码如下:
private void loadSystemSettings(SQLiteDatabase db) {
        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
                + " VALUES(?,?);");

Resources r = mContext.getResources();

loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
                R.bool.def_dim_screen);
        loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,
                "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0);
        loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
                R.integer.def_screen_off_timeout);

// Set default cdma emergency tone
        loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);

// Set default cdma call auto retry
        loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);

// Set default cdma DTMF type
        loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);

// Set default hearing aid
        loadSetting(stmt, Settings.System.HEARING_AID, 0);

// Set default tty mode
        loadSetting(stmt, Settings.System.TTY_MODE, 0);

loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,
                R.bool.def_airplane_mode_on);

loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,
                R.string.def_airplane_mode_radios);

loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
                R.string.airplane_mode_toggleable_radios);

loadBooleanSetting(stmt, Settings.System.AUTO_TIME,
                R.bool.def_auto_time); // Sync time to NITZ

loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
                R.integer.def_screen_brightness);

loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
                R.bool.def_screen_brightness_automatic_mode);

loadDefaultAnimationSettings(stmt);

loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
                R.bool.def_accelerometer_rotation);

loadDefaultHapticSettings(stmt);

stmt.close();
    }
从 代码中我们可以看出,假如 Settings.System.SCREEN_OFF_TIMEOUT没有初始化的话(系统首次启动,这个字段肯定是没有初 始化的),将会利用资源中的R.integer.def_screen_off_timeout来初始化。我们为了让系统永不锁屏,只需要把资源 R.integer.def_screen_off_timeout设为-1即可。查看文件
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
可以找到R.integer.def_screen_off_timeout的定义。
<integer name="def_screen_off_timeout">60000</integer>
发现默认值为60000ms,也就是60s。我们只需要把这个参数改为-1。然后重新编译SettingsProvider模块,就OK了。
另外为了防止用户进入系统后,修改锁屏时间,在Setting模块中删除对锁屏时间的设置。这样Android设备就永不锁屏了。
后来发现我的Android设备烧录好之后第一次启动永远不会锁屏,但是设备重启之后开机就进入锁屏状态,解锁之后就再也不会锁屏了(因为永远不超时)。看来“革命尚未成功,同志仍需努力”啊。
那么为什么启动之后没有进入锁屏状态呢?是不会系统有把超时锁屏的值给修改了呢?我通过sqlite3去查看settings.db的内容,发现超时锁屏的值仍然是-1。说明启动之后,系统并没有去数据库中查看屏幕超时锁屏的值,就直接锁屏了。
但是怎样才能开机之后不进入锁屏状态呢?这个是个非常费思量的问题。经过go,我知道锁屏的代码在LockScreen.java中,然后顺藤摸瓜,终于找到了可以设置锁屏功能开关的位置。代码位于:
frameworks/policies/base/phone/com/Android/internal/policy/impl/KeyguardViewMediator.java
该文件中有一个变量定义如下:
    /**
     * External apps (like the phone app) can tell us to disable the keygaurd.
     */
    private boolean mExternallyEnabled = true;
mExternallyEnabled是用来管理是否开启屏幕锁的关键。默认值是打开屏锁,根据注释可以知道他是希望应用程序来修改这个值。但是经过加打印信息发现开机的时候没有任何应用程序会修改它。修改这个值调用如下函数:
   /**
     * Same semantics as {@link WindowManagerPolicy#enableKeyguard}; provide
     * a way for external stuff to override normal keyguard behavior. For instance
     * the phone app disables the keyguard when it receives incoming calls.
     */
    public void setKeyguardEnabled(boolean enabled) {
        synchronized (this) {
            if (DEBUG) Log.d(TAG, "setKeyguardEnabled(" + enabled + ")");

mExternallyEnabled = enabled;

if (!enabled && mShowing) {
                if (mExitSecureCallback != null) {
                    if (DEBUG) Log.d(TAG, "in process of verifyUnlock request, ignoring");
                    // we're in the process of handling a request to verify the user
                    // can get past the keyguard. ignore extraneous requests to disable / reenable
                    return;
                }

// hiding keyguard that is showing, remember to reshow later
                if (DEBUG) Log.d(TAG, "remembering to reshow, hiding keyguard, "
                        + "disabling status bar expansion");
                mNeedToReshowWhenReenabled = true;
                hideLocked();
            } else if (enabled && mNeedToReshowWhenReenabled) {
                // reenabled after previously hidden, reshow
                if (DEBUG) Log.d(TAG, "previously hidden, reshowing, reenabling "
                        + "status bar expansion");
                mNeedToReshowWhenReenabled = false;

if (mExitSecureCallback != null) {
                    if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting");
                    mExitSecureCallback.onKeyguardExitResult(false);
                    mExitSecureCallback = null;
                    resetStateLocked();
                } else {
                    showLocked();

// block until we know the keygaurd is done drawing (and post a message
                    // to unblock us after a timeout so we don't risk blocking too long
                    // and causing an ANR).
                    mWaitingUntilKeyguardVisible = true;
                    mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_DRAWING, KEYGUARD_DONE_DRAWING_TIMEOUT_MS);
                    if (DEBUG) Log.d(TAG, "waiting until mWaitingUntilKeyguardVisible is false");
                    while (mWaitingUntilKeyguardVisible) {
                        try {
                            wait();
                        } catch (InterruptedException e) {
                            Thread.currentThread().interrupt();
                        }
                    }
                    if (DEBUG) Log.d(TAG, "done waiting for mWaitingUntilKeyguardVisible");
                }
            }
        }
    }
经过上面的讨论我们可以发现我们有两个解决方法:
1、定义变量的时候,给其初始化为false。
2、在launcher模块启动的时候,调用setKeyguardEnabled方法,关闭锁屏功能。
我懒得修改Laucher模块,我的解决方法就是在定义mExternallyEnabled时修改其初始值为false。各位朋友可以根据自己的实际情况选择解决方案。我的代码如下:
   /**
     * External apps (like the phone app) can tell us to disable the keygaurd.
     */
    private boolean mExternallyEnabled = false;
这样修改之后,Android设备开机之后,默认不会进入锁屏状态,除非你在应用程序中调用setKeyguardEnabled方法显示打开这个功能。因为设置的超时时间为-1,则永远也不会进入锁屏界面。完全满足了我的需求,终于大功告成了。开心啊~!!

/**********************************************************************************************/

修改Settings源码,可修改系统设置项,Settings数据被存放于com.android.providers.settings/databases/settings.db中,如果想修改系统启动后加载的默认值

一种方法是直接修改settings.db的值,另一种就是修改SettingsProvider默认值,Settings应用能够配置Android系统的各种设置,这些设置的默认值都是由frameworks中的SettingsProvider从数据库中读取的,那么第一次开机的时候这些数据都是从哪儿来的呢?

frameworks/base/packages/SettingsProvider/res/values/defaults.xml这个文件就是用来存储Android系统的默认设置

例如:
<integername="def_screen_off_timeout">600000</integer>设置关屏超时时间的默认值
<integername="def_screen_brightness">102</integer>设置亮度的默认值

<boolname="def_install_non_market_apps">false</bool>设置是否允许安装非Market应用程序的默认值

如果想定义defaults.xml中没有的,在这里添加后,需修改frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java,加入自己的存储代码。

来电铃声:SD卡ringtones文件下, 支持音频文件(MP3、wav、ogg等格式)。
通知铃声:SD卡notifications,支持音频文件(MP3、wav、ogg等格式)。
闹钟铃声:SD卡alarms,支持音频文件(MP3、wav、ogg等格式)。
 附:系统自带铃声文件位置
      来电铃声:/system/media/audio/ringtones
      通知铃声:/system/media/audio/notifications
      闹钟铃声:/system/media/audio/alarms
      界面操作事件音:/system/media/audio/ui

转:

http://www.cnblogs.com/sardine

/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg
/packages/wallpapers/Basic/src/com/android/wallpaper/nexus/NexusWallpaper.java
/frameworks/base/core/res/res/values/config.xml/mediatek/config/xxx/ProjectConfig.mk
BOOT_LOGO = wvga

开关机和关机充电图
/mediatek/custom/common/uboot/logo/wvga

/packages/apps/Launcher2/res/values/wallpapers.xml
/packages/apps/Launcher2/res/drawable-mdpi/wallpaper_architecture.jpg
/packages/apps/Launcher2/res/drawable-mdpi/wallpaper_architecture_small.jpg
Launcher2 里面预置桌面上的 Item
/packages/apps/Launcher2/res/xml/default_workspace.xml

铃声位置
/frameworks/base/data/sounds/newwavelabs/Backroad.ogg

Android 高通8909 系统之路之 裁剪系统 一相关推荐

  1. 高通ims架构android,深度揭密高通4/5G移动基带消息系统和状态机

    背景 本技术分析文章通过对高通的4/5G移动基带系统进行深入逆向工程提示其内部消息通信机制以及核心架构设计逻辑,本文的研究基于高通的4G基带MDM9707以及5G基带模块sdx55的固件之上分析完成, ...

  2. android高通i2c/cci控制没有寄存器地址的马达/设备

    android高通i2c/cci控制没有寄存器地址的马达/设备 如何控制没有寄存器地址的i2c/cci马达. 控制原理很简单,两种情况, 其一,如果是i2c就不发送地址只发送数据. 其二,如果是cci ...

  3. 高通410 随身WIFI刷入Debian系统(玩法合集)

    引言 刚接触到这个项目是在b站上,刷到一位UP主的视频:https://b23.tv/xAFWiTF 其实现了在搭载高通410芯片的随身WIFI烧录linux系统,并在上面部署了chatGPT-Nex ...

  4. 845透色android10,高通845芯片配合安卓9.0系统完美无瑕,苹果A11和iOS都要望尘莫及...

    要是安卓9.0和高通845一起配合怎么样是不是非常完美了,苹果IOS11配合苹果A11可能都要肉肉到底 目前已经有三星,华为,索尼,HTC,诺基亚等手机厂商集成了Project Treble模式,相信 ...

  5. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  6. 切换基站+android+高通,你以为手机信号不好只是基站问题,高通骁龙modem也能解决你的信号难题...

    如今手机内部结构越来越复杂,个中包含的芯片数量不比当年的台式电脑差多少.但是不少用户在遇见手机信号差.甚至手机没信号等问题时,第一时间还是想到把问题推给运营商. 你以为运营商辛苦架设的基站应该为信号不 ...

  7. TM034XVZP01 mipi屏 高通8909平台lk和kernel驱动 基于ili9881驱动

    效果图如上. 所需的时序文件链接 https://download.csdn.net/download/jxhln/11120468 大家可以下载参考 上述是最终的成果,该文章只着重讲述lk阶段的调试 ...

  8. android 高通分区表,高通msm8994平台的NV到底是储存在哪个分区?

    网上有人说是Modemst1,modemst2,但是实际上这只是两个缓存分区,fsg是所谓的golden backup,我wipe掉这三个分区,开机用qpst依然能备份出来正常的NV,有没有真的做平台 ...

  9. 高通ar android,高通AR 入门

    做增强现实开发少不了SDK,考虑到有些人还不知道怎么利用SDK去做开发,为此,下面就给大家介绍下AR增强现实的开发流程,希望能帮到大家. 本次使用的SDk是vuforia-unity-android- ...

  10. 浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

最新文章

  1. 有多少可爱IT精英,他们的爱情屡屡“挨踢”
  2. BCH涨幅超过146%,势必跟BTC争夺王位?
  3. python在excel中的应用-python中的excel操作
  4. Windows10安装并使用Unity3D项目AirSim教程(附问题解决方案及相关库下载)
  5. jQuery实现新浪微博自动底部加载的方法
  6. PHP session有效期session.gc_maxlifetime
  7. LeetCode 1305. 两棵二叉搜索树中的所有元素(二叉树迭代器)
  8. Springboot 启动时Bean初始化,启动异常-Assert.isTrue(condition,message) 报错
  9. 【C++11】新特性——auto的使用
  10. 【前端成长-读书群】
  11. 36.windbg-!peb(手工分析PEB结构)
  12. bzoj5369loj6433 [Pkusc2018]最大前缀和
  13. 解析Google地图的Search接口返回的f.txt文件数据(其他类似)
  14. 【IPD从零到一】创业指导:IPD 是什么?
  15. IDEA运行卡顿,网页刷新不及时,网页报404错误以及Ajax收不到servlet返回的数据(已解决)
  16. 人机交互软件又添新成员,CarLink认证流程详解
  17. 数据分析 | R语言绘制中国地图
  18. S32DS中.ld(链接)文件学习
  19. 【数据结构】两栈共享空间的进一步理解
  20. dva和UmiJs结合使用教程:effects,reducer,dispatch

热门文章

  1. Exception processing template “xxx“: An error happened during tem
  2. CSDN公式插入——关于对数
  3. 【跨境电商】EDM邮件营销完整指南(二):如何开展EDM营销活动
  4. c语言中int sel是什么意思,SEL数据类型,@selector的用法,以及调用SEL
  5. 在excel中如何输入身份证号码
  6. 华东师范大学2020计算机研究生招生简章,2020华东师范大学计算机考研大纲
  7. python爬虫大作业
  8. 18款表白源码,搭建网站必备,总有一款适合你
  9. 纯干货:微软漏洞中国第一人黄正——如何用正确姿势挖掘浏览器漏洞(附完整 PPT)
  10. 如何在linux下安装驱动程序,如何在Linux上安装设备驱动程序