https://www.douban.com/note/532170738/


Android内核开发中,我们常常需要在源码中添加新的app,而对于初学者而言,如果不太清楚具体操作,网上这类型的文章也很多,但很多介绍得都不是很全面,一般都没有jni本地代码的app的添加方法。本文小编将为大家分享的就是,相对比较全面的三种不同类型app添加到Android内核源码树的方法,一起来看看吧。

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

1. 不带jni本地代码

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

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

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参数列表中添加本工程:

PRODUCT_PACKAGES := \
DeskClock \
Calculator \
Calendar \
Camera2 \
Email \
HelloWorld

(3) 编译模块

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

$ make HelloWorld
$ mmm package/apps/HelloWorld

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

2. 含有jni本地代码

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

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目录):

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,添加如下两项:

LOCAL_STATIC_LIBRARIES := libencoder
LOCAL_SHARED_LIBRARIES := libdecoder

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

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

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)

结束语
以上就是Android内核中,三种不同类型的app应用的添加方法,大家可以在自己的环境下一一实践一下,看看具体效果。最后,希望本文的分享对大家有所帮助。

更多相关文章

  1. Android工程中添加图片资源
  2. android 完全退出自己的应用程序
  3. 在s5pv210开发板linux平台上移植mplayer--基于x210开发板
  4. Android——RIL 机制源码分析
  5. Android源码分析系列-整理篇
  6. android videoView 按不同比例缩放
  7. Android(安卓)Fragment基础
  8. “大数据讲师”、“Hadoop讲师”、“Spark讲师”、“云计算讲师
  9. Android(安卓)内核编译

随机推荐

  1. ionic3 升级
  2. Android实现手电筒电源键关闭功能
  3. android图片优化,内存释放处理
  4. 开发技术前线 第八期 周报
  5. Android学习日记
  6. WebView 打印web端的console日志(如consol
  7. AndoridStudio--Error:FAILURE: Build fa
  8. android 3种定时器的方法
  9. Mac IDA debug android exec program
  10. Android 知识体系