文档章节

Android内核开发:在源码树中添加新的app应用

乐搏学院
 乐搏学院
发布于 2016/11/15 14:53
字数 840
阅读 7
收藏 1

上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用。

 

网上也有介绍怎么在源码中添加新的app应用的博文,但大都数只介绍了不含有jni本地代码的app的添加方法,本文会更加全面地介绍三种不同类型的app应用如何添加到Android内核源码树中编译。

 

假设新的应用名字叫:HelloWorld,并且已经在Eclipse或者Android Studio中编译和调试通过了,我们下面分三种情况来讨论如何将它添加到Android内核源码树中。

 

1.  不带jni本地代码

 

首先,在Android内核源码中选择一个目录来存放HelloWorld应用的源码,比如放到/packages/apps目录下。

 

(1) 在HelloWorld目录下新建Android.mk文件,示例如下:

 

1

2

3

4

5

6

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := HelloWorld

include $(BUILD_PACKAGE)

 

注:LOCAL_MODULE_TAGS的备选值有user,eng,tests,optional,本示例中使用的TAGS值为eng,因此,仅当用户指定的编译选项为eng时才会编译该工程。

 

(2) 配置makefile,添加新的项目

 

这一步与《Android内核开发:从源码树中删除出厂的app应用》正好相反,选择 /device/<company>/ <product>/xxxx.mk,或者从 build/target/product/ 目录下选择一个被“引用”的.mk,在其中的PRODUCT_PACKAGES参数列表中添加本工程:

 

1

2

3

4

5

6

7

PRODUCT_PACKAGES := \

    DeskClock \

    Calculator \

    Calendar \

    Camera2 \

    Email \

    HelloWorld

 

(3) 编译模块

 

在HelloWorld目录下输入mm命令,或者切换到Android源码根目录下执行下面任意一条命令即可:

 

1

2

$ make HelloWorld 

$ mmm package/apps/HelloWorld

 

编译生成的apk会放到在out/target/product/<product>/system/app/目录下。

 

2.  含有jni本地代码

 

对于含有jni的项目,则需要修改上述新建的Android.mk,如下:

 

1

2

3

4

5

6

7

8

9

10

LOCAL_PATH:= $(call my-dir)

 

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := HelloWorld

LOCAL_JNI_SHARED_LIBRARIES := libmynative

include $(BUILD_PACKAGE)

 

include $(call all-makefiles-under,$(LOCAL_PATH))

 

jni目录下的Android.mk如下(假设jni目录下有inc和src目录):

 

1

2

3

4

5

6

7

8

9

LOCAL_PATH := $(call my-dir)

 

include $(CLEAR_VARS)

LOCAL_MODULE := libmynative

LOCAL_SRC_FILES := src/mynative.c

LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)

LOCAL_C_INCLUDES += $(LOCAL_PATH)/inc

 

include $(BUILD_SHARED_LIBRARY)

 

3.  含有jni本地代码,并且本地代码依赖第三方库(.a或者so)

 

假设本地代码依赖的第三方库为:encoder.a 和 decoder.so

 

(1) 修改上述jni目录下的Android,mk,添加如下两项:

 

1

2

LOCAL_STATIC_LIBRARIES := libencoder

LOCAL_SHARED_LIBRARIES := libdecoder

 

(2) 修改HelloWorld目录下的Android.mk文件

 

首先把 encoder.a 和 decoder.so 都拷贝到工程根目录下,然后修改Android.mk文件,添加如下两项即可:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

include $(CLEAR_VARS)

LOCAL_MODULE := libencoder

LOCAL_SRC_FILES := encoder.a

LOCAL_MODULE_TAGS := eng

LOCAL_MODULE_CLASS := STATIC_LIBRARIES

LOCAL_MODULE_SUFFIX := .a

include $(BUILD_PREBUILT)

 

include $(CLEAR_VARS)

LOCAL_MODULE := libdecoder

LOCAL_SRC_FILES := decoder.so

LOCAL_MODULE_TAGS := eng

LOCAL_MODULE_CLASS := SHARED_LIBRARIES

LOCAL_MODULE_SUFFIX := .so

include $(BUILD_PREBUILT)

 

关于如何在源码树中添加新的app应用就介绍到这里了,有任何疑问或者建议欢迎留言或者来信lujun.hust@gmail.com交流

 

结束语

 

免费学习更多精品课程,登录乐搏学院官网http://h.learnbo.cn/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “Jhuster的专栏” 博客,请务必保留此出

© 著作权归作者所有

共有 人打赏支持
乐搏学院
粉丝 6
博文 526
码字总数 707467
作品 0
丰台
程序员
听说你Binder机制学的不错,来面试下这几个问题(一)

Binder承担了绝大部分Android进程通信的职责,可以看做是Android的血管系统,负责不同服务模块进程间的通信。在对Binder的理解上,可大可小,日常APP开发并不怎么涉及Binder通信知识,最多就...

技术小能手
07/20
0
0
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0
重磅!谷歌Fuchsia操作系统将支持运行Linux应用程序

作者|ERIC BROWN 译者丨薛命灯 Fuchsia 是谷歌开发的一个操作系统,这是一个差不多从头研发的新系统。2016 年 8 月,Fuchsia 的开发新闻在技术新闻网站上引发了轰动,不过很多细节依旧成谜。...

InfoQ
06/27
0
0
[学习笔记一]、Android体系与系统架构

1、Android系统架构 2、Linux Linux层,Android最底层最核心的部分。我们打款手机Setting,选择about phone选项,这一选项所显示的内核版本,就是我们所用的Linux内核的版本。 Linux层包含了A...

2tman
2015/11/20
0
0
Ubuntu11.10下编译android内核源码

在之前的文章中,为读者介绍了《Ubuntu Linux下android源码下载方法》、《Ubuntu11.10下配置android的Eclipse开发环境》、配置过程中遇到的一些问题,以及《Ubuntu11.10下android源码4.0.3的...

Taskiller
2012/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

angular 解决其他电脑不能访问的问题。

ng serve --host 0.0.0.0 --disable-host-check

miaojiangmin
今天
1
0
优酷视频文件怎么转换格式

  以前在优酷上下载视频都只是在手机上观看,但随着科技的发展,对于视频的要求也逐渐增多,不再只是观看视频那么简单,在精彩的部分还会将其单独分割出来,然后进行视频剪辑,可以做出我们...

萤火的萤火
今天
0
0
数据结构:散列

在一个数据结构中查找key元素,用顺序查找、二分查找都需要经过一系列关键之比较才能查找到结果,平均查找长度与数据量有关,元素越多比较次数就越多。 如果根据元素的关键字就能知道元素的存...

京一
今天
1
0
Apache RocketMQ 正式开源分布式事务消息

近日,Apache RocketMQ 社区正式发布4.3版本。此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消...

阿里云云栖社区
今天
32
0
使用JavaScript和MQTT开发物联网应用

如果说Java和C#哪个是最好的开发语言,无疑会挑起程序员之间的相互怒怼,那如果说JavaScript是动态性最好的语言,相信大家都不会有太大的争议。随着越来越多的硬件平台和开发板开始支持JavaS...

少年不搬砖老大徒伤悲
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部