Android.mk中引用第3方动态库

本文详细解析了Android.mk文件的配置方法,特别强调了在Android环境中正确引用第三方动态库的注意事项,避免编译错误。通过实例展示了如何设置LOCAL_PATH、LOCAL_MODULE、LOCAL_SRC_FILES等关键变量,并说明了LOCAL_SHARED_LIBRARIES的正确使用方式。
AI助手已提取文章相关产品:

Android.mk 文件内容:

 

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES:= \
  testH264VideoStreamer.cpp


LOCAL_MODULE := live555_stream
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_STATIC_LIBRARIES := libcutils libc

 

 

LOCAL_C_INCLUDES += $(LOCAL_PATH)/liveMedia/include \
             $(LOCAL_PATH)/groupsock/include \
             $(LOCAL_PATH)/UsageEnvironment/include \
             $(LOCAL_PATH)/BasicUsageEnvironment/include


LOCAL_SHARED_LIBRARIES := \
            libcutils libutils


#LOCAL_SHARED_LIBRARIES := liblive555
LOCAL_LDFLAGS += $(LOCAL_PATH)/liblive555.so

#LOCAL_STATIC_LIBRARIES += libstlport_static libstdc++ libm libc

include $(BUILD_EXECUTABLE)

 

注意: 引用第三方动态库*.so, 不能用LOCAL_SHARED_LIBRARIES := liblive555这种方式,否则会报错:

         make: *** No rule to make target `out/target/product/rk312x/obj/SHARED_LIBRARIES/liblive555_intermediates/export_includes', needed by `out/target/product/rk312x/obj/EXECUTABLES/live555_stream_intermediates/import_includes'.  Stop.

        只有系统的库,才能这样引用。切记! 

文件目录结构:

 

 这个问题郁闷我半个多小时,特此写下来,与大家共享,也算是记了笔记了。

 

转载于:https://www.cnblogs.com/Jade2009/p/5667899.html

您可能感兴趣的与本文相关内容

<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包和动态jar包在Android构建中的区别? 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、付费专栏及课程。

余额充值