Android.mk编译出jar

Android.mk编译jar及两种方式区别
博客介绍了使用Android.mk编译出jar的相关内容,包括Android.mk文件配置,还对比了BUILD_JAVA_LIBRARY和BUILD_STATIC_JAVA_LIBRARY两种编译方式。前者编译出的jar包含DEX格式文件,Eclipse无法识别;后者编译出的jar包含单独class文件,可在Eclipse使用但有兼容性隐患。
部署运行你感兴趣的模型镜像

Android.mk编译出jar

Android.mk文件配置

LOCAL_PATH:= $(call my-dir)
#make jar
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := mytestjar
include $(BUILD_JAVA_LIBRARY)

#include $(BUILD_STATIC_JAVA_LIBRARY)

在当前项目中执行mm命令(在此之前要执行sourse build/envsetup.sh

BUILD_JAVA_LIBRARY和BUILD_STATIC_JAVA_LIBRARY区别

  • BUILD_JAVA_LIBRARY编译出来的jar包,里面是DEX格式的文件,如果用户想用这个jar包放到Eclipse来做Android APP的开发,Eclipse是不认识这种格式的文件的,通常会报错:Conversion to Dalvik format failed with error 1
  • BUILD_STATIC_JAVA_LIBRARY编译出来的jar包,里面每个java文件对应的class文件都单独存在,顾名思义,每个java文件里面用到的变量都被静态编译到了class内部,这种格式的jar包可以在Eclipse里面导入并正常使用,但是可能存在一定的兼容性隐患

您可能感兴趣的与本文相关的镜像

ComfyUI

ComfyUI

AI应用
ComfyUI

ComfyUI是一款易于上手的工作流设计工具,具有以下特点:基于工作流节点设计,可视化工作流搭建,快速切换工作流,对显存占用小,速度快,支持多种插件,如ADetailer、Controlnet和AnimateDIFF等

<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 > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值