当前位置:   article > 正文

Android 高通8909 系统之路之 裁剪系统 一_高通平台系统裁剪

高通平台系统裁剪

           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.apkApplicationsProvider.apk应用程序存储、 程序管理器(不可删) 
BackupRestoreConfirmation.apkBackupRestoreConfirmation.apk(不能删) 
Bluetooth.apkBluetooth.apk蓝牙(不能删,你懂的) 
BooksTablet.apkBooks.apk谷歌读书软件(可删,没用的看书软件,可用GGbook或者其他代替,没啥用,我删了) 
BrowserGoogle.apkBrowserGoogle.apk自带浏览器(可删,没啥用,我删了,反正我用UC浏览器) 
Calculator.apkCalculator.apk计算器(可删,鸡肋的计算器,可用其他多功能计算器代替,没啥用,我删了) 
CalendarGoogle.apkCalendarGoogle.apk日历(可删,鸡肋的日历,我删了,加个中华万年历) 
CalendarProvider.apkCalendarProvider.apk日历储存(可删,上面删了这个也要删) 
CameraGoogle.apk 相机(不能删,系统自带的好过其他软件,我已经对比过很多照相软件都没自带的好.原生的强大啊!
CertInstaller.apkCertInstaller.apk证书(不能删) 
ChromeBookmarksSyncAdapter.apkChromeBookmarksSyncAdapter.apk书签同步(可删,没啥用,我删了) 
Contacts.apkContacts.apk通讯录(不建议删,自带通讯录) 
ContactsProvider.apkContactsProvider.apk联系人储存(不建议删,如果用QQ通讯录可直接删掉) 
 Currents.apk新鲜汇(4.1.1新增,可删,没用过) 
DefaultContainerService.apkDefaultContainerService.apk软件包访问(不能删,删了不能安装软件了) 
DeskClockGoogle.apkDeskClockGoogle.apk时钟(可删,可用整点闹钟代替,没啥用,我删了) 
DownloadProvider.apk.DownloadProvider.apk下载提供(可删,那个下载内容,没啥用,我删了) 
DownloadProviderUi.apkDownloadProviderUi.apk下载提供UI(可删,没啥用,我删了) 
DrmProvider.apkDrmProvider.apkDRM受保护数据存储服务(不能删) 
EmailGoogle.apkEmailGoogle.apk电子邮件(可删,没用手机看邮件的可删,可用其他代替) 
ExchangeGoogle.apkExchange2Google.apk电子邮件服务(可删,上面删了,这也删) 
FaceLock.apkFaceLock.apk人脸识别(不能删,删了就不能通过人脸锁屏了) 
GalleryGoogle.apkGalleryGoogle.apk图库 4.1.1包括了相机(不要删,很强大,很好用) 
GenieWidget.apkGenieWidget.apk新闻与天气(可删,没用的东西) 
Gmail.apkGmail.apk谷歌邮箱(可删,没用谷歌邮箱都可以删,反正我就删了) 
 GmsCore.apk谷歌PLAY服务(4.1.1新增,可删,不用Google PLAY的可删) 
GoogleBackupTransport.apkGoogleBackupTransport.apk谷歌备份传输(建议不删,不喜谷歌者或不需要可删,无FC) 
GoogleContactsSyncAdapter.apkGoogleContactsSyncAdapter.apk谷歌联系人同步适配器(可删,不喜谷歌者或不需要可删,无FC) 
 GoogleEars.apk歌曲识别功能(可删,不怎么用) 
GoogleEarth.apkGoogleEarth.apk谷歌地球(可删,没啥用的东西,电脑上用还可以,手机简直无用) 
GoogleFeedback.apkGoogleFeedback.apk电子市场反馈(可删,不用自带的电子市场就可以删掉这个了,没啥用,反正我就删了) 
GoogleLoginService.apkGoogleLoginService.apk谷歌账户管理(可删,谷歌帐户,我从不用谷歌帐号的,我删了) 
GooglePartnerSetup.apkGooglePartnerSetup.apk谷歌合作伙伴(可删,要用谷歌的服务的别删.没啥用,我删了) 
GoogleQuickSearchBox.apk 谷歌搜索(可删,要用谷歌搜索的别删.没啥用,我删了) 
GoogleServicesFramework.apkGoogleServicesFramework.apk谷歌服务构架(可删,不喜谷歌者或不需要可删,无FC) 
GoogleTTS.apkGoogleTTS.apk文字转语音(可删,没啥用的东西,反正我就删了) 
HoloSpiralWallpaper.apkHoloSpiralWallpaper.apk不能删,删了出FC 
HTMLViewer.apkHTMLViewer.apkHTML查看器(可删,没啥用,反正我删了,无FC) 
 InputDevices.apk4.1.1新增,不能删 
KeyChain.apkKeyChain.apk密码管理服务, 系统基本组件, 不可卸载(不能删) 
LatinImeDictionaryPack.apkLatinImeDictionaryPack.apk词典大全(可删.没啥用,,无FC) 
LatinImeGoogle.apkLatinImeGoogle.apk安卓键盘(可删,没啥用,可百度输入法替代) 
Launcher2.apkLauncher2.apk启动器(不能删,删了你就没有桌面,也就是用不了了,除非你用其他桌面软件替代
LiveWallpapers.apkLiveWallpapers.apk动态壁纸(可删,上面删看这个也要删) 
LiveWallpapersPicker.apkLiveWallpapersPicker.apk动态壁纸选择器(可删,反正我不用动态壁纸的,卡啊!,反正我就删了) 
 Magazines.apk谷歌杂志(4.1.1新增,可删,没怎么用) 
Map.apkMaps.apk地图(可删,可用高德地图或者导航替代,没啥用,我删了) 
MediaProvider.apkMediaProvider.apk媒体储存(不能删,删除后会出现无法设置铃声) 
MediaUploader.apkMediaUploader.apk上传的内容(可删,不发彩信的可删) 
Microbes.apk 微生物动态壁纸(可删,反正我不用动态壁纸的,我删了) 
Mms.apkMms.apk短信(删除后接受不了彩信) 
Music2.apkMusic2.apk音乐(可删,没有天天动听好用,反正我删了) 
MusicFX.apkMusicFX.apk音乐音效(可删,上面删了,这也删) 
NetworkLocation.apkNetworkLocation.apk提供网络位置(可删,删除后有时无法定位,GPS好的时候就没影响)
Nfc.apkNfc.apk近场通讯(可删,反正也用不上) 
NoiseField.apkNoiseField.apk动态壁纸(可删,反正我不用动态壁纸的,我删了) 
OneTimeInitializer.apkOneTimeInitializer.apk(建议不删,刷机后第一次启动用到的,现在没啥用了,我删了)
PackageInstaller.apkPackageInstaller.apk打包安装管理(不能删) 
PhaseBeam.apkPhaseBeam.apk动态壁纸(可删,反正我不用动态壁纸的,我删了) 
Phone.apkPhone.apk手机拨号器(不能删) 
PhoneskyapkPhonesky.apkGoogle play电子市场(可删,反正不用电子市场,删了就不能从google play上下载软件了) 
PlusOne.apkPlusOne.apkgoogle+社区软件(可删,没啥用,我删了) 
Settings.apkSettings.apk设置(不能删) 
SettingsProvider.apkSettingsProvider.apk设置储存(不能删) 
SetupWizard.apkSetupWizard.apk设置向导(不建议删,如果删了,在恢复出厂值开机的时候进不去)
SharedStorageBackup.apkSharedStorageBackup.apk共享存储备份(不能删) 
SoundRecorder.apkSoundRecorder.apk录音机(建议不删,不用的可删) 
Stk.apxStk.apkSIM卡管理程序(不可删) 
Street.apkStreet.apk谷歌街景(可删,没啥用,我删了,大把软件替代) 
Superuser.apkSuperuser.apkRoot后才有的(当然不能删) 
SystemUI.apkSystemUI.apk系统用户界面(不能删) 
TagGoogle.apkTagGoogle.apkNFC标记(建议不删,删了NFC功能不能用) 
Talk.apkTalk.apk谷歌talk(可删,没啥用,反正我就删了) 
Talkback.apktalkback.apk盲人辅助(可删,在辅助功能里的,没啥用,反正我就删了) 
TelephonyProvider.apkTelephonyProvider.apk电话信息储存(不能删) 
Thinkfree.apkThinkfree.apk文档软件(可删,没啥用,用其他文档软件可替代) 
UserDictionaryProvider.apkUserDictionaryProvider.apk我的字典(不能删,删了这个设置语言和输入法的时候会出现FC)
 Velvet.apk谷歌搜索(4.1.1新增,可删,要用谷歌搜索的别删) 
VideoEditorGoogle.apkVideoEditorGoogle.apk电影(可删,没啥用,反正我就删了) 
Videos.apkVideos.apk视频(可删,没啥用,反正我就删了) 
VisualizationWallpapers.apkVisualizationWallpapers.apk可视化壁纸(可删,反正我不用动态壁纸的,我删了) 
VoiceDialer.apk 语音拨号器(可删,语音?那不如那国产山寨机哦,识别速度慢死了,有后天进程,我删了) 
VoiceSearch.apk 语音搜索(可删,理由同上) 
 VoiceSearchStub.apk语音搜索(4.1.1改名了 不用语音搜索的可删) 
v*p*nDialogs.apkv*p*nDialogs.apkv*p*n连接上网管理(不可删) 
YouTube.apkYouTube.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/surfaceflinger
            class core
            user system
            group graphics drmrpc
            onrestart restart zygote
本地(native)服务由ServiceManager注册和管理,如下所示:

  1. sp<IServiceManager> sm(defaultServiceManager);
  2. 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

  1. boolean disableVibrator = SystemProperties.getBoolean("config.disable_vibrator", false);
  2. if(!disableVibrator){
  3. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/228021
推荐阅读
相关标签
  

闽ICP备14008679号