android.mk中引用第3方 jar包的方法

本文详细介绍了在Android应用开发过程中如何通过Android.mk文件引用并正确引入第三方Jar包,包括定义别名、指定包路径及配置预构建静态Java库等关键步骤,确保应用能顺利编译并利用外部依赖。

在某一应用程序中有时候需要引用第三方jar包,那么怎么才能在编译app的时候把该jar包引入进入呢?

在该app下的Android.mk文件中添加如下语句:

------------------------------start-----------------------------------------------

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := user eng

########################################
LOCAL_STATIC_JAVA_LIBRARIES := lib3party                  //定义引用名
########################################

....

include $(BUILD_PACKAGE)

###############################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := lib3part:libs/3part.jar                        // 引用名:jar包名
include $(BUILD_MULTI_PREBUILT)
################################################################

 

--------------------------------end----------------------------------------------------------------

 

以上红色字体部分为添加jar包的语句,其中关键在于LOCAL_STATIC_JAVA_LIBRARIES := libarity和LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:lily.jar 这两句。

libarity为jar包的别名,可以随便取,只要与下面相对应就行。但是后面冒号后面的那个jar包名字就必须写你需要引入的jar包名字。jar包应该方在工程的根目录下,也就是与你要编译的app的src,res,Android.mk文件同级的目录。


<think> 我们讨论了在Android构建系统中声明预编译Java库的方法,用户现在明确询问在Android.mk文件中引用预编译jar方法。根据之前的引用和回答,我们可以总结如下: 在Android.mk引用预编译jar,需要定义一个预编译模块。关键点括: 1. 使用`LOCAL_MODULE_CLASS := JAVA_LIBRARIES`指定模块类型 2. `LOCAL_MODULE`指定模块名(通常与jar同名,但不需要带后缀) 3. `LOCAL_SRC_FILES`指定jar文件名(需要带后缀) 4. 使用`include $(BUILD_PREBUILT)`来构建预编译模块 具体步骤: 1. 设置LOCAL_PATH 2. 清除旧变量(include $(CLEAR_VARS)) 3. 设置模块类为JAVA_LIBRARIES 4. 指定模块名和源文件(jar) 5. 设置其他属性(如TAGS等) 6. 含预编译构建模板 示例代码(根据引用[1][3]整理): ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # 指定模块类型为Java库 LOCAL_MODULE_CLASS := JAVA_LIBRARIES # 模块名(不带后缀),例如:com.fingerprints.extension LOCAL_MODULE := com.fingerprints.extension # 指定jar文件名(带后缀),该文件应放在LOCAL_PATH目录下 LOCAL_SRC_FILES := $(LOCAL_MODULE).jar # 标记为可选模块 LOCAL_MODULE_TAGS := optional # 使用预编译构建 include $(BUILD_PREBUILT) ``` 注意: - 确保jar文件放在与Android.mk相同的目录(或通过路径指定),如引用[2]提到,通常放在与mk文件同级目录。 - 如果需要在系统中含此模块,在设备mk文件中添加:`PRODUCT_PACKAGES += com.fingerprints.extension`(引用[3]提到)。 引用[3]还提到,预编译模块可以解决复制文件无法建立依赖关系的问题,并且对于需要系统签名的jar,这种方法更合适。 如果是在应用中使用预编译jar(而非系统级),可以直接在应用的Android.mk中通过LOCAL_STATIC_JAVA_LIBRARIES或LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES引用(但注意前者用于源码编译,后者用于预编译)。不过,用户问题明确是引用预编译jar,所以我们主要关注预编译模块的声明。 另外,引用[4]提到在Android.bp中的类似做法,但用户询问的是Android.mk,因此我们集中在mk文件上。 相关问题生成: 1. 如何在Android.mk引用第三jar(非预编译)? 2. 预编译jar和动态jarAndroid构建中的区别? 3. 如何解决预编译jar在编译时的依赖问题? </think> ### 在 Android.mk引用预编译 JAR 方法 #### 1. **基本声明结构** ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # 关键声明:指定为 Java 库类型 LOCAL_MODULE_CLASS := JAVA_LIBRARIES # 必须声明为 JAVA_LIBRARIES[^1][^3] # 模块名称(不含.jar后缀) LOCAL_MODULE := com.fingerprints.extension # JAR 文件名(带后缀) LOCAL_SRC_FILES := $(LOCAL_MODULE).jar LOCAL_MODULE_TAGS := optional # 关键步骤:使用预编译模板 include $(BUILD_PREBUILT) ``` #### 2. **文件路径配置** - JAR 文件必须放置在 **`LOCAL_PATH` 目录**下[^2] - 目录结构示例: ``` project_root/ ├── prebuilts/ │ ├── com.fingerprints.extension.jar # JAR文件 │ └── Android.mk # 声明文件 ``` #### 3. **依赖关系处理** 在依赖该 JAR 的模块中声明: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # ... 其他配置 ... # 添加预编译 JAR 依赖 LOCAL_STATIC_JAVA_LIBRARIES := com.fingerprints.extension # ... 其他配置 ... include $(BUILD_PACKAGE) # 或 BUILD_JAVA_LIBRARY ``` #### 4. **系统级集成** 在设备 Makefile 中添加到系统镜像: ```makefile # device/vendor/product/product.mk PRODUCT_PACKAGES += \ com.fingerprints.extension # 模块名称需匹配[^3] ``` #### 5. **常见问题解决 **问题:`unexpected LOCAL_MODULE_CLASS` 错误** ```makefile # 错误示例 ↓ LOCAL_MODULE_CLASS := APPS # 正确修正 ↓ LOCAL_MODULE_CLASS := JAVA_LIBRARIES # 必须为JAVA_LIBRARIES[^1][^3] ``` **问题:JAR 未被正确打** ```makefile # 在设备配置文件中添加 PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/com.fingerprints.extension.jar:system/framework/com.fingerprints.extension.jar ``` > **最佳实践**: > 1. 保持 `LOCAL_MODULE` 名称与 JAR 文件名一致(不含后缀)[^2] > 2. 系统级 JAR 应放在 `system/framework/` 目录 > 3. 使用 `mm` 命令单独编译验证模块: > ```bash > cd path/to/module > mm > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值