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