<Android开发> 集成so库
<Android开发> HAL层集成第三方so库
一 前言
在笔者的另一个文章<Android开发> HAL层集成第三方so库 分析了如何在hal层将第三方的so库文件集成到系统中;本文其实与其是差不多,只是针对大部分so文件,而且主要分布在system和vendor目录下。
二 移植so文件
移植so目标:
| 文件名 | 目标集成路径 | 
|---|---|
| waterxx.conf | /vendor/etc/onefu/config/ | 
| vendor/lib/lib64/libxx1.so | /vendor/lib64/libxx1.so | 
| vendor/lib/lib/libxx1.so | /vendor/lib/libxx1.so | 
| system/lib/lib64/libxx2.so | /system/lib64/libxx2.so | 
| system/lib/lib/libxx2.so | /system/lib/libxx2.so | 
新建目录并将相关文件移植到该目录下,结果如下:
 
三 新增Android.bp
新增Android.bp,并输入一下内容:
/**
 * Copyright (c) 2023- OneFu
 * All Rights Reserved by OneFu Software Technology Co., Ltd and its affiliates.
 * You may not use, copy, distribute, modify, transmit in any form this file
 * except in compliance with OneFu in writing by applicable law.
 *
 * @file    Android.bp
 * @brief   Android.bp
 * @details Android.bp
 * @version 1.0
 * @author  water
 * @date    2023-06-12
 * <p>
 * Edit History
 * ----------------------------------------------------------------------------
 * DATE                     NAME               DESCRIPTION
 * 2023-06-12               water            Create it.
 */
cc_prebuilt_library_shared {
    name: "libxx1",
    vendor: true,
    multilib: {
		lib32: {
            srcs: ["vendor/lib/lib/libxx1.so"],
        },
        lib64: {
            srcs: ["vendor/lib/lib64/libxx1.so"],
        },
    },
	
    check_elf_files: false,
    compile_multilib: "both"
}
cc_prebuilt_library_shared {
    name: "libxx2",
    multilib: {
		lib32: {
            srcs: ["system/lib/lib/libxx2.so"],
        },
        lib64: {
            srcs: ["system/lib/lib64/libxx2.so"],
        },
    },
	
    check_elf_files: false,
    compile_multilib: "both"
}
 
cc_prebuilt_library_shared:执行与构建;
 name:预构建目标so的文件名;
 vendor:表示生成vendor目录下的目标;
 multilib:多架构;
 lib32:引用32位文件的目标;
 lib64:引用64位文件的目标;
 srcs:表示引用目标的路径;
 check_elf_files:是否检查elf文件;
 compile_multilib:编译多架构,这里选择“both”表示32位 和 64位 都要编译。
这样在上述中有“vendor”属性的编译后的目标会放在vendor目录下;未有的,则会放到system目录下。
四 添加编译目标
在device目录下找到一个自己设备使用的product.mk文件,并新增以下内容:
#add product for lib
PRODUCT_PACKAGES += \
    libxx1 \
    libxx2
PRODUCT_COPY_FILES += \
  vendor/onefu/water/waterxx.conf:$(TARGET_COPY_OUT_VENDOR)/vendor/etc/onefu/config/waterxx.conf
 
五 编译验证
重新编译系统,就可以在对应目录下找到对应的so文件了。
| 文件名 | 目标集成路径 | 
|---|---|
| waterxx.conf | /vendor/etc/onefu/config/ | 
| vendor/lib/lib64/libxx1.so | /vendor/lib64/libxx1.so | 
| vendor/lib/lib/libxx1.so | /vendor/lib/libxx1.so | 
| system/lib/lib64/libxx2.so | /system/lib64/libxx2.so | 
| system/lib/lib/libxx2.so | /system/lib/libxx2.so | 










