W jednej odpowiedzi zalecono mi użycie service call phone 2 s16 "$number"
. Działa, ale service list
widzę inne przydatne rzeczy, których nie umiem używać i nie mogę łatwo znaleźć informacji w Internecie.
Nie widzę żadnej introspekcji service
poza tym, service list
żeby się dowiedzieć ...
Gdzie znaleźć pełniejszy opis połączeń „serwisowych” i ich parametrów?
Odpowiedzi:
W skrócie
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
Oto, co dostaniesz -
Ponieważ jestem zainteresowany usługą schowka, oto jak to wygląda
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-
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 =
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
A potem po dodaniu path_of_clipboard.aidl mój pełny adres URL będzie wyglądał
W interfejsie będzie wiele metod, podobnie jak w moim przypadku
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ę
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 -
Nazwie to tak
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
źródło
Prawdziwy problem
service call
polega na tym, że kody transakcji są nie tylko nieudokumentowane, ale również nie są stabilne - można je cicho zmieniać między wersjami Androida. Z tego powoduservice call
nigdy nie należy używać poleceń , z wyjątkiem prywatnego debugowania, gdy wiadomo, która wersja Androida jest używana.Przykład:
(Tutaj
FIRST_CALL_TRANSACTION
= 1, więc rzeczywisty kod transakcji, który powinien zostać użyty wservice call phone
poleceniu, to liczba widoczna w źródle plus 1.)Zauważ, że w nowej wersji
TRANSACTION_supplyPuk
został wstawiony w środku, a wszystkie następujące kody są teraz przesunięte o 1. Wszystko, co zostało użyteservice call phone
do przeprowadzenia tej transakcji, będzie strasznie zepsute, gdy zostanie użyte na Androidzie 4.2.2 - te same kody spowodują wywołanie zupełnie innych metod , prawdopodobnie z katastrofalnymi skutkami.źródło
service call
, a jednocześnie pozwala na wiele rzeczy do zrobienia z konsoli superużytkownika?Brak dokumentacji. Ale wszystkie potrzebne informacje można znaleźć w kodzie źródłowym Androida.
service list
daje ci nazwę pakietu. Tak jest w przypadkuphone
usługicom.android.internal.telephony.ITelephony
. Znajdziesz wszystkie możliwe parametry dlaservice call phone
wymienionych wcom/android/internal/telephony/ITelephony.java
wersji dla Androida.źródło