首页 > 编程语言 >Android源码下用Android.bp组织C++项目

Android源码下用Android.bp组织C++项目

时间:2024-09-24 14:44:59浏览次数:1  
标签:cc 下用 headers 源码 static 模块 Android libtest

使用Android.bp在Android源码下编译C++项目

Android.bp用法

  • 1.把自己的C++项目放到Android源码目录下,进入项目,执行mm或mma编译项目

  • 2.会自动查找此目录下所有的Android.bp,根据bp的规则编译项目

Android.bp函数作用介绍

//为 C/C++ 编译(cc_library、cc_binary等模块)设置一些默认的编译选项和属性,
cc_defaults {
    name: "my_defaults",

    // cpp_std: "c++14",

    //设置编译选项
    cflags: [
        "-Wall",
        "-Werror",
        "-Wextra",
        "-DLOG_TAG=\"CaEvs\""  //定义宏 LOG_TAG="CaEvs"
    ]
}

//libtest_headers模块
//用于导出头文件,其它模块引用此模块时,即可直接使用此模块导出的头文件
cc_library_headers {
    name: "libtest_headers",

    export_include_dirs: [
        "include"
    ]
}

//创建一个名为libtest的模块
//此模块指定生成动态库libtest.so
cc_library_shared {
    name: "libtest",

    //引用my_defaults中设好的配置
    defaults: [
        "my_defaults"
    ],

    //指定从哪个路径查找源文件
    srcs: [
        "src/*.cpp"
    ],

    //指定不包含哪些源文件
    exclude_srcs: [
        "src/render/window/WaylandWindow.cpp",
        "src/render/window/X11Window.cpp",
        "src/render/renderer/GlCamera.cpp",
    ],

    //指定需要链接的动态库
    shared_libs: [
        "libz",
        "libtinyxml2",
        "libnativewindow",
        "libandroid",
    ],

    compile_multilib: "64",

    //指定需要链接的静态库
    static_libs: [
        "libjpeg",
        "libpng",
        "libavfilter_a",
        "libavformat_a",
        "libavcodec_a",
        "libavutil_a",
        "libswresample_a",
        "libswscale_a",
        "libavdevice_a",
    ],

    //引入libtest_headers模块
    header_libs:[
        "libtest_headers"
    ],

    //libtest模块导出的头文件。
    //可以被其它模块使用
    export_include_dirs: ["include"],

    //导出本模块引用的libpng,libjpeg模块的头文件
    export_static_lib_headers: [
        "libpng",
        "libjpeg"
    ],

    //导出本模块引用的libtinyxml2模块的头文件
    export_shared_lib_headers: [
        "libtinyxml2",
    ],

    //导出本模块引用的libtest_headers模块的头文件
    export_header_lib_headers: [
        "libtest_headers"
    ],

    cflags: [
        "-Wno-unused-parameter",
        "-Wno-unused-private-field",
        "-Wno-unused-variable",
        "-DEVS_USE_ANDROID_WINDOW",//定义宏
    ]
}

//创建一个名为libtest_static的模块
//此模块指定生成静态库libtest_static.a
cc_library_static {
    name: "libtest_static",

    defaults: [
        "caevs_defaults"
    ],

    srcs: [
        "src/*.cpp"
    ],

    shared_libs: [
        "libbase",
        "libbinder",
        "libcutils",
        "libutils",
        "libui",
        "libgui",
        "libhidlbase",
        "libhardware",
        "libcamera_metadata",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "libtinyxml2",
        "libz",
        "libnativewindow",
        "libandroid",
    ],

    compile_multilib: "64",

    static_libs: [
        "libjpeg",
        "libpng",
        "libavfilter_a",
        "libavformat_a",
        "libavcodec_a",
        "libavutil_a",
        "libswresample_a",
        "libswscale_a",
        "libavdevice_a",
    ],

    export_include_dirs: ["include"],

    cflags: [
        "-Wno-unused-parameter",
        "-Wno-unused-private-field",
        "-Wno-unused-variable"
    ]
}

