Android P系统编译Android.mk导入jar包和aar包

在Android 9.0 (Pie)系统编译环境中,为apk导入第三方库如aar和jar包是必要的。对于aar包,需要在模块的libs目录存放aar文件,然后在Android.mk中指定LOCAL_STATIC_JAVA_AAR_LIBRARIES,并添加构建规则。对于jar包,同样放入libs目录,更新Android.mk,设置LOCAL_STATIC_JAVA_LIBRARIES并构建。对于so文件,直接复制到system/lib和lib64目录,或使用PRODUCT_COPY_FILES指令进行复制。

安卓开发中,有时候需要在系统环境下开发apk,导入第三方jar包或者so库。

导入aar包:

1、在模块根目录下新建文件夹libs,将需要aar包拷贝进libs.

2、在Android.mk文件加入:
LOCAL_STATIC_JAVA_AAR_LIBRARIES := demo

3、在include $(BUILD_PACKAGE)后面加入:
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := demo:libs/demo.aar
include $(BUILD_MULTI_PREBUILT)

导入jar包:

1、在模块根目录下新建文件夹libs,将需要jar包拷贝进libs.

2、在Android.mk文件加入:
LOCAL_STATIC_JAVA_LIBRARIES := \demo
3、在include $(BUILD_PACKAGE)后面加入:
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \demo:libs/demo.jar
include $(BUILD_MULTI_PREBUILT)

导入so文件:

需要的so文件简单点的做法是将文件拷贝到system/lib下和system/lib64下面。
可以通过PRODUCT_COPY_FILES 进行拷贝:
PRODUCT_COPY_FILES +=
device/qom/userdata/libs/demo1.so:system/lib/demo1.so
device/qom/userdata/libs/demo2.so:system/lib/demo2.so

下面给出一个导入aar包,jar包的完整Android.mk文件

ifneq ($(TARGET_BUILD_PDK), true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_PACKAGE_NAME := DemoApp
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
LOCAL_PRIVILEGED_MODULE := true
LOCAL_USE_AAPT2 := true
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_DEX_PREOPT := false
LOCAL_STATIC_ANDROID_LIBRARIES += \
    androidx.car_car \
    androidx-constraintlayout_constraintlayout
//定义jar包名称
LOCAL_STATIC_JAVA_LIBRARIES := \demo_jar
//定义aar包名称
LOCAL_STATIC_JAVA_AAR_LIBRARIES := \demo_aar
include $(BUILD_PACKAGE)
//指定jar包目录和aar目录
include $(CLEAR_VARS) 
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
								demo_jar:libs/demo_jar.jar \
								demo_aar:libs/demo_aar.aar
include $(BUILD_MULTI_PREBUILT)
endif

一些导入jar的例子:

LOCAL_STATIC_ANDROID_LIBRARIES := \
    android-support-v7-recyclerview \
    android-support-v7-appcompat \
    android-support-percent \

LOCAL_STATIC_JAVA_LIBRARIES:=glidelibs\
    mediaplayer_gsonlib\
    libvlc\
    fastjsonlib\
    eventbuslib\
    fmlib\
    kwmusiclib\
    speechcontrollib\
    tingphoneopensdkbaby\
    litepal\

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := glidelibs
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/glide-3.7.0.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := mediaplayer_gsonlib
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/gson-2.2.4.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := fastjsonlib
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/fastjson-1.2.56.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := eventbuslib
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/eventbus-3.1.1.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := fmlib
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/client_sdk_1.3.6.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := kwmusiclib
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/kwmusic-autosdk-v2.0.6.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := speechcontrollib
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/SpeechControllerBaby_1.0.6.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := tingphoneopensdkbaby
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/TingPhoneOpenSDK_6.3.1.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)


