web-dev-qa-db-ja.com

adbシェルからAndroidサービスを開始および停止するには?

Androidサービスを開始および停止するシェルスクリプトを作成する必要があります。

45
ranjitrock

私はAndroidの初心者ですが、次のように動作します:

androidManifest.xmlで、<application>、次のようなものがあります。

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

ここで、YourServiceSubClassName extend Android.app.Serviceは、Javaサービスであるクラスです。ここでcom.some.packageは、AndroidManifest.xmlとJavaの両方のパッケージ名です。 javabeat.netの記事 をヘルプとして使用し、<service>

また、おそらくパッケージ名とクラス名の間には.service.テキストでは、これは何らかの慣習であると思いますが、私にとってこれはClassNotFoundExceptionを引き起こしましたが、私はまだ解決していません。

次に、apkをインストールします。 Eclipseでしたが、adb install -r yourApkHere.apk動作するはずです。アンインストールはadb uninstall com.some.package.name、ところで。

次のようにホストシステムからstartすることができます、ありがとう Just a Tim および MrRoy

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

興味深いことに、私は-n

stopに、私は

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

それが役に立てば幸い。

私は初心者なので、誤解を修正するために自由に編集/コメントしてください(たとえば、おそらく.service.コンポーネント(?)名)。

43
n611x007

開始サービス:

adb Shell am startservice ...

サービスを開始します。オプションは次のとおりです。 current:実行するユーザーを指定します。指定されていない場合、現在のユーザーとして実行されます。

停止中サービス:

adb Shell am stopservice ... 

サービスを停止します。オプションは次のとおりです。 current:実行するユーザーを指定します。指定されていない場合、現在のユーザーとして実行されます。

17
bonnyz

あなたがadbシェルでスクリプトを実行したい場合、私は同じことをしようとしていますが、アプリケーションを使用しています。 「am start」コマンドを使用できると思います

使用法:am [サブコマンド] [オプション]

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>]
13
sandroid

サービスを開始できます

am startservice com.xxx/.service.XXXService

しかし、私はまだそれを止める方法を知りません。

9
MrROY

他のコンポーネントがサービスを呼び出せるようにするには、サービスのAndroid:exported属性を「true」に設定する必要があります。 AndroidManifest.xmlファイルで、次の属性を追加します。

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

その後、adbを介してサービスを開始できるはずです。

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

Android:exported属性の詳細については、 このページ を参照してください。

7
AmitB

使用中に「*エラー:アプリがバックグラウンドにあります*」というエラーが表示される場合があります

adb Shell am startservice 

オレオ(26歳以上)。これには、フォアグラウンドのサービスが必要です。以下を使用してください。

adb Shell am start-foreground-service com.some.package.name/.YourServiceSubClassName
6
Kiran k g

意図の指定に関するサンドロイドへのpzulwのフィードバックへの応答。

コンポーネント名の形式は、APIドキュメントの ComponentName.unflattenFromString で説明されています

文字列を最初の「/」で分割し、前の部分をパッケージ名として、後の部分をクラス名として使用します。特別な利便性として(たとえば、コマンドラインでコンポーネント名を解析するときに使用するため)、 '/'の直後に '。'が続く場合最終的なクラス名は、パッケージ名と「/」に続く文字列の連結になります。したがって、「com.foo/.Blah」はpackage = "com.foo" class = "com.foo.Blah"になります。

6
Just a Tim

ADBコマンドラインからサービスを開始するには、Android:exported="true"を追加する必要があります。次に、マニフェストは次のようになります。

<!-- 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 -->

そしてADBから

サービスを開始するには:

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

サービスを停止するには(マシュマロで):

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

サービスを停止するには(Jelly Beanで):

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

5
Atul

am startservice <INTENT>

または実際にはOSシェルから

adb Shell am startservice <INTENT>

2
DonGru

サービス名パラメーターの定義方法についてまだ混乱している場合は、完全修飾クラス名のアプリケーションパッケージ名の直後にスラッシュを付けます。

そのため、アプリケーションパッケージ名は次のとおりです。app.package.name

そして、サービスへのフルパス:app.package.name.example.package.path.MyServiceClass

その場合、コマンドは次のようになります。

adb Shell am startservice app.package.name/.example.package.path.MyServiceClass
1
TheIT