Android 本机服务器列表
List of Android native servers
如何获取 Android 本机服务器的完整列表。具体来说,我问的是Android 7.1.2。我尝试了几种方法,但我认为它们都是错误的。
第一个:
AOSP$ ls -l out/target/product/generic_x86_64/system/bin/ | grep server
-rwxrwxr-x 1 gluttton gluttton 13840 сер 7 00:37 audioserver
-rwxrwxr-x 1 gluttton gluttton 5560 сер 7 00:40 cameraserver
-rwxrwxr-x 1 gluttton gluttton 124432 сер 7 01:00 drmserver
-rwxrwxr-x 1 gluttton gluttton 1125788 сер 7 01:00 gdbserver
-rwxrwxr-x 1 gluttton gluttton 1115512 сер 7 01:00 gdbserver64
-rwxrwxr-x 1 gluttton gluttton 17936 сер 7 01:05 mediadrmserver
-rwxrwxr-x 1 gluttton gluttton 9652 сер 7 01:05 mediaserver
但并非所有服务器都称为 <some>server
,surfaceflinger
就是此类例外的一个示例。
第二个:
AOSP$ grep native frameworks/base/services/java/com/android/server/SystemServer.java
private static native void startSensorService();
// libnativehelper's JniInvocation::Init code where we already
// Initialize native services.
reportWtf("observing native crashes", e);
但似乎并非所有服务器都由 SystemServer
启动。
加分问题:native server
和native service
有区别吗?
'native' 人们的意思是 'written in native platforms language' 这意味着 C/C++ android。一项服务通常意味着 'object in memory that has exposed binder interface'。其他进程可以调用它的 IBinder 派生接口。因此,在示例中,来自 ps 列表的音频服务器是由 init.rc 在启动时启动的服务器,它是用 C++ 编写的,您可以将其称为本机服务器。它内部至少有 2 个服务:audio_flinger 和 audio_policy - 它们也是 C/C++ 代码,它们是公开它的 IBinder 接口的对象,所以你可以调用它们 'native services' .
所有服务的列表在这里:
adb shell 服务列表
一些内部运行时信息,如果你喜欢运行时调试:
adb shell dumpsys
servers/deamons 的列表你做对了 - 'ps' 但并不是所有的 'rild' 或提到的 'surfaceflinger' 都在其名称中有服务器。
阅读 /system/core/rootdir/init.rc plus device///init*.rc 在 android 源目录中。
是的。本机服务器是完全独立于 android java 代码(即合子)的 c/c++ 程序(具有 void main(argc, argv){} 入口点)。因此,您可以仅使用 initd 启动 android,而无需使用 zygote 或系统服务器。 运行 那些来自您的板 init.rc 的本机服务器。
因此,当您查找所有这些列表时,请从您的 运行ning 设备读取 /init.rc。并查找 'service ...' 部分。您将只有几个 init*.rc 文件。
有些来自system/core/rootdir/initrc,有些来自
device/name_of_the_manufacturer/name_of_board/initrc
每个部分 'system ...' 定义内核启动后 initd 启动的内容。
服务音频服务器/system/bin/audioserver
class main
user audioserver
# media gid needed for /dev/fm (radio) and for /data/misc/media (tee)
group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct
ioprio rt 4
writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks
在 android 7 中你必须找到 -name init*.rc 因为它们散落在源代码树中。
所以回答你的问题:
grep -rn 服务 --include=initrc
在源代码树的根目录中,忽略来自不同 device/manufacturers/
的那些
如何获取 Android 本机服务器的完整列表。具体来说,我问的是Android 7.1.2。我尝试了几种方法,但我认为它们都是错误的。
第一个:
AOSP$ ls -l out/target/product/generic_x86_64/system/bin/ | grep server
-rwxrwxr-x 1 gluttton gluttton 13840 сер 7 00:37 audioserver
-rwxrwxr-x 1 gluttton gluttton 5560 сер 7 00:40 cameraserver
-rwxrwxr-x 1 gluttton gluttton 124432 сер 7 01:00 drmserver
-rwxrwxr-x 1 gluttton gluttton 1125788 сер 7 01:00 gdbserver
-rwxrwxr-x 1 gluttton gluttton 1115512 сер 7 01:00 gdbserver64
-rwxrwxr-x 1 gluttton gluttton 17936 сер 7 01:05 mediadrmserver
-rwxrwxr-x 1 gluttton gluttton 9652 сер 7 01:05 mediaserver
但并非所有服务器都称为 <some>server
,surfaceflinger
就是此类例外的一个示例。
第二个:
AOSP$ grep native frameworks/base/services/java/com/android/server/SystemServer.java
private static native void startSensorService();
// libnativehelper's JniInvocation::Init code where we already
// Initialize native services.
reportWtf("observing native crashes", e);
但似乎并非所有服务器都由 SystemServer
启动。
加分问题:native server
和native service
有区别吗?
'native' 人们的意思是 'written in native platforms language' 这意味着 C/C++ android。一项服务通常意味着 'object in memory that has exposed binder interface'。其他进程可以调用它的 IBinder 派生接口。因此,在示例中,来自 ps 列表的音频服务器是由 init.rc 在启动时启动的服务器,它是用 C++ 编写的,您可以将其称为本机服务器。它内部至少有 2 个服务:audio_flinger 和 audio_policy - 它们也是 C/C++ 代码,它们是公开它的 IBinder 接口的对象,所以你可以调用它们 'native services' .
所有服务的列表在这里: adb shell 服务列表
一些内部运行时信息,如果你喜欢运行时调试:
adb shell dumpsys
servers/deamons 的列表你做对了 - 'ps' 但并不是所有的 'rild' 或提到的 'surfaceflinger' 都在其名称中有服务器。
阅读 /system/core/rootdir/init.rc plus device///init*.rc 在 android 源目录中。
是的。本机服务器是完全独立于 android java 代码(即合子)的 c/c++ 程序(具有 void main(argc, argv){} 入口点)。因此,您可以仅使用 initd 启动 android,而无需使用 zygote 或系统服务器。 运行 那些来自您的板 init.rc 的本机服务器。
因此,当您查找所有这些列表时,请从您的 运行ning 设备读取 /init.rc。并查找 'service ...' 部分。您将只有几个 init*.rc 文件。 有些来自system/core/rootdir/initrc,有些来自 device/name_of_the_manufacturer/name_of_board/initrc
每个部分 'system ...' 定义内核启动后 initd 启动的内容。
服务音频服务器/system/bin/audioserver
class main
user audioserver
# media gid needed for /dev/fm (radio) and for /data/misc/media (tee)
group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct
ioprio rt 4
writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks
在 android 7 中你必须找到 -name init*.rc 因为它们散落在源代码树中。
所以回答你的问题: grep -rn 服务 --include=initrc
在源代码树的根目录中,忽略来自不同 device/manufacturers/
的那些