2017-08-12 6 views
1

Androidネイティブサーバの完全なリストを取得する方法。具体的には、Android 7.1.2についてお尋ねします。私はいくつかのアプローチを試みますが、私の意見では両方とも間違っています。Androidネイティブサーバのリスト

:まず、すべてのサーバーが<some>serversurfaceflinger

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 

しかし、と呼ばれていないが、このような例外の一例です。

第二:

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 servernative serviceの間に違いはありますか?

+0

は、関連するように見える/ソースツリーのルートディレクトリに のgrep -rnサービス--include = RC

initと異なるデバイス/メーカーからのものを無視する:

だからあなたの質問に答えるためにhttp://android-developers.narkive.com/coXimivq/native-daemons-started-by-init。 – Gluttton

答えて

1

はい。ネイティブサーバは、アンドロイドJavaコード(すなわち、zygote)から完全に独立したc/C++プログラム(void main(argc、argv){}エントリポイントを持つ)です。ですから、initdとzygoteやシステムサーバーを使わずにAndroidを起動することができます。あなたのボードのinit.rcからそれらのネイティブサーバーを実行してください。

だから、すべてのリストを探すときは、実行中のデバイスから/init.rcを読んでください。そして、「サービス」セクションを探します。 init * .rcファイルはほとんどありません。 一部は、システム/コア/ ROOTDIR/initをRCからのものであり、いくつかは、/ name_of_the_manufacturer/name_of_board/initを RC

各セクション デバイスからある 'システム...' カーネルが起動した後、initdをすることによって開始することを定義します。アンドロイド7では

サービスのAudioServer /システム/ 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 

それらはすべて、ソースツリーを断言点在しているので、あなたは* -nameに.RCをINITを見つける必要があります。

2

「ネイティブ」とは、「ネイティブプラットフォームで書かれた言語」を意味します。これは、アンドロイド用のC/C++を意味します。サービスとは、通常、「バインダー・インターフェースが公開されたメモリー内のオブジェクト」を意味します。他のプロセスがIBinder派生インターフェイスと呼ぶ場所。したがって、psからaudioserverが起動時にinit.rcによって起動されるサーバであることを示す例では、C++で書かれています。ネイティブサーバと呼ぶことができます。 audio_flingerとaudio_policyの2つのサービスがあります。これらはC/C++コードでもあり、IBinderインターフェイスを公開するオブジェクトなので、それらをネイティブサービスと呼ぶことができます。

すべてのサービスの一覧はこちらです: adbのシェルサービスリスト

いくつかの内部の実行時の情報は、デバッグランタイムしたい場合:

adbのシェルdumpsys

サーバのリスト/のデーモン君をそれは正しく - 'ps'だが、それらのすべてが 'rild'のようなものではない、または 'surfaceflinger'にその名前のサーバがあると言われている。

あなたのandroidソースディレクトリの/system/core/rootdir/init.rcとdevice /// init * .rcを読みます。

+0

あなたの答えをありがとう。私がしたあなたの提案のほとんどが、私を助けませんでした。私が 'ネイティブ'サービスについて話すときには、 'zygote'や' system_server'を起動する必要はありません - 正しいのですか? – Gluttton

+0

はい、ネイティブサーバは、アンドロイドJavaコード(すなわち、zygote)から完全に独立したc/C++プログラムです(void main(argc、argv){}エントリポイントを使用します)。ですから、initdとzygoteやシステムサーバーを使わずにAndroidを起動することができます。あなたのボードのinit.rcからそれらのネイティブサーバーを実行してください。 そのすべてのリストを探すときは、実行中のデバイスから/init.rcを読んでください。そして、 –