android系统如何精简

a87636764 2012-05-21 10:05:28
对于android系统的精简,普通的方式是,删除一些系统中不需要的apk。

现在假设我手上有kernel,frameworks的整个代码,面对一个特定的项目时候,对于精简,我们又可以继续做些什么?

现在假设这个特定的项目,其最后实现的效果,可能是需要运行几个apk,同时对于外部的apk禁止进行安装。
这样的话,在frameworks里面,SystemServer.java中,我们可以将java的不需要使用的系统服务全部删除。
同时在init.rc中去除不需要依赖的程序的加载。
在preload的时候,屏蔽掉不需要使用的预加载资源和类。

而对于系统的组件那块来说,我个人认为,似乎没有什么需要精简的,因为都在frameworks.jar中,不调用的话,影响不大。

对于kindle fire,都说是 深度定制的android系统。提及最多的是它做的去google化,去除了整个gapps。至少其他的,它还做了哪些系统的精简?

以上纯属个人愚见,请大家有兴趣的,有想法的都提提。谢谢。
...全文
2278 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
mozun1 2014-08-13
  • 打赏
  • 举报
回复
引用 楼主 a87636764 的回复:
对于android系统的精简,普通的方式是,删除一些系统中不需要的apk。 现在假设我手上有kernel,frameworks的整个代码,面对一个特定的项目时候,对于精简,我们又可以继续做些什么? 现在假设这个特定的项目,其最后实现的效果,可能是需要运行几个apk,同时对于外部的apk禁止进行安装。 这样的话,在frameworks里面,SystemServer.java中,我们可以将java的不需要使用的系统服务全部删除。 同时在init.rc中去除不需要依赖的程序的加载。 在preload的时候,屏蔽掉不需要使用的预加载资源和类。 而对于系统的组件那块来说,我个人认为,似乎没有什么需要精简的,因为都在frameworks.jar中,不调用的话,影响不大。 对于kindle fire,都说是 深度定制的android系统。提及最多的是它做的去google化,去除了整个gapps。至少其他的,它还做了哪些系统的精简? 以上纯属个人愚见,请大家有兴趣的,有想法的都提提。谢谢。
博主,你裁剪这方面 ,给些经验吧 ,谢谢!
mozun1 2014-08-08
  • 打赏
  • 举报
回复
引用 25 楼 a87636764 的回复:
[quote=引用 23 楼 zhouzhi3389 的回复:] 我刚接触 android系统的裁剪 想问下 你们所谓的裁剪 例如 裁剪不需要的APK 是把源码都删除么 还是什么的呀 求高手指点指点。 还有就是裁剪服务 是在代码里把不需要的服务注释掉么,那这个服务所涉及到的库 或 jar 包什么的 需不需要删除
初级的。就是删除system/app下面的apk。 想做好,做深。。。那就的慢工出细活咯。[/quote] 请问 楼主 你裁剪成功了吗?
KPRF2009 2013-01-29
  • 打赏
  • 举报
回复
引用 15 楼 a87636764 的回复:
引用 13 楼 的回复:framework-res.apk的加载优化 你看一下下面几个点: 1.系统proload资源 会有一些资源被一直保留在系统内存中 -- 初始化流程 2.每次图片或者颜色资源被加载后 会有cache机制 这部分会占用内存 -- resources.java 3.如果有很多apk已经被删除 你可以考虑把这些apk使用的一些图片 图标资源也删……
这个是底层了吧? 还在应用层混的菜鸟来膜拜下。。。Orz
雨焰 2013-01-28
  • 打赏
  • 举报
回复
我想问一下楼主你设置这个标题,是怎么让字体变绿的?
雨焰 2013-01-28
  • 打赏
  • 举报
回复
我想问一下楼主,上述步骤试过了吗?
a87636764 2013-01-28
  • 打赏
  • 举报
回复
引用 23 楼 zhouzhi3389 的回复:
我刚接触 android系统的裁剪 想问下 你们所谓的裁剪 例如 裁剪不需要的APK 是把源码都删除么 还是什么的呀 求高手指点指点。 还有就是裁剪服务 是在代码里把不需要的服务注释掉么,那这个服务所涉及到的库 或 jar 包什么的 需不需要删除
初级的。就是删除system/app下面的apk。 想做好,做深。。。那就的慢工出细活咯。
a87636764 2013-01-28
  • 打赏
  • 举报
