关于如何在android系统平台中使用AAR包的问题

在系统平台中使用AAR包和我们平常在AS中使用AAR包的方法不太一样!在使用AS引入AAR包时,只需要在gradle文件中导入即可,在系统平台中,所有包的导入和引用都依靠.mk文件,所以想要在系统平台开发中使用AAR包需要我们修改原来的Android.mk文件!!

先看一下我编写的Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_STATIC_JAVA_AAR_LIBRARIES := opencv_aar
LOCAL_STATIC_JAVA_LIBRARIES := \
    android-support-v4\
    android-support-v7-appcompat
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
    framework/support/v7/appcompat/res
LOCAL_AAPT_FLAGS := \
--auto-add-overlay --extra-packages android.aupport.v7.appcompat
LOCAL_PACKAGE_NAME := AarTest
include $(BUILD_PACKAGE)

include $(CLEAR_VARS)
LOCAL_PREBUILD_STATIC_JAVA_LIBRARIES := opencv_aar:libs/openlib-release.aar
include $(BUILD_MULTI_PREBUILT)

主要代码:

LOCAL_STATIC_JAVA_AAR_LIBRARIES := opencv_aar

使用LOCAL_STATIC_JAVA_AAR_LIBRARIES 变量指定导入AAR包的名称,这个编译好的包名称跟我们实际放入libs目录下的aar包的名称可以不一样,这个名称是通过预编译之后生成的包名称,这个名称是由我们自己指定的!!

include $(CLEAR_VARS)
LOCAL_PREBUILD_STATIC_JAVA_LIBRARIES := opencv_aar:libs/openlib-release.aar
include $(BUILD_MULTI_PREBUILT)

这三行代码很关键,这里通过预编译将libs/openlib-release.aar的aar包编译为名称opencv_aar包,当然你也可以理解为模块,只不过这个模块是由aar包编译生成得到的

如果你的Android.mk文件也是这个编写的,那么恭喜你,你可以使用AAR包中的java代码和so库了(如果有so库的话),但是你还是不可以使用aar包中的R文件资源,如果需要使用的话,那么你需要在LOCAL_AAPT_FLAGS 变量后面添加AAR包中的包名,这AAR打包过程中,会有一个清单文件打包进去,只需要拷贝清单文件中package的包名并赋值给LOCAL_AAPT_FLAGS 即可!!!

在实际使用过程中可以会出现AAR中要求的最小SDK和targetSDK版本与当前应用的版本不匹配问题,修改当前版本以使其匹配AAR中的版本要求

好了,关于如何在系统平台中导入aar包的问题就说到这里,有兴趣的朋友可以关注我,有什么问题大家一起讨论!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Android 9及以上版本Android源码使用Soong构建系统管理,需要使用`Android.bp`文件来导入aar。以下是在framework层使用`Android.bp`文件导入aar的步骤: 1. 在frameworks/base目录下创建一个`prebuilts`文件夹,并在该文件夹下创建一个`libs`文件夹。 2. 将aar复制到`libs`文件夹。 3. 在frameworks/base下创建一个`Android.bp`文件,并添加以下代码: ``` prebuilt_aar { name: "your-aar-name", aar: "prebuilts/libs/your-aar-file-name.aar", //aar含的jar文件 jars: [ "your-aar-name.jar", ], //aar含的so库 shared_libs: [ "lib1", "lib2", ], //aar含的资源文件 res: [ "res1", "res2", ], //aar含的assets文件 assets: [ "assets1", "assets2", ], //aar含的jni库 target: { android: { //jni库的路径 srcs: [ "jni/armeabi-v7a/lib1.so", "jni/armeabi-v7a/lib2.so", ], }, }, } ``` 其,`your-aar-name`是你要定义的aar的名称,`your-aar-file-name`是你要导入aar文件名,`lib1`和`lib2`是aar所依赖的so库的名称,`res1`和`res2`是aar含的资源文件的名称,`assets1`和`assets2`是aar含的assets文件的名称。 4. 在`Android.bp`文件添加以下代码,将aar引入到编译系统: ``` cc_defaults { name: "your-module-name_defaults", shared_libs: [ "your-aar-name", ], //其他配置项 } ``` 其,`your-module-name`是你要定义的模块名。 5. 重新编译Android源码,即可在framework层使用aar提供的功能。 需要注意的是,由于aar可能含了一些Android SDK已经存在的类,为了避免出现重复定义的情况,建议在使用aar的类时,使用全限定名来引用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值