Tüm “/ system / bin / service” çağrılarının açıklamasını nerede bulabilirim?


12

Bir cevapta kullanılması tavsiye edildi service call phone 2 s16 "$number". Çalışıyor, ancak service listbaşka yararlı şeyler görüyorum, nasıl kullanılacağını bilmiyorum ve bilgileri internette kolayca bulamıyorum.

Ben herhangi bir iç gözlem görmüyorum servicedışında service listkendim findout için ...

"Servis" çağrıları ve parametreleri hakkında daha ayrıntılı bilgi nerede bulunur?


1
Güzel Soru ...
Android Quesito

Yanıtlar:


5

Kısacası

Servis çağrısı komutu ile ilgili kod sadece fonksiyonun argümanlarıdır ve fonksiyonun o servisin aidl dosyasında gerçekleştiği sıradır.

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>

Ayrıntılı
olarak bu konuda bilmek bir çok sorunla karşı karşıya kaldım ve bu nedenle çözümü pano hizmetinin yardımıyla paylaşacağım.
Önce ilgilendiğiniz hizmet hakkında bilmeniz gerekir - Bunun
için yazarak belirli android sistemi için orada olan tüm hizmeti aramak gerekir

adb shell service list

İşte alacağınız şey -

.
.
.
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]
.
.
.

Pano hizmetiyle ilgileniyorum, işte nasıl göründüğü

70  clipboard: [android.content.IClipboard]

Böylece buradan servis adının pano hizmeti olduğunu ve paket yolunun android.content.IClipboard olduğunu özetleyebiliriz.

O zaman IClipboard.aidl'in tam yolunu bilmeniz gerekir.
Google'da IClipboard.aidl için arama yapmanız gerektiğini bilmek için.
Benim durumumda olduğu gibi sonuçlarda android.googlesource.com web sitesinden bir şey aramanız gerekiyor.

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

Bu yüzden + / android-4.2.2_r1 yolunuzun bulunduğu yerdir.

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

Bu servis çağrı kodları android sistemine bağlı olduğundan, bu nedenle android işletim sistemi adını bilmeniz gerekir- Benim durumumda 8.1.0
Bu yüzden google orada kodu koyar ve işletim sistemi sürümünü seçin aşağıdaki web sitesine gidecek sayfanın sol tarafı -

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

Benim durumumda android-8.1.0_r50.Ona tıklayacağım ve bundan sonra URL'im böyle görünecek

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

Ve sonra path_of_clipboard.aidl ekledikten sonra, tam URL'm şöyle görünecek

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

Burada arayüzde birçok yöntem olacak.

    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);

Yani ilk yöntem yani setPrimaryClip için kod ilk sırada olduğu gibi 1 olacak ve son yöntem için yani hasClipboardText için aidl dosyasında yedinci yerde olduğu gibi 7 olacaktır. Benzer şekilde diğer yöntemler için.
Eğer yedinci yöntemi çağırmak istersem

adb shell service call clipboard 7 

Gördüğünüz gibi, gerektiği gibi callingPackage adını koymadım.

Yöntemin bağımsız değişkenlere ihtiyacı varsa, bu örnekte gösterildiği gibi iletebilirsiniz.
Panodaki kodu 8 olan ve şuna benzeyen bir yöntem olduğunu varsayalım -

getDemo(String arg1, int arg2, boolean arg3)

Bu yüzden böyle diyeceğim

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

Burada i32, 32 bit tam sayı ve s16 için dize anlamına gelir. Boolean değerini örnekte gösterildiği gibi bir tamsayı olarak bile aktarabiliriz.
Boole tamsayısında 1, doğru, 0 ise yanlış anlamına gelir.

İPUCU Bu adb komutunu yürütürken oluşan herhangi bir hatayı kontrol etmek için logcat'i açık tutun (android stüdyoda olduğu gibi).
Kaynak


6

Asıl sorun service call, işlem kodlarının sadece belgelenmemiş olması değil, aynı zamanda kararlı olduğu garanti edilmemesidir - Android sürümleri arasında sessizce değiştirilebilirler. Bu nedenle, service callAndroid sürümünün ne olduğunu bildiğinizde, özel hata ayıklama dışında komutlar asla kullanılmamalıdır.

Misal:

(Burada FIRST_CALL_TRANSACTION = 1, bu nedenle service call phonekomutta kullanılması gereken gerçek işlem kodu , kaynak artı 1'de görülen sayıdır.)

Yeni sürümün TRANSACTION_supplyPukortasına yerleştirildiğine ve aşağıdaki tüm kodların 1'e kaydırıldığına dikkat edin. service call phoneBu işlemi gerçekleştirmek için kullanılan her şey Android 4.2.2'de kullanıldığında korkunç bir şekilde kırılacaktır - aynı kodlar tamamen farklı yöntemlerin çağrılmasına neden olacaktır. , muhtemelen felaketle sonuçlanır.


Biraz daha yüksek bir şey var service call, ancak yine de süper kullanıcı konsolundan birçok şeyin yapılmasına izin veriyor mu?
Vi0

4

Hiçbir belge yok. Ancak aradığınız tüm bilgileri android kaynak kodunda bulabilirsiniz. service listsize paket adını verir. Yani phonehizmet için com.android.internal.telephony.ITelephony. Android sürümünüz için service call phonelistelenen tüm olası parametreleri bulacaksınız com/android/internal/telephony/ITelephony.java.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.