모든 "/ 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 phonecom/android/internal/telephony/ITelephony.java대해 가능한 모든 매개 변수가 나열되어 있습니다.

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