2010-07-12 14 views
15

Desidero aggiungere il mio codice di framework che viene eseguito su Android "system_server" (gestisce tutti i servizi a livello di sistema). Il mio servizio carica una libreria JNI che parla con un driver che ho aggiunto al kernel. Il servizio è progettato per consentire a un'app di registrare un listener con esso per ottenere aggiornamenti dal driver. Ho trovato un post del blog abbastanza buono (http://www.androidenea.com/2009/12/adding-system-server-to-android.html) che spiega come aggiungere un servizio di sistema, ma non riesco a farlo funzionare completamente.Come aggiungere un servizio di sistema a Android Framework

Prima di tutto, il post afferma che un file Android.mk "appropriato" dovrebbe essere usato per scrivere l'applicazione client/test, ma non ne fornisce un esempio. Quando provo a crearlo, ricevo errori di compilazione che dicono che non riesco a trovare il servizio che ho aggiunto. Qualcuno potrebbe dare un esempio di come potrebbe essere?

Inoltre, vorrei implementarlo nella directory del produttore (o nella directory del dispositivo in froyo) piuttosto che nel codice open source Android. Il post sul blog menziona che il posto giusto per questo è la directory del venditore, ma non fornisce un esempio di come dovrebbe essere. Qualcuno sa?

QUALSIASI informazione aggiuntiva sull'implementazione del proprio servizio di sistema in Android sarebbe utile. Anche in questo caso il mio flusso di lavoro specifico è:

Android App -> System Service -> JNI (nativo) library -> driver di periferica

risposta

15

Texas Instruments ha fornito un bell'esempio:

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

Inoltre, il CyanogenMod SystemServer.java ha anche il codice per caricare dinamicamente i servizi di sistema definiti nell'array "config_vendorServices" in config.xml (vedi core/res/res/values ​​/ config.xml), che credo possa essere sovrascritto nel venditore o directory del dispositivo che utilizzano le sovrapposizioni. Questa è un'aggiunta specifica per CyanogenMod, ha aggiunto in questo commit:

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

+0

Grazie per aver postato questo. Non ero a conoscenza del fatto che TI avesse pubblicato questa documentazione. Non ho davvero avuto la possibilità di affrontarlo, ma per ora accetterò la tua risposta dato che sembra fornire alcune buone informazioni. – ashughes

+2

Nel caso in cui qualcun altro finisca qui, la funzione vendorServices è stata rimossa in CyanogenMod diversi anni fa con l'aggiornamento a ICS. – bmaupin

2

Seguire le istruzioni riportate di seguito per la scrittura il proprio servizio di sistema in quadro Android.

  1. Scrivi il tuo servizio/gestore con API esposte ereditando lo stub.
  2. Creare un file di aiuto per il servizio per esporre & includere nella compilazione.
  3. Aggiungere il servizio in System Server, il servizio verrà avviato insieme a tutti i servizi di base.
  4. Registra il tuo contesto di servizio nel contesto del file impl.
  5. usare il vostro servizio in applicazione chiamando getSystemService (Context del vostro servizio)

PS; se il servizio ottiene qualche eccezione fatale, il dispositivo si riavvierà lentamente, poiché il servizio è in esecuzione sotto il servizio di sistema.

0

Ecco un esempio di Android.mk utilizzato per compilare un JNItest.c situato in system/extras/JNITest. Android.mk si trova anche nella directory 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) 
2

Ci sono molti modi (o 6 modi, solo per essere espliciti) di aggiungere un servizio di sistema.

Quello che hai provato (App per Android -> Servizio di sistema -> Libreria JNI (nativa) -> Driver di dispositivo) è uno di questi. È possibile che si desideri check out this article per una spiegazione approfondita relativa ai modelli di implementazione del servizio di sistema.

enter image description here

Problemi correlati