系统精简归总
【系统精简归总】
文章目录
- 1. 前言
- 2. apk的裁剪
- 3. 服务的裁剪
- 4. 运行库的裁剪
- 5. 硬件抽象层的裁剪
- 6. 补充裁剪项
- 7. 后记
1. 前言 先来看一下android的系统架构:
文章图片
图上虚线所划定的范畴内对Android系统进行裁剪,具体可分为以下几个方面:
应用程序层:在这一层的工作是针对系统原生的应用程序进行裁剪,通过对不必要的应用程序进
行裁剪,可以加速包扫描的过程,从而使得系统启动速度加快:并且因为减少了驻留在内存中的
应用程序,使得系统可以更高效的使用内存。
应用程序框架层:应用框架层由Java系统服务组成,通过对不必要的Java系统服务的裁剪可以加
速SystemServer进程init阶段的初始化工作,使得系统启动速度加快。
运行库层:运行库层里主要包括两类库文件,第一类是通过Android系统本地服务编译出来的库
文件,如SurfaceFlinger、AudioFlinger等服务的库文件。第二类是第三方提供的库文件,如libc、
webkit等库文件。通过裁剪本地系统服务编译而来的库文件,可以加速initl阶段的初始化的时间,
从而加速系统的启动速度。并且通过配合Java系统服务的裁剪,可以从开发商的角度限制系统服
务,从而保证产品安全。通过裁剪运行库文件,可以降低Android系统在内存和存储介质上的占
用率。
硬件抽象层:硬件抽象层主要起到为Android系统和Linux内核提供一个桥梁的作用。通过裁剪
不必要的硬件设备所对应的硬件抽象层文件,可以降低系统镜像在存储设备上的占用率。
2. apk的裁剪 简单理解的话就是原生的话就是去除GMS,即谷歌全家桶,视需要保留其他原生apk
3. 服务的裁剪 Android系统的服务主要分为两类,第一类是系统服务,第二类是应用程序服务,如图:
文章图片
先了解下我们的本地服务的作用:
文章图片
这里可以根据设备的实际情况裁剪,在init.rc取消启动或者注册即可。
4. 运行库的裁剪 通过分析运行库文件源码的Android.mk文件,发现一个运行库文件编译运行时经常依赖其他的运行
库,且该库本身又有可能被其他运行库所依赖,所以对Android系统运行库裁剪的主要难点是处理好库与
库之间的依赖关系。
5. 硬件抽象层的裁剪 对该层文件的裁剪可以通过对不需要模块的入口函数hw_get_module0进行屏蔽来实现,其具体实方法是:在Android系统启动中,对不需要的硬件抽象层模块不进行注册,这样的话就不会加载相应的模块。
在Android系统启动SystemServer时会加载android_servers库,而这个动作会调用JNI_OnLoad()函数,该函数在源码树中的位置是frameworks/base/services/jni/Onload.cpp,该函数是Android系统提供的一种特有的机制,负责将本地方法注册到虚拟机当中,部分代码如下所示:
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
JNIEnv* env = NULL;
jint result = -1;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
ALOGE("GetEnv failed!");
return result;
}
ALOG_ASSERT(env, "Could not retrieve the env!");
register_android_server_PowerManagerService(env);
register_android_server_SerialService(env);
register_android_server_InputApplicationHandle(env);
//省略
return JNI_VERSION_1_4;
}
所以在此函数中,根据应用需求分析,将不需要的硬件抽象层模块注释掉,即可以在系统开机启动的
时候不将其注册,所以系统不会再去加载相应硬件抽象层的二进制文件。
6. 补充裁剪项 本来上面几个采集项已经够了,突然想到还有资源文件的裁剪,这也是我最近才接触到的,这里也补充一下。
即是对系统字体、声音、视频、软盘等资源的裁剪,系统路径为frameworks/base/data,这个可以参考我前面的内容的第18,19小节,如何添加就如何删减,链接为android系统开机默认设置修改记录。
7. 后记 主要强调是两个事,第一,裁剪需谨慎,需对系统架构熟悉到一定程度之后再进行,操作不当就可能造成牵一发而动全身的影响;第二,这篇文章是闲暇时间的草稿,后续会不断追加完善,如有问题,可在评论区留言。
推荐阅读
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 单点登陆
- 操作系统|[译]从内部了解现代浏览器(1)
- 游乐园系统,助力游乐园管理
- 中国MES系统软件随工业化成长
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Cesium|Cesium 粒子系统学习
- Android系统启动之init.rc文件解析过程
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- 算法回顾(SVD在协同过滤推荐系统中的应用)