Android5.1 Ubuntu14.04

Android系统编译依靠.mk文件

添加google服务

我们自己的ROM里没有google服务

完整的google包里包含google框架和各种服务,我们可以选择性安装模块

在google包里products目录下,有一个 gms.mk 文件(或者自己起名字)

gms.mk管理着要安装的各个模块,找到关键字PRODUCT_PACKAGES

PRODUCT_PACKAGES后面跟着的就是要安装的模块

截取部分来看看:

PRODUCT_PACKAGES += \
    AndroidForWork \
    ConfigUpdater \
    GoogleBackupTransport \
    GoogleFeedback

一般会在device/corecompany/yourproductname/ 目录中存放.mk文件

corecompany指代芯片厂家,比如高通,MTK

可能是 device.mk ,也可能是  yourproductname.mk ;这个文件会被Makefile找到

这个mk文件中会引用 gms.mk (或者自己起名字)

需要把 gms.mk的路径写对,编译时会自动找到

1
$(call inherit-product-if-exists, vendor/google/products/intel_gms.mk)

本例中google包放在vendor目录下

观察 vendor/google/apps/GmsCore 里的 Android.mk 文件

LOCAL_PRIVILEGED_MODULE := true

这个设置表示,GmsCore模块装入system/priv-app

如果没有这个设置,模块会装入system/app

可以在模块目录mm编译,看看会装在哪个目录

priv-app里能获得系统权限,安卓4.4后有了这个划分

小结:

1. 找个地方把google包放进去,比如vendor/google

2. 选择要安装的google服务,修改gms.mk文件

3. 修改device/corecompany/yourproductname/中相应的mk文件,引用gms.mk

4. 把out目录删掉,或者只删去相应模块

5. 编译

添加第三方Launcher

想在ROM中添加第三方Launcher,和添加google服务模块类似

假设这是一个没有源码,只有apk的Launcher:ThirdLauncher.apk

可仿造google服务模块的mk文件编写Launcher的mk文件

比如GoogleFeedback的 Android.mk

如果Launcher需要系统权限,记得加上

LOCAL_PRIVILEGED_MODULE := true

小结:

1. 找个地方把ThirdLauncher.apk放好,比如vendor/yourcompany/ThirdLauncher/

2. 编写好Launcher的mk文件;注意是否需要系统权限;mm编译验证一下

3. 在device/corecompany/yourproductname/中相应的mk文件中加入ThirdLauncher

4. 删去out目录下相应模块,重新全编译

Android - 模块添加与编译的更多相关文章

  1. 自动添加需要编译的源文件Android.mk模板

    自动添加需要编译的源文件列表 添加第三方静态库.动态库的依赖   假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这几个第三方库文件,项目包含如下几个模块:a ...

  2. Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库

    Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16. step1:创建一个包含C++的项目 其他默认就可以了. C++ Standard 指定编译库的环境,其中Too ...

  3. Android中添加自己的模块 【转】

    本文转载自:http://wallage.blog.163.com/blog/static/17389624201021791333695/ 转:http://blog.csdn.net/yili_x ...

  4. android源码环境下用mmm/mm编译模块,输出编译log到文件的方法

    android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...

  5. 安装成功的nginx如何添加未编译安装模块

    原已经安装好的nginx,现在需要添加一个未被编译安装的模块举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存)nginx的模块是需要重新编译nginx,而不是像apa ...

  6. 新安装和已安装nginx如何添加未编译安装模块/补丁

    新安装和已安装nginx如何添加未编译安装模块/补丁 --http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10485& ...

  7. 转:安装成功的nginx如何添加未编译安装模块

    原已经安装好的nginx,现在需要添加一个未被编译安装的模块 举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存) nginx的模块是需要重新编译nginx,而不是像a ...

  8. 安装成功的nginx,如何添加未编译安装模块(非覆盖安装http_image_filter_module)

    背景:1.做了图片上传小项目.2.图片上传,需要多图管理.3.图片上传,需要存储到Fastdfs.4.Fastdfs上的图片,和Nginx结合.5.Nginx从Fastdfs获得的图片,需要使用缩略图 ...

  9. Android NDK引用预编译的动态链接库

    NDK里有个例子: android-ndk-r10/samples/module-exports/jni一看就懂了 ———————————————————————————– 从r5版本开始,就支持预编 ...

随机推荐

  1. JS魔法堂:判断节点位置关系

    一.前言 在polyfill querySelectorAll 和写弹出窗时都需要判断两个节点间的位置关系,通过jQuery我们可以轻松搞定,但原生JS呢?下面我将整理各种判断方法,以供日后查阅. 二 ...

  2. angularJs案例汇总

    ---恢复内容开始--- 这里我会把学习过程中碰到的demo与大家分享,由浅入深,逐个分析. Eg1:入门必备 <html ng-app="todoApp"> < ...

  3. PHPcms 系统简单使用

    1.站点/发布点的新建 1.1 发布点的新建: 发布点是设置站点与服务器之间的链接配置. 设置 - 发布点管理 - 添加发布点 发布点名:可以与接下来的站点名称相同 ftp服务器:用于设置PHPcms ...

  4. 解决 DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe 在VS2015 Update3 安装失败的问题

    今天抽空升级VS2015 Update3. 在安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe 时报错了,看了错误日志 显示: 看到我标红的两个地方,那么 ...

  5. c#中 HttpWebRequest请求抛异常,基础连接已经关闭: 连接被意外关闭

    在用httpWebRequest模拟请求的时候有时因为服务器等方面做了请求的限制, 在请求会出现基础连接已经关闭: 接收时发生意外错误的错误 一般原因是因为服务器不允许与 Internet 资源建立持 ...

  6. Windows Phone 8.1中AppBarToggleButton的绑定问题

    在WP8.1中,应用栏按钮已经可以支持绑定了,而且提供了一种AppBarToggleButton类型,相当于一种开关按钮,这种按钮有一个属性IsChecked,标记是否为选中状态. 于是想当然的,将I ...

  7. Clr编写Insert Triggr

    在CLR编写一个插入娄据的触发器. 这个触发器是当对表插入数据时,即时把刚才插入的数据显示出来: 可复制代码: public static void tri_RetrieveJustInsertedD ...

  8. SQL_递归查询(复杂查询示例)

    需求: 一篇文章里有很多评论,每个评论又有很多回复评论,要求: 页面将文章展示出来,且文章的主评论按照评论时间分页展示,回复评论的评论完全展示在每个主评论下面,且按照回复时间排序 最终查询结果SQL查 ...

  9. c# datetime 格式化

    //c datetime 格式化 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2 ...

  10. MySql基础整理

    http://hovertree.com/menu/mysql/ use abccs;select * from mytable2 limit 3,4;call sp_name1(1,@nn);sel ...