2011-09-14 29 views

Trả lời

12

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>] 
+8

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

+0

@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

2

am startservice <INTENT>    

hoặc thực sự từ vỏ OS

adb shell am startservice <INTENT>

8

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.

+1

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

5

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

31

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

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 (?)).

+0

Cần thêm 'android: exported =" true "' để biểu thị – Atul

+0

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 –

5

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 .

11

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.

0

Đố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 
-1

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

+0

Định dạng mã xin vui lòng –

0

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

Các vấn đề liên quan