zoukankan      html  css  js  c++  java
  • Android上安装第三方库

    在Android sdk中安装预安装第三方的(动态,静态)库,到系统中,方便模块无差别的使用。

    Android.mk

    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS := optional
    LOCAL_PREBUILT_LIBS := lib/libAirFlyWfd.so
    LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
    include $(BUILD_MULTI_PREBUILT)

    编译安装后系统会拷贝创建如下三个文件

    out	argetproductdolphin-fvd-p1systemliblibAirFlyWfd.so
    out	argetproductdolphin-fvd-p1objliblibAirFlyWfd.so
    out	argetproductdolphin-fvd-p1objSHARED_LIBRARIESlibAirFlyReceiver_intermediatesexport_includes

    其中

    out	argetproductdolphin-fvd-p1systemliblibAirFlyWfd.so
    是用来打包到arm板子上的。
    out	argetproductdolphin-fvd-p1objliblibAirFlyWfd.so
    是用来供其他模块编译的时候链接调用的。

    需要使用时只需要想连接其他系统库一样加入

    LOCAL_SHARED_LIBRARIES :=
    libAirFlyWfd

    -----------------------------------以下是采坑的过程---------------------------
    按照将所网上的信息,还有以下两种方式,但是经过测试在android4.4.2上都不能正常使用

    方法一 使用include $(BUILD_PREBUILT)
    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS := optional
    LOCAL_MODULE := libAirFlyWfd
    LOCAL_MODULE_CLASS :=SHARED_LIBRARIES
    LOCAL_SRC_FILES := lib/libAirFlyWfd.so
    include $(BUILD_PREBUILT)

    这个方法最后的结果是如下,

    
    
    out	argetproductdolphin-fvd-p1systemliblibAirFlyWfd
    out	argetproductdolphin-fvd-p1objliblibAirFlyWfd
    out	argetproductdolphin-fvd-p1objSHARED_LIBRARIESlibAirFlyReceiver_intermediatesexport_includes

    打包到两个lib目录下的文件没有.so后缀,这样导致其他模块调用libAirFlyWfd这个库的候在

    out	argetproductdolphin-fvd-p1objlib目录下找不到libAirFlyWfd.so而报错
    make: *** No rule to make target 'out/target/product/dolphin-fvd-p1/obj/lib/libAirFlyWfd.so'

    同时打包到板子上的
    out	argetproductdolphin-fvd-p1systemliblibAirFlyWfd这个文件也没有法识别成动态库

    如果改成

    LOCAL_MODULE := libAirFlyWfd.so
    安装完后如下
    out	argetproductdolphin-fvd-p1systemliblibAirFlyWfd.so
    out	argetproductdolphin-fvd-p1objliblibAirFlyWfd.so
    out	argetproductdolphin-fvd-p1objSHARED_LIBRARIESlibAirFlyReceiver.so_intermediatesexport_includes

    库文件名称是ok的,但是

    libAirFlyReceiver.so_intermediates目录名称不对,多了.so导致其他模块调用时找不到export_includes
    make: *** No rule to make target 'out/target/product/dolphin-fvd-p1/obj/SHARED_LIBRARIES/libAirFlyWfd_intermediates/export_includes'

    方法二 使用include $(PREBUILT_SHARED_LIBRARY)

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    LOCAL_MODULE :=libAirFlyWfd.so
    LOCAL_SRC_FILES := lib/libAirFlyWfd.so
    include $(PREBUILT_SHARED_LIBRARY) 
    按照以上方法执行Android.mk后没有任何反应,android 4.4.2上应该没有定义
    include $(PREBUILT_SHARED_LIBRARY) 对应的操作方法,貌似是NDK r5以后才支持这个操作,具体没测试过。
    最后参考
    https://blog.csdn.net/lizhiguo0532/article/details/7219349
    使用
    include $(BUILD_MULTI_PREBUILT)方法才ok。

    ------------------------------------------------------------
    以上是安装成系统的共享库,方便所有模块使用。
    如果只是某个模块单独使用,可以在对应的Android.mk中直接使用
    LOCAL_LDFLAGS += $(LOCAL_PATH)/lib/libAirFlyWfd.so
    来指定库的路径。

    同时别忘了将该库拷贝(PRODUCT_COPY_FILES)到/system/lib/下,才能烧录到板子,否则依赖此库的应用在板子上都无法正常启动。
    
    
  • 相关阅读:
    MATLAB accumarray
    函数rand,randn,randi
    bsxfun
    sub2ind函数
    MAX
    & 和 &&
    matlab函数int2str, num2str, str2num
    ASCII对照表
    STM32的ADC配置
    单节锂电池基本知识
  • 原文地址:https://www.cnblogs.com/tid-think/p/11078692.html
Copyright © 2011-2022 走看看