回复
引用 20 楼 buyishengun 的回复:
继续顶起来,这里有木有搞开机时间优化的~
开机时间优化。。也就那几个地方可以搞了。。。我有发的帖子说过。
zhouzhi3389 2013-01-26
  • 打赏
  • 举报
回复
我刚接触 android系统的裁剪 想问下 你们所谓的裁剪 例如 裁剪不需要的APK 是把源码都删除么 还是什么的呀 求高手指点指点。 还有就是裁剪服务 是在代码里把不需要的服务注释掉么,那这个服务所涉及到的库 或 jar 包什么的 需不需要删除
布衣神棍 2012-11-06
  • 打赏
  • 举报
回复
继续顶,android系统实在不好精简啊,个个子系统之间的联系太多了~ 砍到现在也才砍掉一个gps~
袁保康 2012-11-02
  • 打赏
  • 举报
回复
顶顶顶顶,时间优化的有的。不过大部分也是在说精简Android……
布衣神棍 2012-10-31
  • 打赏
  • 举报
回复
继续顶起来,这里有木有搞开机时间优化的~
简单并快乐着 2012-08-27
  • 打赏
  • 举报
回复
这个帖子,我顶起来!
我看见一些人把system.img 裁剪成40M,我的system.img 居然是105M ...........
现在还不知道怎么下手。
自带的一些apk 删除就可以了吧?
lwl844059061 2012-08-27
  • 打赏
  • 举报
回复
也想知道!!
a87636764 2012-05-30
  • 打赏
  • 举报
回复
这帖子就这样沉了么。。。。。。。。
a87636764 2012-05-24
  • 打赏
  • 举报
回复
除了 dxjwolf大哥,其他高手都潜水了么?。。。
xqhrs232 2012-05-23
  • 打赏
  • 举报
回复
framework.jar 真不敢乱删!因为他里面CPP/C与JAVA之间来回调用,怕没整清楚把系统整的挂掉!
a87636764 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

framework-res.apk的加载优化 你看一下下面几个点:
1.系统proload资源 会有一些资源被一直保留在系统内存中 -- 初始化流程
2.每次图片或者颜色资源被加载后 会有cache机制 这部分会占用内存 -- resources.java
3.如果有很多apk已经被删除 你可以考虑把这些apk使用的一些图片 图标资源也删除掉 不会有影响的

载入资源时候判断是系统资……
[/Quote]

1.系统proload资源 会有一些资源被一直保留在系统内存中 -- 初始化流程
这个是在ZygoteInit.java中的preloadResources()函数中进行的加载的。我之前有说过,去除preload阶段加载的类和资源。其实就是指的这个。

2.resources.java 里面,看了一下,mDrawableCache等几个变量。不过说不太清楚,只是感觉cache机制存在,而且本身我们的apk是限制的,即自己清楚会用到多少资源,因此这个对我来说,应该不需要动。

3.我完全赞同。只是可能工作量会大点。


关于framework-res.apk的加载。今天有看。
首先是zygote起来以后,使PackageManagerService起来,然后其中会调用pp.parsePackage(),继而在parsePackage()中调用assmgr = new AssetManager()。AssetManager的构造函数中会调用一个jni---init(),然后就是在这个init()中调用了frameworks/base/libs/utils/AssetManager.cpp中的addDefaultAssets(),从而对framework-res.apk进行了加载。
妖怪 2012-05-23
  • 打赏
  • 举报
回复
另外 framework.jar 几乎所有的手机厂商还有amazon等第三方
包括小米 360 创新工场都改过
没有太大风险 只要你保证对android cts的测试兼容就行了
甚至如果你不准备提供第三方应用下载支援
这个兼容性测试也可以不要
妖怪 2012-05-23
  • 打赏
  • 举报
回复
framework-res.apk的加载优化 你看一下下面几个点:
1.系统proload资源 会有一些资源被一直保留在系统内存中 -- 初始化流程
2.每次图片或者颜色资源被加载后 会有cache机制 这部分会占用内存 -- resources.java
3.如果有很多apk已经被删除 你可以考虑把这些apk使用的一些图片 图标资源也删除掉 不会有影响的

载入资源时候判断是系统资源时 对framework-res文件的显式调用位置:
frameworks/base/libs/utils/AssetManager.cpp
static const char* kSystemAssets = "framework/framework-res.apk";
Asset* AssetManager::openNonAsset(const char* fileName, AccessMode mode)
妖怪 2012-05-22
  • 打赏
  • 举报
回复
有问题私聊吧
你弄清楚自己的需求 我帮你搭积木
加载更多回复(9)

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