欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android5.1 内置第三方APK及Android.mk文件编写(以在amlogic5.1公版系统内置百度输入法为例)

程序员文章站 2022-06-05 14:26:44
...

Android.mk文件用来向编译系统描述如何编译你的源代码。在编译整个工程的情况下,系统所找到的所有的Android.mk将会先存入subdir_makefiles变量中,随后一次性一次性include进整个编译文件中。

示例 Android.mk内容:

LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := baidushurufa
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)
LOCAL_SRC_FILES := $(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED 
LOCAL_MODULE_TAGS := optional
LOCAL_DEX_PREOPT := false
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_PREBUILT_JNI_LIBS:= \
@lib/armeabi/libar-emotion.so  \
@lib/armeabi/libBaiduSpeechSDK.so  \
@lib/armeabi/libbdEASRAndroid.so  \
@lib/armeabi/libbdinput_gif_v1_0_10.so  \
@lib/armeabi/libchiperencoder_v1_2_1.so  \
@lib/armeabi/libface_detector.so  \
@lib/armeabi/libface-jni.so  \
@lib/armeabi/libffmpeg.so  \
@lib/armeabi/libgnustl_shared.so  \
@lib/armeabi/libjnicrash.so  \
@lib/armeabi/libsimeji_ime.so  \
@lib/armeabi/libturbonet.so  \
@lib/armeabi/libvad.dnn.so  \
@lib/armeabi/libyoga.so 
include $(BUILD_PREBUILT)

语法讲解:

LOCAL_PATH := $(my-dir)
一般情况下Android.mk和需要编译的源文件在同一目录下,将LOCAL_PATH变量定义成本文件所在目录路径。

include $(CLEAR_VARS)
CLEAR_VARS的定义在build/core/clear_vars.mk中,它清除了上百个除LOCAL_PATH外的变量,因而LOCAL_PATH通常被认为是一个编译模块的开始标志。

LOCAL_MODULE := baidushurufa
LOCAL_MODULE 必须定义,以表示Android.mk中的每一个模块,名字必须唯一,不能包含空格。

LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_CLASS 标识了所编译模块最后放置的位置,如果不指定,不会放到系统中,之后放在最后的obj目录下的对应目录中。

LOCAL_SRC_FILES := $(LOCAL_MODULE)
$(COMMON_ANDROID_PACKAGE_SUFFIX))
LOCAL_SRC_FILES变量必须包含将要打包如模块的C/C++ 源码,这里将模块打包为apk包

LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE指apk的签名,可以有:
media 使用media签名文件签名
platform 使用平台签名文件签名
shared 使用shared签名文件签名
PRESIGNED 如果文件已经签过名,不需要重新签名,则使用PRESIGNED。

LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_TAGS 是指定在什么版下才会编译这个Android.mk
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译

LOCAL_DEX_PREOPT := false
这个变量设置为false可以使整个系统使用提前优化的时候,某个app不使用提前优化。在Android.mk中给该变量赋值为false,则编译生成的文件没有oat文件,也就意味着没有被提前优化。

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
指定当前模块的后缀。一旦指定,系统在产生目标文件时,会以模块名加后缀来创建目标文件

LOCAL_PREBUILT_JNI_LIBS:
提取so文件编译生成动态库

include $(BUILD_PREBUILT)
BUILD_PREBUILT :该模块已经预先编译
它负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并决定编译为什么。
BUILD_STATIC_LIBRARY :编译为静态库。
BUILD_SHARED_LIBRARY :编译为动态库
BUILD_EXECUTABLE :编译为Native C可执行程序
BUILD_SHARED_LIBRARY :是Build System提供的一个变量,指向一个GNU Makefile Script。
NDK还定义了很多其他的BUILD_XXX_XXX变量,它们用来指定模块的生成方式。

在device\amlogic\common\core_amlogic.mk中的PRODUCT_PACKAGE添加LOCAL_MODULE。

这样就将一个百度输入法内置到系统中了,如果想要让系统默认使用此输入法,需要修改Settings参数可以参考另一篇https://blog.csdn.net/qq_33826580/article/details/80854636

相关标签: android系统