모든 "/ system / bin / service"호출에 대한 설명은 어디서 찾을 수 있습니까?


12

에서 한 가지 대답 내가 사용하는 adviced했다 service call phone 2 s16 "$number". 작동하지만 service list사용 방법을 모르고 인터넷에서 정보를 쉽게 찾을 수없는 다른 유용한 것들이 있습니다.

나는 내 자신을 알아내는 것 service외에는 아무런 내성도 보지 못한다 service list.

"서비스"호출 및 해당 매개 변수에 대한 자세한 설명은 어디에서 찾을 수 있습니까?


1
좋은 질문 ...
— 안드로이드 Quesito

답변:


5

한마디로

서비스 호출 명령과 관련된 코드는 함수의 인수 및 해당 서비스의 보조 파일에서 함수가 발생하는 순서입니다.

service call <your_service_name> <number at which the function appears in your_service_name.aidl> <type of the argument like i32 or i64> <argument>

자세히
나는 그것에 대해 알아야 할 많은 문제에 직면 해 있었으므로 클립 보드 서비스의 도움으로 솔루션을 공유 할 것입니다.
먼저 관심있는 서비스에 대해 알아야합니다-
입력하여 특정 안드로이드 시스템에있는 모든 서비스를 찾아야합니다.

adb shell service list

여기 당신이 얻을 것입니다-

.
.
.
59  ethernet: [android.net.IEthernetManager]
60  wifip2p: [android.net.wifi.p2p.IWifiP2pManager]
61  rttmanager: [android.net.wifi.IRttManager]
62  wifiscanner: [android.net.wifi.IWifiScanner]
63  wifi: [android.net.wifi.IWifiManager]
64  overlay: [android.content.om.IOverlayManager]
65  netpolicy: [android.net.INetworkPolicyManager]
66  netstats: [android.net.INetworkStatsService]
67  network_score: [android.net.INetworkScoreService]
68  textservices: [com.android.internal.textservice.ITextServicesManager]
69  network_management: [android.os.INetworkManagementService]
70  clipboard: [android.content.IClipboard]
71  statusbar: [com.android.internal.statusbar.IStatusBarService]
.
.
.

클립 보드 서비스에 관심이있는 것처럼 보입니다.

70  clipboard: [android.content.IClipboard]

여기에서 서비스 이름은 클립 보드 서비스이고 패키지 경로는 android.content.IClipboard입니다.

그런 다음 IClipboard.aidl이있는 전체 경로를 알아야합니다.
IClipboard.aidl을 Google에서 검색해야한다는 것을 알고 있습니다.
내 경우와 같이 결과에서 android.googlesource.com 웹 사이트에서 무언가를 찾아야합니다.

https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl

따라서 + / android-4.2.2_r1 다음에 경로가 있습니다. 경로가 path_of_clipboard.aidl =

/core/java/android/content/IClipboard.aidl

이 서비스 호출 코드는 안드로이드 시스템에 따라 다르므로 안드로이드 OS 이름을 알아야합니다. 내 경우에는 8.1.0
이므로 Google이 코드를 넣고 다음 OS에서 내 OS 버전을 선택하는 다음 웹 사이트로 이동합니다. 페이지의 왼쪽-

https://android.googlesource.com/platform/frameworks/base/

내 경우에는 android-8.1.0_r50입니다. 클릭하면 URL이 다음과 같이 보입니다.

https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51

그런 다음 path_of_clipboard.aidl을 추가하면 전체 URL이 다음과 같이 보입니다.

https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl

인터페이스에는 많은 메소드가 있습니다.

    void setPrimaryClip(in ClipData clip, String callingPackage);
    ClipData getPrimaryClip(String pkg);
    ClipDescription getPrimaryClipDescription(String callingPackage);
    boolean hasPrimaryClip(String callingPackage);
    void addPrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener,
            String callingPackage);
    void removePrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener);
    /**
     * Returns true if the clipboard contains text; false otherwise.
     */
    boolean hasClipboardText(String callingPackage);

따라서 첫 번째 방법, 즉 setPrimaryClip의 코드는 처음에 발생했을 때 1이되고 마지막 방법의 경우, 즉 hasClipboardText는 aidl 파일의 7 위에있을 때 7이됩니다. 다른 방법도 비슷합니다.
그래서 일곱 번째 방법을 호출하려면

adb shell service call clipboard 7 

아시다시피, callingPackage 이름은 필요하지 않으므로 입력하지 않았습니다.

메소드에 인수가 필요한 경우이 예제와 같이 전달할 수 있습니다.
클립 보드에서 코드가 8 인 메소드를 가정 해 보겠습니다.

getDemo(String arg1, int arg2, boolean arg3)

그래서 이렇게 부르겠습니다

adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1

여기서 i32는 32 비트 정수를 나타내고 s16은 문자열을 나타냅니다. 예제에 표시된 것처럼 부울 값을 정수로 전달할 수도 있습니다.
부울 정수 1은 true를, 0은 false를 나타냅니다.

팁 adb 명령을 실행하는 동안 발생한 오류를 확인하려면 logcat을 열어 두십시오 (android studio에서와 같이).
출처


6

실제 문제 service call는 트랜잭션 코드가 문서화되지 않았을뿐만 아니라 안정적으로 보장되지 않는다는 것입니다. Android 버전간에 자동으로 변경 될 수 있습니다. 이 때문에 service call어떤 Android 버전이 사용되는지 알면 개인 디버깅을 제외하고 명령을 사용해서는 안됩니다.

예:

(여기서 FIRST_CALL_TRANSACTION 1이므로 service call phone명령 에 사용해야하는 실제 트랜잭션 코드 는 소스에 표시된 숫자에 1을 더한 값입니다.)

새 버전 TRANSACTION_supplyPuk에서는 중간에 삽입되었으며 다음 코드는 모두 1 씩 이동합니다. service call phone해당 트랜잭션을 수행하는 데 사용 된 모든 항목은 Android 4.2.2에서 사용될 때 크게 손상됩니다. 동일한 코드로 인해 완전히 다른 메서드가 호출됩니다. 비참한 결과가있을 수 있습니다.


보다 약간 높은 수준 service call이지만 여전히 수퍼 유저 콘솔에서 많은 작업을 수행 할 수있는 것이 있습니까?
— Vi0

4

문서가 없습니다. 그러나 Android 소스 코드에서 찾고있는 모든 정보를 찾을 수 있습니다. service list패키지 이름을 제공합니다. 따라서 phone서비스는 com.android.internal.telephony.ITelephony입니다. Android 버전 service call phone에 com/android/internal/telephony/ITelephony.java대해 가능한 모든 매개 변수가 나열되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.