2013-03-02 16 views

Trả lời

2

Không, điều này không thực sự có thể sử dụng SDK công khai.

Tốt nhất, bạn có thể liên tục tiếp tục bỏ phiếu số ActivityManager cho quy trình nền trước nằm ngay trên đầu và giữ nhật ký đó. Tuy nhiên, nó không phải là phương pháp chính xác hoặc hiệu quả nhất.

3

Bạn có thể nhận quy trình chạy hiện tại theo ActivityManager#getRunningAppProcesses. Nhưng nó chắc chắn là không thể nhận được thông báo khi ứng dụng bắt đầu mà không nhận được thiết bị của bạn bắt nguồn từ.

Khi Android khởi động một ứng dụng mới, hợp tử sẽ ngã ba một quá trình mới:

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

    pid = forkAndSpecializeCommon(args, false); 

    RETURN_INT(pid); 
} 

Bạn có thể chỉnh sửa và thay thế các libdvm.so.

Another approach:

Bất kỳ chương trình được liên kết động đang xảy ra để truy cập các tập tin nhất định khi khởi động, chẳng hạn như mối liên kết động. Đây sẽ là vô dụng cho các mục đích an ninh vì nó sẽ không kích hoạt trên một chương trình liên kết tĩnh, nhưng vẫn có thể quan tâm:

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

Điều này đòi hỏi đặc quyền root, như vậy với JNI và một thiết bị bắt nguồn từ, bạn sẽ có thể để làm điều này.

Các vấn đề liên quan