1.前言

大概几个月前,笔者收到一些信息,说道公司出去的Android工控系统冗余很多,希望做一些精简,但不管那时的笔者还是现在的笔者。都是一个大菜鸟啊,听到系统精简这个操作,瞬间懵逼了,第一次执行这种任务,表示鸭梨挺大~

2.正文

但工作在这,不得不做,经过一系列的百度,谷歌。emmm… ,有了一些头绪,总结了一下,大多是这样的精简方式。
可以跟着Android系统架构来进行一些动作。
1.驱动层的裁剪
2.Android native层服务的裁剪。
3.Android frameworks层服务的裁剪。
4.Android APP层的裁剪。
因为笔者这方面经验并不是很足,选择了最简单的一种–APP层的裁剪,先把多余的APP干掉,但这四个里面最简单的一个也是把我这个菜鸟搞得是头破血流啊,来说说这个艰难的路程。。。

首先,大家得知道Android APP 是否参与编译和一个编译变量有直接的关系。PRODUCT_PACKAGES 这个变量相比大家都见过,在Android源生的mk中,或者厂商定制的mk中都会有对这个变量的赋值。那给这个变量赋值的变量是什么呢?
我们先随便找个APP的mk看看。

这个是 系统应用Music的mk文件:packages/apps/Music/Android.mk
可以看到我标红的一个变量:LOCAL_PACKAGE_NAME 这个就是每个模块的模块名,对应APP也就是APP名
那么,看到这里,我萌生了几个想法可以进行“APP层的系统裁剪”
1.把这个赋值给这个LOCAL_PACKAGE_NAME 变量的名称改掉。
2.找到PRODUCT_PACKAGES 变量中LOCAL_PACKAGE_NAME对应的模块名进行删除。
3.暴力点,直接把这个APP的源码进行删除。
笔者对上面的想法一一验证,可以,效果很不错,都达到了我裁剪的目的,但冷静下来仔细想想,这样做真的合适吗?
这是一个APP的裁剪,那么十个,百个,N个呢?每个都这样操作,那是不是会累死?而且总体的管理是不是也极为不方便?

答案是的,这几种处理方法能够达到我们所想要的结果,但!!!对于源生的代码结构,管理,甚至人为的工作量是极其不友好的。
那么,还有其他什么办法吗?这里回过头来想,既然系统控制模块是否参与编译是根据PRODUCT_PACKAGES 这个变量来进行控制的,那我们倒不如去跟跟这个玩意到底做了些什么?
这里提供一个博文,写的不错:
看完后,是不是想去看看Android源码结构中关于build这块的代码。笔者也很想去看看,同时笔者已经这么做了,去看看build/core/main.mk这个主要的核心编译文件里对于PRODUCT_PACKAGES 这个是如何做的。

这里可以看到这个控制编译语句,如果是完整编译。会依次将PRODUCT_PACKAGES 里面的变量参与编译。
那么思路是不是就来了?我们可以参照这个变量的使用方式,自己弄一个删除APP的变量:PRODUCT_DEL_PACKAGES
哈哈,先试为快!
步骤1:
既然来了这里就先从这里开始:添加过滤APP参与编译操作

那么做到这里别忘了一件事,开头提过的PRODUCT_PACKAGES赋值给了另一个变量,那么我们也得在相应的地方进行添加。

做到这里,我们就可以愉快用这个PRODUCT_DEL_PACKAGES变量进行Android APP层的裁剪了。
既然是对产品定制了,我们就统一在device.mk中进行操作吧。
找到要删减的APP,这里对于怎么找到自己要删减哪些APP,APP在哪里,笔者就不详述了,偷偷送上笔者认为特别好用的一句搜寻命令:grep -rn “xxx” . 这命令的意思是在当前目录下搜寻包含xxx的所有文件。
笔者最终做出的裁剪如下:
device/qcom/msm8953_64/msm8953_64.mk

这样之后,我们在make clean -> make
最后烧录镜像。观察,美滋滋啊!想要删除的APP全都没了。
好了,此篇完结。大家有更好的办法或者此博文有不足之处,请大家不吝赐教~

P.s. 后面笔者会经过不断的学习进行更深的系统精简,经过笔者验证后会继续与大家分享~上面还提到的其他裁剪都还没做过呢,惭愧。。。另外,系统裁剪需谨慎,有时候把一些重要的东西删了就很难受了,笔者可是吃了很大的亏,说起来都是泪啊

更多相关文章

  1. macOS中配置Flutter开发环境(使用AndroidStudio开发)傻瓜版教程
  2. 开发android应该注意的
  3. Android(安卓)MVVM架构模式 详解和综合运用(一)
  4. android adb的配置以及 java环境变量的配置
  5. 创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出
  6. android 简单地设置Activity界面的跳转动画
  7. 编写高效的Android代码 .
  8. 从破解APP开始学Android——用户登录验证
  9. Android借助系统自带图片裁剪集成图片选择以及7.0适配

随机推荐

  1. 【DB宝18】在Docker中安装使用MySQL高可
  2. 【Linux】shell脚本基础-变量
  3. 三子棋 游戏 c++ c
  4. 4-10(二叉搜索树)
  5. 【DB笔试面试234】在Oracle中,如何有效的
  6. 2021-04-10:给定两个可能有环也可能无环的
  7. Oracle Namespace 说明
  8. 【DB笔试面试389】在Oracle中,什么是绑定
  9. PyCharm最新激活教程,不用激活码即可永久
  10. Oracle数据库安全管理