Android.bp 编译java库和C库实例

利用Android.bp来编译so库

在SimpleHook模块中,我们使用了以下构建脚本来建议Android.bp

cc_library {
 
    name:"libsecAI",
    host_supported: true,
    
    shared_libs:[
        "libnativehelper",
        "libart",
        "liblog",
    ],
    
    local_include_dirs:[
        "include",
    ],
    
    arch:{
        arm: {
            srcs: [
                "AIHook.cpp",
                "HookPage.cpp",
            ],
        },
        arm64:{
            srcs: [
                    "AIHook.cpp",
                    "HookPage.cpp",
                ],
        },  
    },
    
    cppflags:[
        "-DART_STACK_OVERFLOW_GAP_arm=8912",
        "-DART_STACK_OVERFLOW_GAP_arm64=8912",
        "-DART_STACK_OVERFLOW_GAP_mips=16384",
        "-DART_STACK_OVERFLOW_GAP_mips64=16384",
        "-DART_STACK_OVERFLOW_GAP_x86=16384",
        "-DART_STACK_OVERFLOW_GAP_x86_64=20480",
        "-DIMT_SIZE=43",
    ],
    cpp_std:"c++17",

}

可以看出,Android.bp文件的语法与json文件的形式很类似。这里cc_library是用来生成native库的(so包),常用的属性:

  • name: 指定了生成的lib包的名字
  • host_supported:当该模块依赖的某个模块中存在该属性,则依赖它的模块都需要配置该属性
  • local_include_dirs:项目内的头文件目录依赖,这里是相对路径
  • cppflag:编译的flag选项,示例中定义了一些工程依赖的宏的定义
  • cpp_std: 指定了编译器依赖的语言编译标准
  • arch: 用来指定需要的目标编译平台,诸如arm, arm64,x86等,在srcs中指定需要依赖的源码文件(以相对文件的形式给出)
  • srcs:常见的还可以直接在最外层用srcs属性配置工程源码文件
  • include_dirs: 指定依赖的头文件,这里的头文件可以为模块外的头文件,以相对整个Android工程路径给出。
  • export_include_dirs: 是否将头文件导出;这使得依赖该模块的模块无需再引用依赖模块的头文件目录。

利用Android.bp来编译Java库

来看下framework模块的bp文件

java_library {
    name: "framework",

    srcs: [
        // From build/make/core/pathmap.mk FRAMEWORK_BASE_SUBDIRS
        "core/java/**/*.java",
        "graphics/java/**/*.java",
        "location/java/**/*.java",
        "lowpan/java/**/*.java",
      .....

        ":framework-javastream-protos",

        "core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl",
        "core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl",
       
        "media/java/android/media/session/ISessionControllerCallback.aidl",
       ......

        ":framework-statslog-gen",
    ],

    aidl: {
        export_include_dirs: [
            // From build/make/core/pathmap.mk FRAMEWORK_BASE_SUBDIRS
            "core/java",
            "graphics/java",
            "location/java",
            "lowpan/java",
            "media/java",
            "media/mca/effect/java",
            "media/mca/filterfw/java",
            "media/mca/filterpacks/java",
            "drm/java",
            "opengl/java",
            "sax/java",
            "telecomm/java",
            "telephony/java",
            "wifi/java",
            "keystore/java",
            "rs/java",
        ],

        include_dirs: [
            "system/update_engine/binder_bindings",     
            "system/bt/binder",
            "system/security/keystore/binder",
        ],
    },

    exclude_srcs: [
        // See comment on framework-atb-backward-compatibility module below
        "core/java/android/content/pm/AndroidTestBaseUpdater.java",
        // See comment on framework-oahl-backward-compatibility module below
        "core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java",
    ],

    no_framework_libs: true,
    libs: [
        "conscrypt",
        "okhttp",
        "bouncycastle",
        "ext",
    ],

    static_libs: [
        "framework-protos",
        "android.hidl.base-V1.0-java",
        "android.hardware.cas-V1.0-java",     
    ],

    // Loaded with System.loadLibrary by android.view.textclassifier
    required: [
        "libtextclassifier",
        "libmedia2_jni",
    ],

    javac_shard_size: 150,

    dxflags: [
        "--core-library",
        "--multi-dex",
    ],
}

首先java_library说明了编译的是java库,另外还可能有java_library_staticfile_group等属性,这里面有好多属性,我们重点关注几个选项。

  • name:指定了模块名
  • static_libs:指定了依赖的静态库(将被打入到jar中)
  • libs: 共享库
  • srcs:指定模块中含有的java代码,这里也可以指定aidl文件。这里通过 "core/java/**/*.java",这种写法来覆盖某个路径下的所有java文件
  • aidl: 一般我们会在这里面指定aidl文件相对路径
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,642评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,168评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,809评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,921评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,924评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,415评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,794评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,765评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,297评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,331评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,458评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,065评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,777评论 3 337
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,233评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,366评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,001评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,524评论 2 365

推荐阅读更多精彩内容