android - 如何构建特定的 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)
任何想法为什么这会失败?
解决方案
推荐阅读
- excel - Phpspreadsheet:下载不适用于 .csv 和 .pdf 文件
- node.js - 执行 docker run 命令时如何将 env 变量传递给 json 文件
- c# - 更新的递归函数
- mysql - Spring Boot:如何使用谓词创建涉及“加入”和“分组依据”的动态查询
- c - 使用带有 -g 标志的 gcc 在 c 中编译内联汇编时,编译器抛出“缺少输出操作数约束”
- django - 在 StructBlock 中使用 MultiFieldPanel
- excel - 在下一个工作表循环中,SpecialCells(xlCellTypeVisible) 范围应读取为 NOTHING
- laravel - 带有 OR WHERE 条件的 Laravel Eloquent 查询
- ionic-framework - 在 Ionic 中保存的 Gmail 样式的多选列表项
- webpack - 如何使用通用的基本路径从通用的少 webpack 设置导入?