15

Androidの「system_server」(すべてのシステムレベルのサービスを処理する)で実行される独自のフレームワークコードを追加したいと思います。私のサービスは、カーネルに追加したドライバーと通信するJNIライブラリーをロードします。このサービスは、アプリがリスナーを登録してドライバーから更新を取得できるように設計されています。システムサービスを追加する方法を説明するかなり良いブログ投稿(http://www.androidenea.com/2009/12/adding-system-server-to-android.html)を見つけましたが、完全に機能させることはできません。 。

まず、この投稿では、「適切な」Android.mkファイルを使用してクライアント/テストアプリケーションを作成する必要があると述べていますが、その例は示していません。ビルドしようとすると、追加したサービスが見つからないというビルドエラーが発生します。誰かがこれがどのように見えるかの例を挙げてもらえますか?

また、Androidのオープンソースコードではなく、ベンダーディレクトリ(またはフローズンヨーグルトのデバイスディレクトリ)にこれを実装したいと思います。ブログ投稿には、これの適切な場所はベンダーディレクトリであると記載されていますが、これがどのように表示されるかの例は示されていません。誰か知ってる?

Androidで独自のシステムサービスを実装するための追加情報があれば役立ちます。繰り返しますが、私の特定のワークフローは次のとおりです。

Androidアプリ->システムサービス->JNI(ネイティブ)ライブラリ->デバイスドライバー

4

4 に答える 4

15

テキサスインスツルメンツは良い例を提供しています:

http://processors.wiki.ti.com/index.php/Android-Adding_SystemService

さらに、CyanogenMod SystemServer.javaには、config.xmlの配列「config_vendorServices」(core / res / res / values / config.xmlを参照)で定義されているシステムサービスを動的にロードするためのコードもあります。オーバーレイを使用するベンダーまたはデバイスのディレクトリ。これはCyanogenMod固有の追加であり、このコミットで追加されます。

https://github.com/CyanogenMod/android_frameworks_base/commit/88fff90131f54d45dc496c45127ac1d16ad257df

于 2011-09-15T16:27:29.487 に答える
3

システムサービスを追加するには、複数の方法(または、明示的に言うと6つの方法)があります。

あなたが試したもの(Androidアプリ->システムサービス-> JNI(ネイティブ)ライブラリ->デバイスドライバー)はその1つです。システムサービスの実装パターンに関する詳細な説明については、この記事を確認してください。

ここに画像の説明を入力してください

于 2015-04-25T04:49:16.773 に答える
2

Androidフレームワークで独自のシステムサービスを作成するには、以下の手順に従ってください。

  1. スタブを継承することで公開されたAPIを使用して独自のサービス/マネージャーを作成します。
  2. サービスを公開してビルドに含めるためのaidlファイルを作成します。
  3. システムサーバーにサービスを追加すると、すべてのコアサービスとともにサービスが開始されます。
  4. コンテキストimplファイルにサービスコンテキストを登録します。
  5. getSystemService(サービスのコンテキスト)を呼び出して、アプリケーションでサービスを使用します

PS; サービスに致命的な例外が発生した場合、サービスはシステムサービスで実行されているため、デバイスはソフトリブートします。

于 2013-07-31T06:54:15.513 に答える
0

これは、 system / extras/JNITestにあるJNItest.cをコンパイルするために使用されるAndroid.mkの例です。Android.mkは、system / extras/JNITestディレクトリ内にもあります。

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= JNITest1.c

LOCAL_MODULE:= JNITest

#LOCAL_FORCE_STATIC_EXECUTABLE := true

#LOCAL_STATIC_LIBRARIES := libc
LOCAL_SHARED_LIBRARIES := libc

#LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := eng

include $(BUILD_EXECUTABLE)
于 2013-10-17T16:59:05.710 に答える