2013-03-02 7 views

Odpowiedz

2

Nie, to naprawdę nie jest możliwe przy użyciu publicznego zestawu SDK.

W najlepszym razie można stale pobierać odpowiedzi na pytania dotyczące procesu pierwszoplanowego, który znajduje się na samym wierzchu, i zachować dziennik. Jednak nie jest to najdokładniejsza lub najskuteczniejsza metoda.

3

Możesz pobrać bieżący proces przez ActivityManager#getRunningAppProcesses. Ale na pewno nie można uzyskać powiadomienia, gdy aplikacja się uruchomi bez odradzania się urządzenia.

Kiedy Android uruchamia nową aplikację, Zygote będzie bulić nowy proces:

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

    pid = forkAndSpecializeCommon(args, false); 

    RETURN_INT(pid); 
} 

można modyfikować i zastąpić libdvm.so.

Another approach:

Każdy program, który jest dynamicznie połączone będzie dostęp do niektórych plików na starcie, takich jak dynamiczny linker. To byłoby bezużyteczne dla celów bezpieczeństwa, ponieważ nie wywoła na statycznie połączonego programu, ale nadal może być interesujące:

#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; 
} 

Wymaga uprawnienia roota, więc z JNI i zakorzenione urządzenia, będzie można aby to zrobić.

Powiązane problemy