{"id":943,"date":"2023-03-11T18:51:00","date_gmt":"2023-03-11T10:51:00","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=943"},"modified":"2023-04-29T15:40:47","modified_gmt":"2023-04-29T07:40:47","slug":"android-am-command-parsing","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/11\/android-am-command-parsing\/","title":{"rendered":"Android Am\u547d\u4ee4\u89e3\u6790"},"content":{"rendered":"<h2>\u524d\u8a00<\/h2>\n<p>\u5728Android\u4e2d\uff0c\u9664\u4e86\u4ece\u754c\u9762\u4e0a\u542f\u52a8\u7a0b\u5e8f\u4e4b\u5916\uff0c\u8fd8\u53ef\u4ee5\u4ece\u547d\u4ee4\u884c\u542f\u52a8\u7a0b\u5e8f\u3002<\/p>\n<p>\u76f8\u4fe1\u5927\u5bb6\u5bf9adb\u547d\u4ee4\u975e\u5e38\u7684\u719f\u6089\u3002\u547d\u4ee4\u7a97\u53e3\u901a\u8fc7adb bash \u8fdb\u5165Android \u7684Linux\u547d\u4ee4\u884c\u7ec8\u7aef\uff0c\u8f93\u5165am -help\u770b\u5230\u5982\u4e0b\u4fe1\u606f\uff1a<\/p>\n<p><!-- more --><\/p>\n<pre><code class=\"language-bash\">C:\\Users\\yezhou&gt;adb bash\nbash@cancro:\/ $ am -help\nusage: am [subcommand] [options]\nusage: am start [-D] [-W] [-P &lt;FILE&gt;] [--start-profiler &lt;FILE&gt;]\n               [--sampling INTERVAL] [-R COUNT] [-S] [--opengl-trace]\n               [--user &lt;USER_ID&gt; | current] &lt;INTENT&gt;\n       am startservice [--user &lt;USER_ID&gt; | current] &lt;INTENT&gt;\n       am stopservice [--user &lt;USER_ID&gt; | current] &lt;INTENT&gt;\n       am force-stop [--user &lt;USER_ID&gt; | all | current] &lt;PACKAGE&gt;\n       am kill [--user &lt;USER_ID&gt; | all | current] &lt;PACKAGE&gt;\n       am kill-all\n       am broadcast [--user &lt;USER_ID&gt; | all | current] &lt;INTENT&gt;\n       am instrument [-r] [-e &lt;NAME&gt; &lt;VALUE&gt;] [-p &lt;FILE&gt;] [-w]\n               [--user &lt;USER_ID&gt; | current]\n               [--no-window-animation] [--abi &lt;ABI&gt;] &lt;COMPONENT&gt;\n       am profile start [--user &lt;USER_ID&gt; current] [--sampling INTERVAL] &lt;PROCESS&gt; &lt;FILE&gt;\n       am profile stop [--user &lt;USER_ID&gt; current] [&lt;PROCESS&gt;]\n       am dumpheap [--user &lt;USER_ID&gt; current] [-n] &lt;PROCESS&gt; &lt;FILE&gt;\n       am set-debug-app [-w] [--persistent] &lt;PACKAGE&gt;\n       am clear-debug-app\n       am set-watch-heap &lt;PROCESS&gt; &lt;MEM-LIMIT&gt;\n       am clear-watch-heap\n       am monitor [--gdb &lt;port&gt;]\n       am hang [--allow-restart]\n       am restart\n       am idle-maintenance\n       am screen-compat [on|off] &lt;PACKAGE&gt;\n       am package-importance &lt;PACKAGE&gt;\n       am to-uri [INTENT]\n       am to-intent-uri [INTENT]\n       am to-app-uri [INTENT]\n       am switch-user &lt;USER_ID&gt;\n       am start-user &lt;USER_ID&gt;\n       am stop-user [-w] &lt;USER_ID&gt;\n       am stack start &lt;DISPLAY_ID&gt; &lt;INTENT&gt;\n       am stack movetask &lt;TASK_ID&gt; &lt;STACK_ID&gt; [true|false]\n       am stack resize &lt;STACK_ID&gt; &lt;LEFT,TOP,RIGHT,BOTTOM&gt;\n       am stack split &lt;STACK_ID&gt; &lt;v|h&gt; [INTENT]\n       am stack list\n       am stack info &lt;STACK_ID&gt;\n       am task lock &lt;TASK_ID&gt;\n       am task lock stop\n       am task resizeable &lt;TASK_ID&gt; [true|false]\n       am task resize &lt;TASK_ID&gt; &lt;LEFT,TOP,RIGHT,BOTTOM&gt;\n       am get-config\n       am set-inactive [--user &lt;USER_ID&gt;] &lt;PACKAGE&gt; true|false\n       am get-inactive [--user &lt;USER_ID&gt;] &lt;PACKAGE&gt;\n       am send-trim-memory [--user &lt;USER_ID&gt;] &lt;PROCESS&gt;\n               [HIDDEN|RUNNING_MODERATE|BACKGROUND|RUNNING_LOW|MODERATE|RUNNING_CRITICAL|COMPLETE]\n\nam start: start an Activity.  Options are:\n    -D: enable debugging\n    -W: wait for launch to complete\n    --start-profiler &lt;FILE&gt;: start profiler and send results to &lt;FILE&gt;\n    --sampling INTERVAL: use sample profiling with INTERVAL microseconds\n        between samples (use with --start-profiler)\n    -P &lt;FILE&gt;: like above, but profiling stops when app goes idle\n    -R: repeat the activity launch &lt;COUNT&gt; times.  Prior to each repeat,\n        the top activity will be finished.\n    -S: force stop the target app before starting the activity\n    --opengl-trace: enable tracing of OpenGL functions\n    --user &lt;USER_ID&gt; | current: Specify which user to run as; if not\n        specified then run as the current user.\n\nam startservice: start a Service.  Options are:\n    --user &lt;USER_ID&gt; | current: Specify which user to run as; if not\n        specified then run as the current user.\n\nam stopservice: stop a Service.  Options are:\n    --user &lt;USER_ID&gt; | current: Specify which user to run as; if not\n        specified then run as the current user.\n\nam force-stop: force stop everything associated with &lt;PACKAGE&gt;.\n    --user &lt;USER_ID&gt; | all | current: Specify user to force stop;\n        all users if not specified.\n\nam kill: Kill all processes associated with &lt;PACKAGE&gt;.  Only kills.\n  processes that are safe to kill -- that is, will not impact the user\n  experience.\n    --user &lt;USER_ID&gt; | all | current: Specify user whose processes to kill;\n        all users if not specified.\n\nam kill-all: Kill all background processes.\n\nam broadcast: send a broadcast Intent.  Options are:\n    --user &lt;USER_ID&gt; | all | current: Specify which user to send to; if not\n        specified then send to all users.\n    --receiver-permission &lt;PERMISSION&gt;: Require receiver to hold permission.\n\nam instrument: start an Instrumentation.  Typically this target &lt;COMPONENT&gt;\n  is the form &lt;TEST_PACKAGE&gt;\/&lt;RUNNER_CLASS&gt;.  Options are:\n    -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT).  Use with\n        [-e perf true] to generate raw output for performance measurements.\n    -e &lt;NAME&gt; &lt;VALUE&gt;: set argument &lt;NAME&gt; to &lt;VALUE&gt;.  For test runners a\n        common form is [-e &lt;testrunner_flag&gt; &lt;value&gt;[,&lt;value&gt;...]].\n    -p &lt;FILE&gt;: write profiling data to &lt;FILE&gt;\n    -w: wait for instrumentation to finish before returning.  Required for\n        test runners.\n    --user &lt;USER_ID&gt; | current: Specify user instrumentation runs in;\n        current user if not specified.\n    --no-window-animation: turn off window animations while running.\n    --abi &lt;ABI&gt;: Launch the instrumented process with the selected ABI.\n        This assumes that the process supports the selected ABI.\n\nam profile: start and stop profiler on a process.  The given &lt;PROCESS&gt; argument\n  may be either a process name or pid.  Options are:\n    --user &lt;USER_ID&gt; | current: When supplying a process name,\n        specify user of process to profile; uses current user if not specified.\n\nam dumpheap: dump the heap of a process.  The given &lt;PROCESS&gt; argument may\n  be either a process name or pid.  Options are:\n    -n: dump native heap instead of managed heap\n    --user &lt;USER_ID&gt; | current: When supplying a process name,\n        specify user of process to dump; uses current user if not specified.\n\nam set-debug-app: set application &lt;PACKAGE&gt; to debug.  Options are:\n    -w: wait for debugger when application starts\n    --persistent: retain this value\n\nam clear-debug-app: clear the previously set-debug-app.\n\nam set-watch-heap: start monitoring pss size of &lt;PROCESS&gt;, if it is at or\n    above &lt;HEAP-LIMIT&gt; then a heap dump is collected for the user to report\n\nam clear-watch-heap: clear the previously set-watch-heap.\n\nam bug-report: request bug report generation; will launch UI\n    when done to select where it should be delivered.\n\nam monitor: start monitoring for crashes or ANRs.\n    --gdb: start gdbserv on the given port at crash\/ANR\n\nam hang: hang the system.\n    --allow-restart: allow watchdog to perform normal system restart\n\nam restart: restart the user-space system.\n\nam idle-maintenance: perform idle maintenance now.\n\nam screen-compat: control screen compatibility mode of &lt;PACKAGE&gt;.\n\nam package-importance: print current importance of &lt;PACKAGE&gt;.\n\nam to-uri: print the given Intent specification as a URI.\n\nam to-intent-uri: print the given Intent specification as an intent: URI.\n\nam to-app-uri: print the given Intent specification as an android-app: URI.\n\nam switch-user: switch to put USER_ID in the foreground, starting\n  execution of that user if it is currently stopped.\n\nam start-user: start USER_ID in background if it is currently stopped,\n  use switch-user if you want to start the user in foreground.\n\nam stop-user: stop execution of USER_ID, not allowing it to run any\n  code until a later explicit start or switch to it.\n  -w: wait for stop-user to complete.\n\nam stack start: start a new activity on &lt;DISPLAY_ID&gt; using &lt;INTENT&gt;.\n\nam stack movetask: move &lt;TASK_ID&gt; from its current stack to the top (true) or   bottom (false) of &lt;STACK_ID&gt;.\n\nam stack resize: change &lt;STACK_ID&gt; size and position to &lt;LEFT,TOP,RIGHT,BOTTOM&gt;.\n\nam stack split: split &lt;STACK_ID&gt; into 2 stacks &lt;v&gt;ertically or &lt;h&gt;orizontally\n   starting the new stack with [INTENT] if specified. If [INTENT] isn&#039;t\n   specified and the current stack has more than one task, then the top task\n   of the current task will be moved to the new stack. Command will also force\n   all current tasks in both stacks to be resizeable.\n\nam stack list: list all of the activity stacks and their sizes.\n\nam stack info: display the information about activity stack &lt;STACK_ID&gt;.\n\nam task lock: bring &lt;TASK_ID&gt; to the front and don&#039;t allow other tasks to run.\n\nam task lock stop: end the current task lock.\n\nam task resizeable: change if &lt;TASK_ID&gt; is resizeable (true) or not (false).\n\nam task resize: makes sure &lt;TASK_ID&gt; is in a stack with the specified bounds.\n   Forces the task to be resizeable and creates a stack if no existing stack\n   has the specified bounds.\n\nam get-config: retrieve the configuration and any recent configurations\n  of the device.\n\nam set-inactive: sets the inactive state of an app.\n\nam get-inactive: returns the inactive state of an app.\n\nam send-trim-memory: Send a memory trim event to a &lt;PROCESS&gt;.\n\n&lt;INTENT&gt; specifications include these flags and arguments:\n    [-a &lt;ACTION&gt;] [-d &lt;DATA_URI&gt;] [-t &lt;MIME_TYPE&gt;]\n    [-c &lt;CATEGORY&gt; [-c &lt;CATEGORY&gt;] ...]\n    [-e|--es &lt;EXTRA_KEY&gt; &lt;EXTRA_STRING_VALUE&gt; ...]\n    [--esn &lt;EXTRA_KEY&gt; ...]\n    [--ez &lt;EXTRA_KEY&gt; &lt;EXTRA_BOOLEAN_VALUE&gt; ...]\n    [--ei &lt;EXTRA_KEY&gt; &lt;EXTRA_INT_VALUE&gt; ...]\n    [--el &lt;EXTRA_KEY&gt; &lt;EXTRA_LONG_VALUE&gt; ...]\n    [--ef &lt;EXTRA_KEY&gt; &lt;EXTRA_FLOAT_VALUE&gt; ...]\n    [--eu &lt;EXTRA_KEY&gt; &lt;EXTRA_URI_VALUE&gt; ...]\n    [--ecn &lt;EXTRA_KEY&gt; &lt;EXTRA_COMPONENT_NAME_VALUE&gt;]\n    [--eia &lt;EXTRA_KEY&gt; &lt;EXTRA_INT_VALUE&gt;[,&lt;EXTRA_INT_VALUE...]]\n        (mutiple extras passed as Integer[])\n    [--eial &lt;EXTRA_KEY&gt; &lt;EXTRA_INT_VALUE&gt;[,&lt;EXTRA_INT_VALUE...]]\n        (mutiple extras passed as List&lt;Integer&gt;)\n    [--ela &lt;EXTRA_KEY&gt; &lt;EXTRA_LONG_VALUE&gt;[,&lt;EXTRA_LONG_VALUE...]]\n        (mutiple extras passed as Long[])\n    [--elal &lt;EXTRA_KEY&gt; &lt;EXTRA_LONG_VALUE&gt;[,&lt;EXTRA_LONG_VALUE...]]\n        (mutiple extras passed as List&lt;Long&gt;)\n    [--efa &lt;EXTRA_KEY&gt; &lt;EXTRA_FLOAT_VALUE&gt;[,&lt;EXTRA_FLOAT_VALUE...]]\n        (mutiple extras passed as Float[])\n    [--efal &lt;EXTRA_KEY&gt; &lt;EXTRA_FLOAT_VALUE&gt;[,&lt;EXTRA_FLOAT_VALUE...]]\n        (mutiple extras passed as List&lt;Float&gt;)\n    [--esa &lt;EXTRA_KEY&gt; &lt;EXTRA_STRING_VALUE&gt;[,&lt;EXTRA_STRING_VALUE...]]\n        (mutiple extras passed as String[]; to embed a comma into a string,\n         escape it using &quot;\\,&quot;)\n    [--esal &lt;EXTRA_KEY&gt; &lt;EXTRA_STRING_VALUE&gt;[,&lt;EXTRA_STRING_VALUE...]]\n        (mutiple extras passed as List&lt;String&gt;; to embed a comma into a string,\n         escape it using &quot;\\,&quot;)\n    [--grant-read-uri-permission] [--grant-write-uri-permission]\n    [--grant-persistable-uri-permission] [--grant-prefix-uri-permission]\n    [--debug-log-resolution] [--exclude-stopped-packages]\n    [--include-stopped-packages]\n    [--activity-brought-to-front] [--activity-clear-top]\n    [--activity-clear-when-task-reset] [--activity-exclude-from-recents]\n    [--activity-launched-from-history] [--activity-multiple-task]\n    [--activity-no-animation] [--activity-no-history]\n    [--activity-no-user-action] [--activity-previous-is-top]\n    [--activity-reorder-to-front] [--activity-reset-task-if-needed]\n    [--activity-single-top] [--activity-clear-task]\n    [--activity-task-on-home]\n    [--receiver-registered-only] [--receiver-replace-pending]\n    [--selector]\n    [&lt;URI&gt; | &lt;PACKAGE&gt; | &lt;COMPONENT&gt;]\n\nError: unknown command &#039;-help&#039;\nbash@cancro:\/ $<\/code><\/pre>\n<h2>\u4ec0\u4e48\u662fam\u547d\u4ee4<\/h2>\n<p>am\u5168\u79f0ActivityManager\uff0c\u662fAndroid\u4e0bLinux\u7ec8\u7aef\u7684\u4e00\u4e2a\u547d\u4ee4\u884c\u5de5\u5177\u3002\u53ef\u4ee5\u4f7f\u7528am\u53bb\u6a21\u62df\u5404\u79cd\u7cfb\u7edf\u7684\u884c\u4e3a\uff0c\u4f8b\u5982\u542f\u52a8\u4e00\u4e2aActivity\uff0c\u5f3a\u5236\u505c\u6b62\u8fdb\u7a0b\uff0c\u53d1\u9001\u5e7f\u64ad\u8fdb\u7a0b\uff0c\u4fee\u6539\u8bbe\u5907\u5c4f\u5e55\u5c5e\u6027\u7b49\u7b49\u3002<\/p>\n<ul>\n<li>\u62e8\u6253\u7535\u8bdd10086<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">am start -a android.intent.action.CALL -d tel:10086<\/code><\/pre>\n<ul>\n<li>\u6253\u5f00\u7f51\u7ad9http:\/\/www.appblog.cn<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">am start -a android.intent.action.VIEW -d  http:\/\/www.appblog.cn<\/code><\/pre>\n<ul>\n<li>\u542f\u52a8Activity<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">am start -n me.yezhou.algorithm\/.WelcomeActivity<\/code><\/pre>\n<h2>\u4e3b\u8981\u7684\u542f\u52a8Activity\u547d\u4ee4<\/h2>\n<p>am start [options] \u4f7f\u7528options\u53c2\u6570\uff0c\u63a5\u4e0b\u6765\u5217\u4e3eActivity\u547d\u4ee4\u7684[options]\u53c2\u6570\uff1a<\/p>\n<ul>\n<li>-D: \u5141\u8bb8\u8c03\u8bd5\u529f\u80fd<\/li>\n<li>-W: \u7b49\u5f85App\u542f\u52a8\u5b8c\u6210<\/li>\n<li>&#8211;start-profiler <FILE>: \u542f\u52a8profiler\uff0c\u5e76\u5c06\u7ed3\u679c\u53d1\u9001\u5230<\/li>\n<li>&#8211;sampling INTERVAL: \u8bbe\u7f6eprofiler \u53d6\u6837\u65f6\u95f4\u95f4\u9694\uff0c\u5355\u4f4dms<\/li>\n<li>-P: \u7c7b\u4f3c \u2013start-profiler\uff0c\u4e0d\u540c\u7684\u662f\u5f53app\u8fdb\u5165idle\u72b6\u6001\uff0c\u5219\u505c\u6b62profiling<\/li>\n<li>-R: \u91cd\u590d\u542f\u52a8Activity COUNT\u6b21<\/li>\n<li>-S: \u542f\u52a8Activity\u4e4b\u524d\uff0c\u5148\u8c03\u7528forceStopPackage()\u65b9\u6cd5\u5f3a\u5236\u505c\u6b62App<\/li>\n<li>\u2013opengl-trace: \u8fd0\u884c\u83b7\u53d6OpenGL\u51fd\u6570\u7684trace<br \/>\n\u2013 user <USER_ID> | current: \u6307\u5b9a\u7528\u6237\u6765\u8fd0\u884cApp\uff0c\u9ed8\u8ba4\u4e3a\u5f53\u524d\u7528\u6237\u3002<\/li>\n<\/ul>\n<h2>\u542f\u52a8Activity\u7684\u5b9e\u73b0\u539f\u7406<\/h2>\n<p>\u5b58\u5728-W\u53c2\u6570\u5219\u8c03\u7528startActivityAndWait()\u65b9\u6cd5\u6765\u8fd0\u884c\uff0c\u5426\u5219startActivityAsUser()\u3002<\/p>\n<ul>\n<li>\u6253\u5f00\u97f3\u4e50\u64ad\u653e\u5668\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">am start -a android.intent.action.MUSIC_PLAYER<\/code><\/pre>\n<ul>\n<li>\u542f\u52a8\u4e00\u4e2a\u670d\u52a1\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">am startservice -n com.android.music\/com.android.music.MediaPlaybackService (\u8fd9\u91cc-n\u8868\u793a\u7ec4\u4ef6)\n\/\/\u6216\u8005\nam startservice -a cn.appblog.MyService (-a\u8868\u793a\u52a8\u4f5c\uff0c\u5c31\u662f\u5728Androidmanifest\u91cc\u5b9a\u4e49\u7684)<\/code><\/pre>\n<ul>\n<li>\u53d1\u9001\u4e00\u4e2a\u5e7f\u64ad\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">am broadcast -a cn.appblog.MyBroadcast<\/code><\/pre>\n<h2>am\u7684\u76f8\u5173\u53c2\u6570<\/h2>\n<ul>\n<li>a: \u6307\u5b9aIntent action\uff0c \u5b9e\u73b0\u539f\u7406Intent.setAction()\uff1b<\/li>\n<li>n: \u6307\u5b9a\u7ec4\u4ef6\u540d\uff0c\u683c\u5f0f\u4e3a{\u5305\u540d}\/.{\u4e3bActivity\u540d}\uff0c\u5b9e\u73b0\u539f\u7406Intent.setComponent()\uff1b<\/li>\n<li>d: \u6307\u5b9aIntent Data URI<\/li>\n<li>t: \u6307\u5b9aIntent MIME Type<\/li>\n<li>c: \u6307\u5b9aIntent Category\uff0c\u5b9e\u73b0\u539f\u7406Intent.addCategory()<\/li>\n<li>p: \u6307\u5b9a\u5305\u540d\uff0c\u5b9e\u73b0\u539f\u7406Intent.setPackage();<\/li>\n<li>f: \u6dfb\u52a0flags\uff0c\u5b9e\u73b0\u539f\u7406Intent.setFlags(int)\uff0c\u7d27\u63a5\u7740\u7684\u53c2\u6570\u5fc5\u987b\u662fint\u578b\uff1b<\/li>\n<\/ul>\n<h2>am\u547d\u4ee4\u5b9e\u7684\u5b9e\u73b0\u65b9\u5f0f<\/h2>\n<p>am\u547d\u4ee4\u5b9e\u7684\u5b9e\u73b0\u65b9\u5f0f\u5728Am.java\uff0c\u6700\u7ec8\u51e0\u4e4e\u90fd\u662f\u8c03\u7528ActivityManagerService\u76f8\u5e94\u7684\u65b9\u6cd5\u6765\u5b8c\u6210\u7684\uff0cam monitor\u9664\u5916\u3002<\/p>\n<p>\u6bd4\u5982\u524d\u9762\u6982\u8ff0\u4e2d\u4ecb\u7ecd\u7684\u547d\u4ee4am start -a android.intent.action.VIEW -d <a target=\"_blank\" rel=\"noopener\" href=\"http:\/\/www.appblog.cn\">http:\/\/www.appblog.cn<\/a>\uff0c \u542f\u52a8Acitivty\u6700\u7ec8\u8c03\u7528\u7684\u662fActivityManagerService\u7c7b\u7684startActivityAsUser()\u65b9\u6cd5\u6765\u5b8c\u6210\u7684\u3002<\/p>\n<p>\u518d\u6bd4\u5982am kill-all\u547d\u4ee4\uff0c\u6700\u7ec8\u7684\u5b9e\u73b0\u5de5\u4f5c\u662f\u7531ActivityManagerService\u7684killBackgroundProcesses()\u65b9\u6cd5\u5b8c\u6210\u7684\u3002<\/p>\n<h2>\u6536\u7d27\u5185\u5b58<\/h2>\n<p>\u547d\u4ee4<\/p>\n<pre><code class=\"language-bash\">am send-trim-memory  &lt;pid&gt; &lt;level&gt;<\/code><\/pre>\n<p>\u4f8b\u5982\uff1a\u5411pid=12345\u7684\u8fdb\u7a0b\uff0c\u53d1\u51falevel=RUNNING_LOW\u7684\u6536\u7d27\u5185\u5b58\u547d\u4ee4<\/p>\n<pre><code class=\"language-bash\">am send-trim-memory 12345 RUNNING_LOW<\/code><\/pre>\n<p>level\u53d6\u503c\u8303\u56f4\u4e3a\uff1a<\/p>\n<ul>\n<li>HIDDEN<\/li>\n<li>RUNNING_MODERATE<\/li>\n<li>BACKGROUND<\/li>\n<li>RUNNING_LOW<\/li>\n<li>MODERATE<\/li>\n<li>RUNNING_CRITICAL<\/li>\n<li>COMPLETE<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u5728Android\u4e2d\uff0c\u9664\u4e86\u4ece\u754c\u9762\u4e0a\u542f\u52a8\u7a0b\u5e8f\u4e4b\u5916\uff0c\u8fd8\u53ef\u4ee5\u4ece\u547d\u4ee4\u884c\u542f\u52a8\u7a0b\u5e8f\u3002 \u76f8\u4fe1\u5927\u5bb6\u5bf9adb\u547d\u4ee4\u975e\u5e38\u7684\u719f\u6089\u3002 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[202],"tags":[],"class_list":["post-943","post","type-post","status-publish","format-standard","hentry","category-android-build"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=943"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/943\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}