Android.mk 文件Jar包导入问题

Android.mk文件 导入jar包报

Settings文件夹中新建libs目录,将jar包放入

 

 

 

 

 

 

 

 

 

 

报错:make: *** No rule to make target `packages/apps/Settings/tests/libs/pl2303g_driver.jar', needed by `out/target/common/obj/JAVA_LIBRARIES/pl2303g_driver_intermediates/classes.jack'.  Stop.make: *** Waiting for unfinished jobs....

思考:编译过程中没有在tests文件夹做过操作,为何会在tests目录下产生错误

原因:

 

 

# Use the following include to make our test apk.

ifeq (,$(ONE_SHOT_MAKEFILE))

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

endif

这段代码中的 makefiles将寻找jar包的路径指向了tests目录,我添加的jar包使用的是相对路径libs/pl2303g_driver.jar,按照顺序在这之后执行,就会在tests里面寻找libs/pl2303driver.jar,就会报错找不到。

过程:在Android.mk中添加log 输出LOCAL_PATH

 

 

 

输出:

 

 

Tips:Android.mk 文件中添加log的方法:输出字符串的方式:$(warning string)或者$(error string)  $(info string),输出变量方式为:$(warning $(var));用error方式的话打印完就直接退出来,停止编译。

解决方案:

将我添加的导入代码放在执行makefile 之前,按照顺序先执行

 

 

 

补充知识点:(1) LOCAL_PATH:= $(call my-dir) 一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。宏函数’my-dir’,由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

(2) Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始,以include $(BUILD_XXX)结束。

(2.1) include $(CLEAR_VARS)

CLEAR_VARS指的是clear_vars.mk,由编译系统提供,它会让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中, 所有的变量都是全局的。

(2.2) include $(BUILD_PACKAGE)      # Tell it to build an APK

$(BUILD_PACKAGE)是用来编译生成package/app/下的apk。还有其他几种编译情况:

            include $(BUILD_STATIC_LIBRARY)    表示编译成静态库;

            include $(BUILD_SHARED_LIBRARY)    表示编译成动态库;

            include $(BUILD_EXECUTABLE)        表示编译成可执行程序;

(3) LOCAL_MODULE_TAGS := optional

解析:LOCAL_MODULE_TAGS :=user eng tests optional;

            user:  指该模块只在user版本下才编译;

            eng:  指该模块只在eng版本下才编译;

            tests: 指该模块只在tests版本下才编译;

            optional:指该模块在所有版本下都编译;

取值范围debug eng tests optional samples shell_ash shell_mksh。注意不能取值user,如果要预装,则应定义core.mk。

(4) LOCAL_SRC_FILES := $(call all-java-files-under, src)

(4.1) 如果要包含的是java源码的话,可以调用all-java-files-under得到。(这种形式来包含local_path目录下的所有java文件);

(4.2) 当涉及到C/C++时,LOCAL_SRC_FILES变量就必须包含将要编译打包进模块中的C或C++源代码文件。注意,在这里你可以不用列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。all-java-files-under宏的定义是在build/core/definitions.mk中。

(5) LOCAL_PACKAGE_NAME := Settings

    package的名字,这个名字在脚本中将标识这个app或package。

(6) LOCAL_CERTIFICATE := platform

LOCAL_CERTIFICATE 后面是签名文件的文件名,说明Settings.apk是一个需要platform

key签名的APK

(7) include $(BUILD_PACKAGE)

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

加载当前目录下的所有makefile文件,all-makefiles-under会返回一个位于当前'my-dir'路径的子目录中的所有Android.mk的列表。all-makefiles-under宏的定义是在build/core/definitions.mk中。

编译此Android.mk文件最后就生成了Settings.apk。

 

posted @   一颗苹果!!  阅读(701)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示