Androidサービスを開始および停止するシェルスクリプトを作成する必要があります。
私は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.
コンポーネント(?)名)。
開始サービス:
adb Shell am startservice ...
サービスを開始します。オプションは次のとおりです。 current:実行するユーザーを指定します。指定されていない場合、現在のユーザーとして実行されます。
停止中サービス:
adb Shell am stopservice ...
サービスを停止します。オプションは次のとおりです。 current:実行するユーザーを指定します。指定されていない場合、現在のユーザーとして実行されます。
あなたが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>]
サービスを開始できます
am startservice com.xxx/.service.XXXService
しかし、私はまだそれを止める方法を知りません。
他のコンポーネントがサービスを呼び出せるようにするには、サービスのAndroid:exported属性を「true」に設定する必要があります。 AndroidManifest.xmlファイルで、次の属性を追加します。
<service Android:exported="true" ></service>
その後、adbを介してサービスを開始できるはずです。
adb Shell am startservice com.package.name/.YourServiceName
Android:exported属性の詳細については、 このページ を参照してください。
使用中に「*エラー:アプリがバックグラウンドにあります*」というエラーが表示される場合があります
adb Shell am startservice
オレオ(26歳以上)。これには、フォアグラウンドのサービスが必要です。以下を使用してください。
adb Shell am start-foreground-service com.some.package.name/.YourServiceSubClassName
意図の指定に関するサンドロイドへのpzulwのフィードバックへの応答。
コンポーネント名の形式は、APIドキュメントの ComponentName.unflattenFromString で説明されています
文字列を最初の「/」で分割し、前の部分をパッケージ名として、後の部分をクラス名として使用します。特別な利便性として(たとえば、コマンドラインでコンポーネント名を解析するときに使用するため)、 '/'の直後に '。'が続く場合最終的なクラス名は、パッケージ名と「/」に続く文字列の連結になります。したがって、「com.foo/.Blah」はpackage = "com.foo" class = "com.foo.Blah"になります。
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
am startservice <INTENT>
または実際にはOSシェルから
adb Shell am startservice <INTENT>
サービス名パラメーターの定義方法についてまだ混乱している場合は、完全修飾クラス名のアプリケーションパッケージ名の直後にスラッシュを付けます。
そのため、アプリケーションパッケージ名は次のとおりです。app.package.name
そして、サービスへのフルパス:app.package.name.example.package.path.MyServiceClass
その場合、コマンドは次のようになります。
adb Shell am startservice app.package.name/.example.package.path.MyServiceClass