W skrócie
Kod związany z poleceniem wywołania usługi to tylko argumenty funkcji i kolejność, w jakiej funkcja występuje w pliku pomocniczym tej usługi. Oto składnia
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>
Szczegółowo
napotkałem wiele problemów, aby o tym wiedzieć i dlatego podzielę się rozwiązaniem za pomocą usługi schowka.
Najpierw musisz wiedzieć o usłudze, którą jesteś zainteresowany - w
tym celu poszukaj całej usługi dostępnej dla konkretnego systemu Android, wpisując
adb shell service list
Oto, co dostaniesz -
.
.
.
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]
.
.
.
Ponieważ jestem zainteresowany usługą schowka, oto jak to wygląda
70 clipboard: [android.content.IClipboard]
Stąd możemy podsumować, że nazwa usługi to usługa schowka, a ścieżka pakietu to android.content.IClipboard
Następnie musisz znać pełną ścieżkę do pliku IClipboard.aidl.
Aby wiedzieć, że musisz wyszukać w Google IClipboard.aidl.
Musisz poszukać czegoś na stronie android.googlesource.com w wynikach, tak jak w moim przypadku-
https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl
Więc po + / android-4.2.2_r1 jest tam, gdzie leży twoja ścieżka. Niech ścieżka będzie ścieżką do clipboard.aidl =
/core/java/android/content/IClipboard.aidl
Ponieważ te kody połączeń serwisowych zależą od systemu Android, dlatego musisz znać swoją nazwę systemu operacyjnego Android. W moim przypadku jest to
wersja 8.1.0. Więc przejdę do następującej witryny, w której Google umieszcza kod i wybieram wersję systemu operacyjnego z lewa strona strony -
https://android.googlesource.com/platform/frameworks/base/
W moim przypadku jest to Android-8.1.0_r50. Kliknę na niego, a następnie mój adres URL będzie wyglądał tak
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
A potem po dodaniu path_of_clipboard.aidl mój pełny adres URL będzie wyglądał
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
W interfejsie będzie wiele metod, podobnie jak w moim przypadku
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);
Zatem kod dla pierwszej metody, tj. SetPrimaryClip, będzie wynosił 1, tak jak pojawił się na pierwszym miejscu, a dla ostatniej metody, tj. HasClipboardText, będzie wynosił 7, tak jak pojawił się na siódmym miejscu w pliku aidl. Podobnie w przypadku innych metod.
Więc jeśli chcę wywołać siódmą metodę, wpiszę
adb shell service call clipboard 7
Jak mogłeś zauważyć, nie wstawiłem nazwy pakietu wywołującego, ponieważ nie jest on wymagany.
Jeśli metoda potrzebuje argumentów, możesz przekazać ją tak, jak pokazano w tym przykładzie.
Załóżmy metodę, której kod ma w schowku kod 8 i wygląda następująco -
getDemo(String arg1, int arg2, boolean arg3)
Nazwie to tak
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
I32 oznacza 32-bitową liczbę całkowitą, a s16 oznacza ciąg. Możemy nawet przekazać wartość logiczną jako liczbę całkowitą, jak pokazano w przykładzie.
W logicznych liczbach całkowitych 1 oznacza true, a 0 false.
WSKAZÓWKA Trzymaj logcat otwarty (jak w Android Studio), aby sprawdzić, czy wystąpił błąd, który wystąpił podczas wykonywania tego polecenia adb.
Źródło