首页 > 编程知识 正文

Android源码 app预制带so和assets文件的aar包sdk

时间:2023-05-06 20:28:51 阅读:194152 作者:1958

1.app引用aar包

 

//不带so和assets目录预制方法如下LOCAL_STATIC_JAVA_AAR_LIBRARIES += dmssdkr//有些还需要导aar包(com.sensetime.dms)LOCAL_AAPT_FLAGS := --auto-add-overlayLOCAL_AAPT_FLAGS += --extra-packages com.sensetime.dmsinclude $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := dmssdkr:libs/dms-release.aarinclude $(BUILD_MULTI_PREBUILT)--------------------------------------------//带so的还需要在app Android.mk中添加如下LOCAL_JNI_SHARED_LIBRARIES += libjni_dms_sdkLOCAL_SHARED_LIBRARIES += libdms_sdk_c_api//so的预制方法如下include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE_SUFFIX := .soLOCAL_MODULE := libdms_sdk_c_apiLOCAL_MODULE_CLASS := SHARED_LIBRARIESLOCAL_SRC_FILES_arm64 := libs/arm64-v8a/libdms_sdk_c_api.soLOCAL_MODULE_TARGET_ARCHS:= arm64LOCAL_MULTILIB := 64include $(BUILD_PREBUILT)---------------------------------------------//aar有用assets,还需要app拷贝sdk的assets目录,到src同级目录并指定assets路径LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets 2.app引用内置有源码的sdk

直接引用dms jar包或者aar包都无法打包so库和assets文件,
LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets,这个会在jar里编译报错

因此实现为:
1.apk 引用 dms编译生成的jar包(SensetimeDMS),SensetimeDMS只包含sdk中的src文件

2.SensetimeDMS jar不直接引用so库,apk使用jar相当于增加class类而已,引用放在app中,使用如下这种方式引用so
LOCAL_JNI_SHARED_LIBRARIES += libjni_dms_sdk
LOCAL_SHARED_LIBRARIES += libdms_sdk_c_api

3.assets文件,jar包无法使用到,需要把jar的assets文件,拷贝到app中使用LOCAL_ASSET_DIR来引用
LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets

4.sdk里面的库打包到system/lib64里面去,apk引用后,会在lib里生成链接

Sample如下

//sdk目录如下,可在Android Studio中生成aar包,aar包使用release版本-rw-rw-r-- 316 7月 5 16:33 AndroidManifest.xml-rw-rw-r-- 950 7月 16 14:24 Android.mkdrwxrwxr-x 4096 7月 5 16:33 assetsdrwxrwxr-x 4096 7月 5 16:33 libsdrwxrwxr-x 4096 7月 5 16:33 resdrwxrwxr-x 4096 7月 5 16:33 src//android源码目前不知道怎么编译aar包,因此这里预制为jar包,因为不使用res//BUILD_STATIC_JAVA_LIBRARY不支持LOCAL_ASSET_DIR,会编译报错,这里在app里引用//so也放在app李引用不再jar引用,这里的jar纯粹只有src文件include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-java-files-under, src)#LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets#LOCAL_JNI_SHARED_LIBRARIES := libjni_dms_sdk#LOCAL_SHARED_LIBRARIES := libdms_sdk_c_apiLOCAL_MODULE_TAGS := optionalLOCAL_MODULE := SensetimeDMSLOCAL_CERTIFICATE := platforminclude $(BUILD_STATIC_JAVA_LIBRARY) //app Android.mk写法如下LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-java-files-under, src) //src目录的java文件LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res //res文件LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets //引入assets文件LOCAL_STATIC_JAVA_LIBRARIES += SensetimeDMS //引用sdk中的JAVA_LIBRARIESLOCAL_JNI_SHARED_LIBRARIES += libjni_dms_sdk //应用sdk需要的soLOCAL_SHARED_LIBRARIES += libdms_sdk_c_apiLOCAL_PROGUARD_ENABLED := disabled //不用混淆LOCAL_CERTIFICATE := platform // system/appLOCAL_PACKAGE_NAME := SensetimeDmsSampleinclude $(BUILD_PACKAGE)include $(call all-makefiles-under, $(LOCAL_PATH))

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。