博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android内核开发:在源码树中添加新的app应用
阅读量:6237 次
发布时间:2019-06-22

本文共 2420 字,大约阅读时间需要 8 分钟。

网上也有介绍怎么在源码中添加新的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,添加新的项目

这一步与正好相反,选择 /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)
本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1674206,如需转载请自行联系原作者
你可能感兴趣的文章
[实用开源]端口转发小工具rtcp.py
查看>>
CSS实现截取隐藏文字
查看>>
C# 程序开机启动
查看>>
程序9
查看>>
Jquery获取当前元素的索引值
查看>>
GIT SSH连接遇到到的问题
查看>>
My Solution to Longest Substring Without Repeating Characters
查看>>
<转> 编写超级可读代码的15个最佳实践
查看>>
VMware vSphere Client的显示语言
查看>>
php小代码(转)
查看>>
Windows内核编程之:返回状态值
查看>>
Xeon Phi之MIC编程知识点
查看>>
jigloo安装和介绍
查看>>
Linux下配置SSL (转)
查看>>
《转》程序员每年要做的十件事
查看>>
Android实现XML解析技术
查看>>
asp.net使用include包含文件
查看>>
迪米特法则
查看>>
Sql Server数据库自增长字段标识列的插入或更新修改操作办法
查看>>
CentOS,Fedora,Debian,Ubuntu,SuSE——我到底爱谁
查看>>