2011-09-14 9 views

Odpowiedz

12

Jeśli chcesz uruchomić skrypt w powłoce adb, to próbuję zrobić to samo, ale z aplikacją. Myślę, że można użyć "am zacząć" polecenie

Zastosowanie: AM [podpolecenia] [opcje]

start an Activity: am start [-D] [-W] <INTENT> 
    -D: enable debugging 
    -W: wait for launch to complete 

**start a Service: am startservice <INTENT>** 

send a broadcast Intent: am broadcast <INTENT> 

start an Instrumentation: am instrument [flags] <COMPONENT> 
    -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT) 
    -e <NAME> <VALUE>: set argument <NAME> to <VALUE> 
    -p <FILE>: write profiling data to <FILE> 
    -w: wait for instrumentation to finish before returning 

start profiling: am profile <PROCESS> start <FILE> 
stop profiling: am profile <PROCESS> stop 

start monitoring: am monitor [--gdb <port>] 
    --gdb: start gdbserv on the given port at crash/ANR 

<INTENT> specifications include these flags: 
    [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] 
    [-c <CATEGORY> [-c <CATEGORY>] ...] 
    [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...] 
    [--esn <EXTRA_KEY> ...] 
    [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...] 
    [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...] 
    [-n <COMPONENT>] [-f <FLAGS>] 
    [--grant-read-uri-permission] [--grant-write-uri-permission] 
    [--debug-log-resolution] 
    [--activity-brought-to-front] [--activity-clear-top] 
    [--activity-clear-when-task-reset] [--activity-exclude-from-recents] 
    [--activity-launched-from-history] [--activity-multiple-task] 
    [--activity-no-animation] [--activity-no-history] 
    [--activity-no-user-action] [--activity-previous-is-top] 
    [--activity-reorder-to-front] [--activity-reset-task-if-needed] 
    [--activity-single-top] 
    [--receiver-registered-only] [--receiver-replace-pending] 
    [<URI>] 
+8

To strona pomocy naprawdę nie pomoże Ci dowiedzieć się, jak określić intencję. W szczególności składnia dla jest tajemnicza. – pzulw

+0

@pzulw [Tylko odpowiedź Tima] (http://stackoverflow.com/a/11867567/611007) w połączeniu z [MrRoy's] (http://stackoverflow.com/a/8469325/611007) i umieszczaniem rzeczy w AndroidManifest.xml zgodnie z [ pod tym linkiem] (http://www.javabeat.net/2013/04/how-to-write-androidmanifest-xml/) pomógł. – n611x007

2

am startservice <INTENT>    

lub faktycznie z powłoki OS

adb shell am startservice <INTENT>

8

Mogę rozpocząć świadczenie usługi przez

am startservice com.xxx/.service.XXXService 

ale nie wiem jak to jeszcze zatrzymać.

+1

Możesz użyć odbiornika, aby zatrzymać usługę, a następnie wysłać transmisję do tego odbiornika. – shaobin0604

5

Odpowiadanie na informacje zwrotne pzulw do sandroida dotyczące określenia zamiaru.

Format nazwy komponentu jest opisane w docs API dla ComponentName.unflattenFromString

It splits the string at the first '/', taking the part before as the package name and the part after as the class name. As a special convenience (to use, for example, when parsing component names on the command line), if the '/' is immediately followed by a '.' then the final class name will be the concatenation of the package name with the string following the '/'. Thus "com.foo/.Blah" becomes package="com.foo" class="com.foo.Blah".

31

jestem początkujący w Androidzie, ale mnie to działa tak:

w AndroidManifest.xml, zrobić upewnij się, wewnątrz <application>, mieć coś takiego:

<service android:name="com.some.package.name.YourServiceSubClassName" android:permission="com.some.package.name.YourServiceSubClassName"> 
    <intent-filter> 
     <action android:name="com.some.package.name.YourServiceSubClassName"/> 
    </intent-filter> 
</service> 

gdzie YourServiceSubClassName przedłużyć android.app.Service jest Twój klasa java, która jest usługą. Gdzie com.some.package to nazwa pakietu, dla mnie zarówno w AndroidManifest.xml, jak i Java. Używane a javabeat.net article jako pomoc, poszukaj <service>

Uwaga również, jakoby między nazwą pakietu i nazwy klasy nie powinno być .service. w tekście, to chyba jest jakaś konwencja, ale dla mnie to spowodowane ClassNotFoundException że jestem jeszcze do rozwiązania.

Następnie zainstaluj apk. Zrobiłem z zaćmienia, ale powinno również działać adb install -r yourApkHere.apk. Odinstaluj jest adb uninstall com.some.package.name, btw.

Można rozpocząć go z systemu hosta w ten sposób, dzięki Just a Tim i MrRoy:

adb shell am startservice com.some.package.name/.YourServiceSubClassName 

ciekawe, nie trzeba -n.

Aby przystanek, używam

adb shell am force-stop com.some.package.name 

Nadzieję, że to pomaga.

Jako że jestem początkującym, proszę poczuć się wolnym od edycji/komentarza, aby naprawić wszelkie nieporozumienia (np. Prawdopodobnie dotyczące .service. w nazwie składnika (?)).

+0

Trzeba dodać 'android: exported =" true "', aby zamanifestować – Atul

+0

. Dlatego dostaję ten błąd? $ am startservice com.adguard.android/.vpn.AdguardVpnService Uruchamianie usługi: Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] cmp = com.adguard.android/.vpn. AdguardVpnService} Błąd: wymaga pozwolenia android.permission.BIND_VPN_SERVICE –

