すべての「/ system / bin / service」呼び出しの説明はどこにありますか?


12

1つの答え私が使用することをadvicedましたservice call phone 2 s16 "$number"。それは機能しますが、service list他の有用なものを見ると、使い方がわからず、インターネット上の情報を簡単に見つけることができません。

私自身を見つけるservice以外に内省は見ていませんservice list...

「サービス」呼び出しとそのパラメーターの詳細な説明はどこにありますか?


1
素敵な質問...
Android Quesito 2014年

回答:


5

要するに

サービス呼び出しコマンドに関連するコードは、関数の引数と、そのサービスのAIDLファイルで関数が発生する順序にすぎません。構文は次のとおりです。

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>

詳細
には、それについて知るために多くの問題に直面したので、クリップボードサービスを利用して解決策を共有します。
まず、興味のあるサービスについて知る必要があります-
そのためには、特定のAndroidシステムに存在するすべてのサービスを探す必要があります。

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の完全なパスを知る必要があります。
GoogleでIClipboard.aidlを検索する必要があることを知るには。
私の場合のように、結果で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をpath_of_clipboard.aidl =にします

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

これらのサービスコールコードはAndroidシステムに依存しているため、Android OS名を知る必要があります。私の場合は8.1.0
なので、Googleがコードを配置する次のWebサイトに移動して、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になります。他のメソッドについても同様です。
したがって、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を表します。

ヒント logcatを開いたまま(android studioのように)、そのadbコマンドの実行中に発生したエラーを確認します。
ソース


6

の本当の問題service callは、トランザクションコードが文書化されていないだけでなく、安定していることも保証されていないことです。Androidのバージョン間で暗黙的に変更される可能性があります。このため、service callAndroidのバージョンが使用されていることがわかっている場合は、プライベートデバッグ以外のコマンドを使用しないでください。

例:

(ここで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.