首页 > 解决方案 > 如何构建特定的 Android cli 可执行文件 (service.cpp)

问题描述

在android中,当您打开终端模拟器或连接adb shell时,service您可以执行一个命令,该命令允许您在某种程度上与系统服务进行交互。就我的目的而言,功能太有限了,我想稍微扩展一下。

不幸的是,这个可执行文件没有记录。

我在这里找到了源代码:service.cpp

在同一目录下还有一个名为Android.bp的文件,内容如下:

cc_binary {
    name: "service",

    srcs: ["service.cpp"],

    shared_libs: [
        "libcutils",
        "libutils",
        "libbinder",
    ],

    cflags: [
        "-DXP_UNIX",
        "-Wall",
        "-Werror",
    ],
}

cc_binary {
    name: "vndservice",

    proprietary: true,
    srcs: ["service.cpp"],

    shared_libs: [
        "libcutils",
        "libutils",
        "libbinder",
    ],

    cflags: [
        "-DXP_UNIX",
        "-DVENDORSERVICES",
        "-Wall",
        "-Werror",
    ],
}

那些 cflag 对我来说就像 g++ 标志。我真的不知道 g++,但经过大量的试验和错误后,我最终得到了这个:

# Download required source code
git clone https://android.googlesource.com/platform/superproject
cd superproject
git submodule init
git submodule update frameworks/native
git submodule update system/libbase
git submodule update system/core
git submodule update system/logging
# Set required include directories in CPATH
export CPATH="./frameworks/native/include:./system/libbase/include:./system/core/libcutils/include:./system/core/libutils/include:./system/logging/liblog/include:./system/core/libsystem/include:./frameworks/native/libs/binder/include"
# Build
g++ -DXP_UNIX -Wall -Werror -o service ./frameworks/native/cmds/service/service.cpp

不幸的是,我收到了大量错误:
https ://pastebin.com/fnu7LJLU

我的 G++ 版本是:
g++ (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)

任何想法为什么这会失败?

标签: androidc++buildandroid-serviceandroid-source

解决方案


推荐阅读