android 除錯命令service

2021-07-10 02:50:04 字數 3348 閱讀 4621

在android中,可以利用service命令去做很多除錯工作,例如service list命令顯示系統當前所有在service manager註冊的service,其命令具體使用如下,

# service

service

usage: service [-h|-?]

service list

service check service

service call service code [i32 int | s16 str] ...

options:

i32: write the

integer int into

thesend parcel.

s16: write the utf-16

string str into

thesend parcel.

主要用法有三個:

1.service list,顯示系統當前所有在service manager註冊的service;

2.service check service,查詢service是否存在;

3.service call service,可以通過binder給service傳送code,還可以向service傳送intent等,具體**分析如下。

**在frameworks\native\cmds\service\service.cpp,其makefile為

local_path

:= $(call my-dir)

include

$(clear_vars)

local_src_files

:= \

service.cpp

local_shared_libraries

:= libutils libbinder

ifeq ($(

target_os),linux)

local_cflags += -dxp_unix

#local_shared_libraries += librt

endif

#編譯為應用程式service

local_module

:= service

include

$(build_executable)

在main()函式中,

int main(int argc, char* const argv)

else

}//③ 呼叫service list

else

if (strcmp(argv[optind], "list") == 0)

}//④ 呼叫service call

else

if (strcmp(argv[optind], "call") == 0)

data.writeint32(atoi(argv[optind++]));

}//傳遞string

else

if (strcmp(argv[optind], "s16") == 0)

data.writestring16(string16(argv[optind++]));

}//傳遞個null,只寫個strongbinder

else

if (strcmp(argv[optind], "null") == 0) //還能傳送intent,這個應該是傳送給activitymanagerservice

//然後activitymanagerservice將intent重組,

//啟動需要的activity等

else

if (strcmp(argv[optind], "intent") == 0)

else

if (strcmp(key, "data") == 0)

else

if (strcmp(key, "type") == 0)

else

if (strcmp(key, "launchflags") == 0)

else

if (strcmp(key, "component") == 0)

else

if (strcmp(key, "categories") == 0)

}optind++;

} writestring16(data, action);

writestring16(data, dataarg);

writestring16(data, type);

data.writeint32(launchflags);

writestring16(data, component);

if (categorycount > 0)

}else

// for now just set the extra field to be null.

data.writeint32(-1);

} else

}//直接在bpbinder上呼叫transact,傳送code

service->transact(code, data, &reply);

aout << "result: "

<< reply << endl;

} }

上面**主要包括4部分:

1.獲取service manager的**物件bpservicemanager;

2.呼叫service check service,其實就是呼叫bpservicemanager->checkservice

3.呼叫service list,其實就是呼叫bpservicemanager->listservices

4.呼叫service call,首先去獲取service的bpbinder,後續直接呼叫transact函式向service傳送code,其中命令引數可以包含i32(int),s16(string),null,intent(intent後需要自己組織intent的引數,這個應該是傳送給activitymanagerservice,然後activitymanagerservice將intent重組,啟動需要的activity)。

舉個call的例子,在《android graphic(9)—開發者選項關閉hw overlays 》中分析了通過開發者選項關閉hw overlays,這裡也可以通過service 命令向su***ceflinger命令傳送1008的code。

//關閉hw overlays,code為1008,乙個引數為int的1 

# service call su***ceflinger 1008 i32 1

android 除錯常用命令

1.檢視機器當前記憶體使用情況以及剩餘量 adb shell dumpsys meminfo 2.檢視lib庫當前版本資訊 串列埠輸入 busybox strings system lib libstagefright.so busybox grep author 3.檢視ddr當前執行頻率,找到d...

android手機adb除錯程式命令

adb devices 顯示當前裝置 adb logcat v time 1229.txt 在當前目錄生成1229.txt log檔案,可以先執行該命令,再操作手機 adb shell cd data data com.kedacom.monitor lib 第二部分 android 下使用tcpd...

android除錯工具adb命令大全

一 adb介紹 sdk的tools資料夾下包含著android模擬器操作的重要命令adb,adb的全稱為 android debug bridge就是除錯橋的作用。通過adb我們可以在eclipse中方面通過ddms來除錯android程式。借助這個工具,我們可以管理裝置或手機模擬器的狀態。還可以進...