//引入预编译库
//创建一个libavfilter_a模块,
//此模块为静态库libavfilter.a,生成一个别名为libavfilter_a.a(可以取一样的名字)的静态库,
//在其它模块中可直接引用此模块
cc_prebuilt_library_static {
    name: "libavfilter_a",
    check_elf_files:false,

    arch: {
        arm: {
            srcs: [
                    "lib/android/armv7-a/libavfilter.a",
                ],
        },
        arm64: {
            srcs: [
                    "lib/android/aarch64/libavfilter.a",
                ],
        },
    },

    export_include_dirs: [
        "include"
    ],

    strip: {
        keep_symbols: true,
    }

}

//参考cc_prebuilt_library_static
cc_prebuilt_library_shared {
}








标签:cc,下用,headers,源码,static,模块,Android,libtest
From: https://www.cnblogs.com/linxisuo/p/18429130

相关文章

  • .net core开源工作流程框架elsa源码阅读之容器的理解
    官方文档:https://v3.elsaworkflows.io/这个框架的依赖注入容器,底层是靠原生的IServiceCollection,没有使用其他的三方容器;然后在这个基础上,作者进行了封装。主要是用了Module类和继承了IFeature接口的类完成了依赖注入容器的封装。Module是用来管理feature和依赖的。Module我称......
  • 竞拍秒购电商系统源码开发
    竞拍秒购电商系统是一种结合了拍卖和限时抢购两种购物模式的电商平台。用户可以参与商品的竞拍,也可以在特定的时间窗口内以固定价格快速购买商品。这种系统需要具备高效、稳定的特点,同时提供良好的用户体验。以下是开发需求与功能架构分析。一、开发需求1. 用户模块· 注册与登录......
  • SpringBoot养老院管理系统 计算机专业毕业设计源码06036
    摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设养老院管理系统。本设计主要实现集人性化、高效率、便捷等优点于一身的养老院管理......
  • ssm 旅游爱好者交互系统 毕业设计源码25818
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对旅游爱好者交互系统等问题,对旅游爱好者交互系统进行研究分析,然后开发设计出旅游爱好者交互......
  • <免费开题>团员管理系统|全套源码+文章lw+毕业设计+课程设计+数据库+ppt
    <免费开题>团员管理系统|全套源码+文章lw+毕业设计+课程设计+数据库+ppt1.2课题研究内容对于团员管理系统来说,其实我们所要研究的内容并不复杂,首先是要通过不同的角色来区分,那么肯定会有学生、管理员、辅导员等三种角色。那么对于这三种角色而言,每一种角色都有着自己的意义......
  • 后台管理前端设计器,个人商用1999!源码学习
    WEB组态和大屏设计器,在IoT项目中十分常见,通常是这样: WEB组态 大屏设计器但实际项目除了展示,通常还有后台管理。此前,这部分通常需要vue开发。有了UIOTOS,就能0基础,组态一样,搭建整个管理界面。 示例效果这是一款前端零代码组态工具,无需学习js、html、css,能一站式搭建多......
  • 【Unity精品源码】JU TPS 3 – 完整的第三人称射击游戏模板
    ......
  • [附源码]宠物领养管理系统+SpringBoot
    今天带来一款优秀的项目:宠物领养管理系统源码 。系统采用的流行的前后端分离结构,内含功能包括"管理端",“用户领养端”,“宠物管理”,“权限登录”等功能。如果您有任何问题,也请联系小编,小编是经验丰富的程序员!一.系统演示视频 https://githubs.xyz/show/270.mp4后端代码结......
  • 基于nodejs+vue校园二手市场平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高等教育的普及和校园生活的丰富多彩,学生们在日常学习与生活中积累了大量不再需要的二手物品,如书籍、学习资料、电子产品、生活用品等。同时,新入学的学......
  • 基于nodejs+vue校园二手商品交易平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高等教育的普及和校园生活的丰富多彩,大学生群体对各类商品的需求日益增长,同时也伴随着大量物品的闲置与浪费。特别是在每学期末或毕业生离校之际,大量书......