2013-03-02 4 views

Antwort

2

Nein, dies ist mit dem öffentlichen SDK nicht wirklich möglich.

Im besten Fall könnten Sie fortwährend die ActivityManager für den Vordergrundprozess abfragen, der ganz oben ist, und ein Protokoll darüber führen. Es ist jedoch nicht die genaueste oder effizienteste Methode.

3

Sie können den aktuellen laufenden Prozess von ActivityManager#getRunningAppProcesses erhalten. Aber es ist definitiv unmöglich, benachrichtigt zu werden, wenn die Anwendung gestartet wird, ohne dass Ihr Gerät verwurzelt wird.

Wenn Android eine neue Anwendung gestartet wird, wird Zygote einen neuen Prozess Gabel:

static void Dalvik_dalvik_system_Zygote_forkAndSpecialize(const u4* args, 
    JValue* pResult) 
{ 
    pid_t pid; 

    pid = forkAndSpecializeCommon(args, false); 

    RETURN_INT(pid); 
} 

Sie ändern können und die libdvm.so ersetzen.

Another approach:

Jedes Programm, das beim Start bestimmte Dateien zugreifen dynamisch verknüpft wird, wie der dynamische Linker. Dies würde für Sicherheitszwecke nutzlos sein, da es nicht auf ein statisch gelinkte Programm ausgelöst wird, aber immer noch von Interesse sein könnte:

#include <stdio.h> 
#include <sys/inotify.h> 
#include <assert.h> 
int main(int argc, char **argv) { 
    char buf[256]; 
    struct inotify_event *event; 
    int fd, wd; 
    fd=inotify_init(); 
    assert(fd > -1); 
    assert((wd=inotify_add_watch(fd, "/lib/ld-linux.so.2", IN_OPEN)) > 0); 
    printf("Watching for events, wd is %x\n", wd); 
    while (read(fd, buf, sizeof(buf))) { 
     event = (void *) buf; 
     printf("watch %d mask %x name(len %d)=\"%s\"\n", 
     event->wd, event->mask, event->len, event->name); 
    } 
    inotify_rm_watch(fd, wd); 
    return 0; 
} 

Diese Root-Rechte erfordern, so mit JNI und verwurzelt Gerät, können Sie um dies zu tun.

Verwandte Themen