Android - 模块添加与编译
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 - 模块添加与编译的更多相关文章
- 自动添加需要编译的源文件Android.mk模板
自动添加需要编译的源文件列表 添加第三方静态库.动态库的依赖 假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这几个第三方库文件,项目包含如下几个模块:a ...
- Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库
Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16. step1:创建一个包含C++的项目 其他默认就可以了. C++ Standard 指定编译库的环境,其中Too ...
- Android中添加自己的模块 【转】
本文转载自:http://wallage.blog.163.com/blog/static/17389624201021791333695/ 转:http://blog.csdn.net/yili_x ...
- android源码环境下用mmm/mm编译模块,输出编译log到文件的方法
android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...
- 安装成功的nginx如何添加未编译安装模块
原已经安装好的nginx,现在需要添加一个未被编译安装的模块举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存)nginx的模块是需要重新编译nginx,而不是像apa ...
- 新安装和已安装nginx如何添加未编译安装模块/补丁
新安装和已安装nginx如何添加未编译安装模块/补丁 --http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10485& ...
- 转:安装成功的nginx如何添加未编译安装模块
原已经安装好的nginx,现在需要添加一个未被编译安装的模块 举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存) nginx的模块是需要重新编译nginx,而不是像a ...
- 安装成功的nginx,如何添加未编译安装模块(非覆盖安装http_image_filter_module)
背景:1.做了图片上传小项目.2.图片上传,需要多图管理.3.图片上传,需要存储到Fastdfs.4.Fastdfs上的图片,和Nginx结合.5.Nginx从Fastdfs获得的图片,需要使用缩略图 ...
- Android NDK引用预编译的动态链接库
NDK里有个例子: android-ndk-r10/samples/module-exports/jni一看就懂了 ———————————————————————————– 从r5版本开始,就支持预编 ...
随机推荐
- 使用redis和fastjson做应用和mysql之间的缓存
第一次做这种javaweb的项目,难免还是要犯很多错误. 大概也知道,redis常常被用来做应用和mysql之间的缓存.模型大概是这样子的. 为了让redis能够缓存mysql数据库中的数据,我写了很 ...
- 【Linux驱动】内核等待队列
在Linux中, 一个等待队列由一个"等待队列头"来管理,等待队列是双向链表结构. 应用场合:将等待同一资源的进程挂在同一个等待队列中. 数据结构 在include/linux/w ...
- Java魔法堂:类加载机制入了个门
一.前言 当在CMD/SHELL中输入 $ java Main<CR><LF> 后,Main程序就开始运行了,但在运行之前总得先把Main.class及其所依赖的类加载到JVM ...
- Oracle Flashback和RMAN示例
作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5346833.html 环境: Windows 10 专业版 Oracle Database 12c R ...
- Linux 小工具学习之(1)——Wget十例[翻译]
在本博文中我们将学习一下wget这个工具.wget可以使用HTTP.HTTPS.和FTP等常见网络协议来从万维网(WWW)获取文件(从它的名字来源也可以看出 World Wide Web Get -& ...
- 我读过的最好的epoll讲解--转自”知乎“
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套接字,还是管道,我们都可以把他们看作流. 之后我们来讨论I/O的操作,通过read ...
- [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 本系列文章讲的是asp.net 5(Asp.net VNext)中的配置文件部分,工程下载地址为:https: ...
- 使用MongoDB作为后台数据库的尝试
MongoDB作为一个阶层型数据库,在很短的时间里面是不可能被大面积推广使用的, 本文作为一个实验性的课题,探讨一下MongoDB作为网站数据库的可能性. 1.MongoDB作为代替关系型数据库的可能 ...
- Eclipse设置风格
如果觉得Eclipse的颜色太刺眼,可以修改背景与字体颜色,方法如下: (1)到http://eclipsecolorthemes.org/下载主题文件,可以选择xml文件或者epf文件: (2)Ec ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...