include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := litepal
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SRC_FILES := MediaPlayer/libs/litepal-3.0.0.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)
<think> 首先,用户的问题是:“我想查找在Android.mk文件中引入libs文件夹下jar的方法”。用户提供了几个引用,我需要参考这些引用来回答。 回顾引用内容: - **引用[1]**:讨论了在Android.mk中集成第三方jarso。提到可以使用java_importjar_library。示例:`java_import{ name:"testlib_jar", jars:["libs/test.jar"], }`。 - **引用[2]**:解释了在Android.mk中添加第三方jar文件的方法。提到使用LOCAL_STATIC_JAVA_LIBRARIESLOCAL_PREBUILT_STATIC_JAVA_LIBRARIES。示例:`LOCAL_STATIC_JAVA_LIBRARIES := libarity` `include $(BUILD_MULTI_PREBUILT)`。 - **引用[3]**:讨论了从Android.mkAndroid.bp的转换,但强调了Android.mk中如何引入jarso库。 - **引用[4]**:展示了在Android.bp中引入AndroidX库、aar文件so库。 - **引用[5]**:涉及Android.mkAndroid.bp的共享库处理。 用户的问题是特定的:在Android.mk文件中引入libs文件夹下的jar。我需要基于这些引用提供方法。 关键点: - 在Android.mk中,引入jar通常使用`LOCAL_STATIC_JAVA_LIBRARIES`变量一个预构建模块。 - 步骤括: 1. 定义jar的预构建模块。 2. 在应用的Android.mk中引用这个模块。 从引用[2]:"LOCAL_STATIC_JAVA_LIBRARIES := libarity" "include $(BUILD_MULTI_PREBUILT)"。 更详细的步骤: - 创建一个预构建模块来jar文件。 - 例如: ``` include $(CLEAR_VARS) LOCAL_MODULE := libarity LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_SRC_FILES := $(call my-dir)/libs/test.jar include $(BUILD_PREBUILT) ``` 然后,在应用的模块中: ``` LOCAL_STATIC_JAVA_LIBRARIES := libarity ``` 引用[2]明确说:"LOCAL_STATIC_JAVA_LIBRARIES := libarity" "jar应该放在工程的根目录下",但用户指定libs文件夹,所以可能需要调整路径。 在我的回答中,我需要: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 确保内容真实可靠。 - 在回答末尾生成相关问题。 - 对于引用的段落,自然地添加引用标识,如[^1]。 系统指令还说:生成相关问题,并在回答中引用的段落末尾添加引用标识。 回答结构: 1. 解释基本方法。 2. 提供代码示例。 3. 基于引用添加引用标识。 4. 最后生成相关问题。 示例代码: 基于引用[2]: ``` include $(CLEAR_VARS) LOCAL_MODULE := myjar LOCAL_SRC_FILES := libs/test.jar LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_MODULE_TAGS := optional include $(BUILD_PREBUILT) ``` 然后在应用的Android.mk中: ``` include $(CLEAR_VARS) ... LOCAL_STATIC_JAVA_LIBRARIES := myjar ... include $(BUILD_PACKAGE) ``` 确保路径正确。jar路径是相对于Android.mk文件的。 在引用中,提到jar放在根目录,但用户指定libs文件夹,所以路径应为`$(LOCAL_PATH)/libs/test.jar`或类似。 在Android.mk中,`$(LOCAL_PATH)`是当前模块的路径。 所以,如果jar在libs文件夹中,并且Android.mk在应用目录中,那么LOCAL_SRC_FILES可以是`libs/test.jar`。 现在,整合引用: - 引用[1]提到java_import,但那是在Android.bp中,不是Android.mk。 - 引用[2]直接相关:如何添加jar文件。 - 其他引用次要。 所以,主要参考引用[2]。 回答步骤: 1. 介绍在Android.mk引入jar的基本方法。 2. 提供详细代码示例。 3. 解释关键点。 4. 添加引用标识。 5. 生成相关问题。 相关问题建议: - 如何引入so库? - Android.mkAndroid.bp的区别? - 常见错误调试方法? </think> ### 在Android.mk文件中引入libs文件夹下jar的方法 在Android开发中,使用Android.mk文件引入libs文件夹下的jar是一种常见操作,主要用于预构建Java库的集成。以下是基于引用内容的详细步骤示例。关键点是利用`LOCAL_STATIC_JAVA_LIBRARIES`变量声明jar别名,并通过预构建模块(`BUILD_PREBUILT`)将其链接到主模块中。jar应放置在工程的libs文件夹下(通常与Android.mk文件同级或子目录),路径需正确配置以避免编译错误。 #### 步骤说明 1. **定义jar的预构建模块**:通过`include $(CLEAR_VARS)`清除变量,指定jar的别名、路径类类型。 2. **在主模块中引用jar**:在应用的Android.mk文件中,使用`LOCAL_STATIC_JAVA_LIBRARIES`添加jar别名。 3. **含预构建规则**:确保使用`include $(BUILD_PREBUILT)`编译预构建模块。 4. **路径配置**:jar路径需基于`$(LOCAL_PATH)`(当前模块路径)指定,例如`$(LOCAL_PATH)/libs/test.jar`。如果jar在根目录下的libs文件夹中,路径可直接写为`libs/test.jar`[^2]。 #### 代码示例 假设你的工程结构如下: ``` project-root/ ├── libs/ │ └── test.jar ├── src/ ├── res/ └── Android.mk ``` 在Android.mk文件中添加以下内容: ```makefile # 步骤1: 定义jar的预构建模块 include $(CLEAR_VARS) LOCAL_MODULE := testlib_jar # jar的别名,可自定义(例如"testlib_jar",但需全局唯一) LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_SRC_FILES := libs/test.jar # 路径相对于Android.mk文件,libs文件夹下 include $(BUILD_PREBUILT) # 启用预构建规则[^2] # 步骤2: 在应用的Android.mk中引用该模块 include $(CLEAR_VARS) LOCAL_PACKAGE_NAME := MyApp # 应用名称 LOCAL_SRC_FILES := $(call all-java-files-under, src) # 应用源码 LOCAL_STATIC_JAVA_LIBRARIES := testlib_jar # 引用别名testlib_jar include $(BUILD_PACKAGE) # 编译应用 ``` #### 关键注意事项 - **jar别名**:`LOCAL_MODULE`指定的别名在`LOCAL_STATIC_JAVA_LIBRARIES`中必须一致,且不能与其他模块冲突。 - **路径处理**:如果libs文件夹不在Android.mk同级目录,路径需调整为相对路径(如`../libs/test.jar`),并确保文件存在。 - **兼容性**:此方法适用于Android.mk文件,如果是Android.bp文件,需使用`java_import``jar_library`(如引用[1]所述),但用户需求明确为Android.mk。 - **常见错误**: - 路径错误:编译时若提示"file not found",检查`LOCAL_SRC_FILES`路径是否准确。 - 别名未定义:确保预构建模块在主模块之前声明。 - 多jar处理:如需引入多个jar,在`LOCAL_STATIC_JAVA_LIBRARIES`中用空格分隔别名(如`testlib_jar1 testlib_jar2`),并为每个jar创建独立预构建模块[^2][^3]。 #### 引用说明 本方法基于Android.mk的预构建机制,jar被声明为静态Java库后,编译时自动打进APK。引用[2]详细描述了LOCAL_STATIC_JAVA_LIBRARIES路径配置[^2],引用[3]强调了Android.mkAndroid.bp的迁移思路,但核心步骤保持一致[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值