当前位置:编程学习 > wap >>

android系统如何精简

对于android系统的精简,普通的方式是,删除一些系统中不需要的apk。

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

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

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

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

以上纯属个人愚见,请大家有兴趣的,有想法的都提提。谢谢。 --------------------编程问答-------------------- 也想知道!!!现在只做了删除一些APK的操作。 --------------------编程问答-------------------- http://topic.csdn.net/u/20120423/10/e18c18c8-5970-4083-a65f-ee9ad4686aba.html
里面我回复过了 希望对你有帮助 --------------------编程问答-------------------- 没弄过。。。 --------------------编程问答--------------------
引用 2 楼  的回复:
http://topic.csdn.net/u/20120423/10/e18c18c8-5970-4083-a65f-ee9ad4686aba.html
里面我回复过了 希望对你有帮助


你的回复,之前也有请教过你了。那些方面,我基本上不知道还能做什么了。。 --------------------编程问答-------------------- 顶顶帖。。。请大家集思广益。。。
其实很有兴趣知道,kindle fire的深度定制,在系统精简方面有什么可取的经验。。 --------------------编程问答-------------------- 你的系统要什么功能就留下什么功能

既然你说kindle fire
那我就说说这个机型
从功能上来说 减掉了 短信 彩信 电话等手机通信功能 一堆apk
并且剪裁了framework telephony的东西 比如nfc gps等的支持功能

联系人 sim卡模块 stk 这些也都减掉了

具体要怎么剪裁是取决于你自己的需求 如果需求很少 你可以自己从kernel往上搭
--------------------编程问答-------------------- 有问题私聊吧 
你弄清楚自己的需求 我帮你搭积木 --------------------编程问答--------------------
引用 7 楼  的回复:
有问题私聊吧 
你弄清楚自己的需求 我帮你搭积木


谢谢楼上大哥的鼎力支持。。。


希望大家也能瞧一瞧,给一些意见。 --------------------编程问答-------------------- dxjwolf大哥提到了一个方面

对于特定的系统来说,framework-res.apk , framework.jar中打包了很多不需要使用的代码和资源,可以尝试去砍掉,从而减少加载的内容的体积。 --------------------编程问答-------------------- 补充下,

zygote创建了 虚拟机,,,而jar是被虚拟机用来加载的,,,,,

然后应用apk,,是通过zygote 的fork出来的,,,,其使用的是同一份拷贝的frameworks.jar,,,,即在内存上只在一个地方存在,,,,

而且,经确认,虚拟机在加载jar的时候,会把static的内容加载到内存。而其他的内容依旧在flash上,当你去new的时候,相关的才进驻到内存。

所以删减 framework.jar 可根据自己的需求来。。

而关于 framework-res.apk 的加载。。我不太确定是否其原理是否与普通的jar一样。。。



如果有说错的地方,,也请大家指正。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- framework.jar 真不敢乱删!因为他里面CPP/C与JAVA之间来回调用,怕没整清楚把系统整的挂掉! --------------------编程问答-------------------- 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)
--------------------编程问答-------------------- 另外 framework.jar 几乎所有的手机厂商还有amazon等第三方
包括小米 360 创新工场都改过
没有太大风险 只要你保证对android cts的测试兼容就行了 
甚至如果你不准备提供第三方应用下载支援
这个兼容性测试也可以不要 --------------------编程问答--------------------
引用 13 楼  的回复:
framework-res.apk的加载优化 你看一下下面几个点:
1.系统proload资源 会有一些资源被一直保留在系统内存中 -- 初始化流程
2.每次图片或者颜色资源被加载后 会有cache机制 这部分会占用内存 -- resources.java 
3.如果有很多apk已经被删除 你可以考虑把这些apk使用的一些图片 图标资源也删除掉 不会有影响的

载入资源时候判断是系统资……


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进行了加载。
--------------------编程问答-------------------- 除了 dxjwolf大哥,其他高手都潜水了么?。。。 --------------------编程问答-------------------- 这帖子就这样沉了么。。。。。。。。 --------------------编程问答-------------------- 也想知道!! --------------------编程问答-------------------- 这个帖子,我顶起来!
我看见一些人把system.img 裁剪成40M,我的system.img 居然是105M ...........
现在还不知道怎么下手。
自带的一些apk 删除就可以了吧? --------------------编程问答-------------------- 继续顶起来,这里有木有搞开机时间优化的~ --------------------编程问答-------------------- 顶顶顶顶,时间优化的有的。不过大部分也是在说精简Android…… --------------------编程问答-------------------- 继续顶,android系统实在不好精简啊,个个子系统之间的联系太多了~
砍到现在也才砍掉一个gps~ --------------------编程问答-------------------- 我刚接触 android系统的裁剪   想问下 你们所谓的裁剪      例如 裁剪不需要的APK   是把源码都删除么 还是什么的呀 求高手指点指点。 还有就是裁剪服务  是在代码里把不需要的服务注释掉么,那这个服务所涉及到的库 或 jar 包什么的  需不需要删除 --------------------编程问答--------------------
引用 20 楼 buyishengun 的回复:
继续顶起来,这里有木有搞开机时间优化的~


开机时间优化。。也就那几个地方可以搞了。。。我有发的帖子说过。 --------------------编程问答--------------------
引用 23 楼 zhouzhi3389 的回复:
我刚接触 android系统的裁剪   想问下 你们所谓的裁剪      例如 裁剪不需要的APK   是把源码都删除么 还是什么的呀 求高手指点指点。 还有就是裁剪服务  是在代码里把不需要的服务注释掉么,那这个服务所涉及到的库 或 jar 包什么的  需不需要删除


初级的。就是删除system/app下面的apk。

想做好,做深。。。那就的慢工出细活咯。 --------------------编程问答-------------------- 我想问一下楼主,上述步骤试过了吗? --------------------编程问答-------------------- 我想问一下楼主你设置这个标题,是怎么让字体变绿的? --------------------编程问答--------------------
引用 15 楼 a87636764 的回复:
引用 13 楼  的回复:framework-res.apk的加载优化 你看一下下面几个点:
1.系统proload资源 会有一些资源被一直保留在系统内存中 -- 初始化流程
2.每次图片或者颜色资源被加载后 会有cache机制 这部分会占用内存 -- resources.java 
3.如果有很多apk已经被删除 你可以考虑把这些apk使用的一些图片 图标资源也删……


这个是底层了吧? 还在应用层混的菜鸟来膜拜下。。。Orz
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,