Tôi cần viết kịch bản lệnh shell để bắt đầu và dừng dịch vụ Android.Làm cách nào để bắt đầu và ngừng dịch vụ Android từ trình bao adb?
Trả lời
Nếu bạn muốn chạy tập lệnh trong trình bao adb, thì tôi đang cố gắng thực hiện tương tự, nhưng với một ứng dụng. Tôi nghĩ rằng bạn có thể sử dụng "đang bắt đầu" lệnh
sử dụng: am [subcommand] [tùy chọn]
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 <INTENT>
hoặc thực sự từ vỏ OS
adb shell am startservice <INTENT>
Tôi có thể bắt đầu dịch vụ qua
am startservice com.xxx/.service.XXXService
nhưng tôi không biết cách dừng lại.
Bạn có thể sử dụng bộ thu phát sóng để dừng dịch vụ, sau đó gửi chương trình phát sóng đến máy thu đó. – shaobin0604
Trả lời phản hồi của pzulw cho sandroid về việc xác định ý định.
Định dạng của tên thành phần được mô tả trong các tài liệu api cho 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".
Tôi là một người mới bắt đầu trong Android, nhưng nó đã làm việc như thế này:
trong AndroidManifest.xml, hãy chắc chắn bạn, bên trong <application>
, có một cái gì đó như thế này:
<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>
nơi YourServiceSubClassName
mở rộng android.app.Service
được của bạn lớp java là dịch vụ. Trong đó com.some.package
là tên gói, cho cả tôi trong AndroidManifest.xml và trong Java. Dùng a javabeat.net article như giúp đỡ, tìm kiếm <service>
Cũng lưu ý, được cho là giữa tên gói và tên lớp cần có .service.
trong văn bản, tôi đoán đây là một số quy ước, nhưng đối với tôi điều này gây ra ClassNotFoundException
rằng tôi chưa giải quyết.
Sau đó, cài đặt gói ứng dụng của bạn. Tôi đã làm từ nhật thực nhưng cũng adb install -r yourApkHere.apk
nên hoạt động. Gỡ cài đặt là adb uninstall com.some.package.name
, btw.
Bạn có thể bắt đầu nó từ hệ thống máy chủ như thế này, nhờ Just a Tim và MrRoy:
adb shell am startservice com.some.package.name/.YourServiceSubClassName
thú vị, tôi không cần -n
.
Để dừng, tôi sử dụng
adb shell am force-stop com.some.package.name
Hy vọng nó giúp.
Là người mới bắt đầu, vui lòng chỉnh sửa/nhận xét để sửa bất kỳ quan niệm sai nào (ví dụ: có thể là .service.
trong tên thành phần (?)).
Cần thêm 'android: exported =" true "' để biểu thị – Atul
Vì vậy, đó là lý do tôi nhận được lỗi này? $ am startservice com.adguard.android/.vpn.AdguardVpnService Dịch vụ bắt đầu: Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] cmp = com.adguard.android/.vpn. AdguardVpnService} Lỗi: Yêu cầu quyền android.permission.BIND_VPN_SERVICE –
Bạn nên đặt thuộc tính android: exported của dịch vụ thành "true", để cho phép các thành phần khác gọi nó. Trong file AndroidManifest.xml, thêm thuộc tính sau:
<service android:exported="true" ></service>
Sau đó, bạn sẽ có thể bắt đầu dịch vụ thông qua adb:
adb shell am startservice com.package.name/.YourServiceName
Đối với thông tin thêm về android: thuộc tính xuất khẩu thấy this page .
Bắt đầu một dịch vụ:
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.
Dừng một dịch vụ:
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.
Đối với bất cứ ai vẫn còn lúng túng về cách xác định các tham số tên dịch vụ, dấu gạch chéo chuyển tiếp đi immediatel y sau tên gói ứng dụng trong tên lớp đầy đủ.
Vì vậy, cho một cái tên ứng dụng gói: app.package.name
Và một đường dẫn đầy đủ để phục vụ: app.package.name.example.package.path.MyServiceClass
Sau đó lệnh sẽ trông như thế này:
adb shell am startservice app.package.name/.example.package.path.MyServiceClass
adb shell pm startservice ... bắt đầu Dịch vụ. Các tùy chọn là: --user | current: Chỉ định người dùng nào cần chạy; nếu không được chỉ định thì hãy chạy với tư cách là người dùng hiện tại. Dừng một dịch vụ:
adb shell pm stopservice ...
Định dạng mã xin vui lòng –
Bạn cần phải thêm android:exported="true"
để bắt đầu dịch vụ từ dòng lệnh ADB. Sau đó, biểu hiện của bạn trông giống như sau:
<!-- 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 -->
Và sau đó từ ADB
Để bắt đầu dịch vụ:
adb shell am startservice com.your.package.name/.YourServiceName
Để ngừng dịch vụ (trên Marshmallow):
adb shell am stopservice com.your.package.name/.YourServiceName
Để ngăn chặn dịch vụ (trên Jelly Bean):
adb shell am force-stop com.your.package.name
- 1. Làm thế nào để chạy một exe từ dịch vụ windows và ngừng dịch vụ khi quá trình exe thoát?
- 2. Dịch vụ khởi động Android không bao giờ bắt đầu
- 3. bắt đầu dịch vụ windows từ java
- 4. 'Bắt đầu/dừng adb shell' làm gì?
- 5. Bắt đầu LocationManager như Dịch vụ Android
- 6. Làm thế nào để bắt đầu nhiệm vụ nền chạy dài trong dịch vụ android
- 7. bắt đầu quá trình từ dịch vụ .NET windows
- 8. hoạt động bắt đầu android từ dịch vụ
- 9. Dịch vụ Bắt đầu từ Thông báo
- 10. Cách khởi động dịch vụ Android từ một hoạt động và ngừng dịch vụ trong một hoạt động khác?
- 11. Bắt đầu dừng Dịch vụ từ Biểu mẫu App C#
- 12. Làm thế nào để bạn bao gồm ampersands trong URL để adb shell pm bắt đầu?
- 13. Cách tự động bắt đầu dịch vụ trong Android?
- 14. Dịch vụ không bắt đầu
- 15. Bắt đầu và ngừng hẹn giờ PHP
- 16. cách bắt đầu dịch vụ từ các đoạn
- 17. Bắt đầu dịch vụ nền khi Android bật
- 18. Làm cách nào để bắt đầu quá trình từ dịch vụ WCF được lưu trữ trên IIS?
- 19. Android: bắt đầu dịch vụ với thông số
- 20. dịch vụ bị ràng buộc so với dịch vụ bắt đầu trên Android và cách thực hiện cả hai
- 21. làm cách nào để tôi bắt đầu (và liên kết) một dịch vụ từ xa trong Android được triển khai trong ứng dụng khác (gói khác)?
- 22. Làm cách nào để gắn lại trình mô phỏng Android cho ADB?
- 23. Bắt đầu phiên người dùng mới từ dịch vụ
- 24. Bắt đầu một dịch vụ từ xa Từ C#
- 25. Làm thế nào để nắm bắt đầu ra lỗi tiêu chuẩn từ một dịch vụ Windows?
- 26. Android: Dịch vụ với Context.startService Bắt đầu vs PendingIntent.getService
- 27. android.os.NetworkOnMainThreadException về dịch vụ bắt đầu trên android
- 28. Dịch vụ tự động không bắt đầu
- 29. Cách ngừng dịch vụ đang chạy?
- 30. Làm cách nào để bạn triển khai FileObserver từ Dịch vụ Android
Đó trang trợ giúp thực sự không giúp bạn tìm ra cách để xác định mục đích. Cụ thể, cú pháp cho là bí ẩn. –
pzulw
@pzulw [Chỉ là câu trả lời của Tim] (http://stackoverflow.com/a/11867567/611007) kết hợp với [MrRoy's] (http://stackoverflow.com/a/8469325/611007) và đưa nội dung vào AndroidManifest.xml theo [ trên liên kết này] (http://www.javabeat.net/2013/04/how-to-write-androidmanifest-xml/) đã giúp. –
n611x007