赞
踩
Android 高通8909 系统之路之裁剪系统 一
*Android系统之应用裁剪
*Android系统之服务裁剪
此前在MTK6573,6577 做了很多系统裁剪以及部分驱动,接下来对之前MTK经验基础上对高通8909(7.1.1),8905(5.1)进行系统裁剪与定制,开始前记录下 系统定制之路遇到过的坑!
android系统裁剪优化一直是各个厂商定制产品的关键步骤,包括浅层次的去除不必要的apk(android apk裁剪定制 )和深层次的裁剪整个编译系统和框架层. 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,
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注册和管理,如下所示:
- 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
#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>
/**********************************************************************************************/
修改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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。