5

Powinieneś ustawić android: eksportowany atrybut usługi na "true", aby umożliwić innym komponentom wywołanie go. W pliku AndroidManifest.xml dodaj następujący atrybut:

<service android:exported="true" ></service> 

Następnie powinieneś być w stanie uruchomić usługę poprzez adb:

adb shell am startservice com.package.name/.YourServiceName 

Aby uzyskać więcej informacji na temat Androida: eksportowane atrybut zobaczyć this page .

11

Zaczynając usługa:

adb shell am startservice ... 

start a Service. Options are: --user | current: Specify which user to run as; if not specified then run as the current user.

Zatrzymanie usługę:

adb shell am stopservice ... 

stop a Service. Options are: --user | current: Specify which user to run as; if not specified then run as the current user.

0

Dla każdego, kto jeszcze nie zna, jak zdefiniować parametr nazwy usług, przedni ukośnik przechodzi natychmiast y po nazwie pakietu aplikacji we w pełni kwalifikowanej nazwie klasy.

Więc podawany jest nazwa aplikacji pakietu: app.package.name

i pełną ścieżkę do służby: app.package.name.example.package.path.MyServiceClass

Następnie polecenie będzie wyglądać następująco:

adb shell am startservice app.package.name/.example.package.path.MyServiceClass 
-1

adb shell pm StartService ... rozpocząć usługę. Dostępne opcje to: --user | current: Określ, który użytkownik uruchomić jako; jeśli nie określono, uruchom jako bieżący użytkownik. Zatrzymywanie usługi:

adb shell pm stopservice ...

+0

Sformatuj kod, proszę –

0

trzeba dodać android:exported="true" aby uruchomić usługę z ADB linii poleceń. Wtedy twój manifest wygląda mniej więcej tak:

<!-- Service declared in manifest --> 
<service 
    android:name=".YourServiceName" 
    android:exported="true" 
    android:launchMode="singleTop"> 
    <intent-filter> 
     <action android:name="com.your.package.name.YourServiceName"/> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</service> <!-- Note: Service is exported to start it using ADB command --> 

a następnie od ADB

Aby uruchomić usługę:

adb shell am startservice com.your.package.name/.YourServiceName

Aby zatrzymać usługę (na Marshmallow):

adb shell am stopservice com.your.package.name/.YourServiceName

Aby zatrzymać usługę (na Jelly Bean):

adb shell am force-stop com.your.package.name

Powiązane problemy