{"id":1538,"date":"2022-11-09T11:11:28","date_gmt":"2022-11-09T03:11:28","guid":{"rendered":"https:\/\/www.jarvisw.com\/?p=1538"},"modified":"2022-11-14T16:58:04","modified_gmt":"2022-11-14T08:58:04","slug":"pixelexperience%e7%bc%96%e8%af%91%e4%b8%ba%e5%ae%89%e5%8d%93%e6%a8%a1%e6%8b%9f%e5%99%a8avd%e9%95%9c%e5%83%8f%e7%9a%84%e6%96%b9%e6%b3%95","status":"publish","type":"post","link":"https:\/\/www.jarvisw.com\/?p=1538","title":{"rendered":"\u5b89\u5353\u6a21\u62df\u5668(Android Emulator AVD)\u79fb\u690dPixelExperiece\u6559\u7a0b"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u80cc\u666f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PixelExperience\u662f\u4e00\u4e2a\u57fa\u4e8eAOSP\u548cLineageOS\u7684\u5b89\u5353\u7cfb\u7edf\uff0c\u56e0\u4e3a\u5176\u91c7\u7528\u4e86\u548cPixel\u4e00\u6837\u7684UI\u754c\u9762\uff0c\u53d7\u5230\u5f88\u591a\u539f\u751f\u515a\u7684\u559c\u7231\u3002\u6700\u8fd1\u9879\u76ee\u9700\u8981\u5728\u5b89\u5353\u6a21\u62df\u5668AVD\u4e2d\u79fb\u690d\u5176\u4ed6\u5382\u5546\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u56e0\u4e3aPE\u548cAOSP\u6700\u63a5\u8fd1\u5e76\u4e14\u5f00\u6e90\uff0c\u8c03\u8bd5\u6bd4\u8f83\u65b9\u4fbf\uff0c\u56e0\u6b64\u6253\u7b97\u4ecePE\u5f00\u59cb\u5c1d\u8bd5\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u79fb\u690d\u8fc7\u7a0b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u9996\u5148PE\u7684\u6784\u5efa\u7cfb\u7edf\u662f\u57fa\u4e8eAOSP\u7684\uff0c\u901a\u5e38\u6a21\u62df\u5668\u955c\u50cf\u5728AOSP\u4e2d\u901a\u5e38\u4e3asdk_phone_arm64\u6216\u8005sdk_phone_x86_64\uff0c\u5176\u4e2d\u4ece\u5b89\u535311\u5f00\u59cb\uff0cGoogle\u9ed8\u8ba4\u53bb\u6389\u4e86sdk_phone_arm64\u7684target\uff08\u5176\u5b9emk\u6587\u4ef6\u8fd8\u5728\uff0c\u53ea\u662f\u9700\u8981\u81ea\u5df1\u52a0\u5230lunch\u5217\u8868\u91cc\u800c\u5df2\uff09\uff0c\u4e0d\u8fc7\u56e0\u4e3a\u6211\u9700\u8981\u5728M1 Macbook Pro\u7684Android SDK Emulator\u4e2d\u4f7f\u7528\uff0c\u56e0\u6b64\u9700\u8981\u7f16\u8bd1\u6210arm64\u955c\u50cf\uff0c\u8fd9\u7bc7\u6587\u7ae0\u5c31\u8bb0\u5f55\u4e00\u4e0b\u6298\u817e\u8fc7\u7a0b\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u83b7\u53d6\u4ee3\u7801<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u4e00\u6b65\u6bd4\u8f83\u7b80\u5355\uff0c\u7167\u7740PE\u7684github\u4e0a\u7684\u6307\u5f15\u6765\u505a\u5373\u53ef\u3002\u6211\u8fd9\u91cc\u9700\u8981\u7f16\u8bd1\u7684\u662f\u57fa\u4e8e\u5b89\u535312\u7684\u7248\u672c\uff0c\u5c31\u9009\u62e9twelve-plus\u6216\u8005twelve\u5bf9\u5e94\u7684\u5206\u652f\u5373\u53ef\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u514b\u9686\u4ee3\u7801\u9700\u8981\u5b89\u88c5repo\u5de5\u5177\uff0c\u5b89\u88c5\u65b9\u6cd5\u7f51\u4e0a\u6559\u7a0b\u5f88\u591a\uff0c\u5c31\u4e0d\u518d\u6d6a\u8d39\u53e3\u820c\u4e86\uff0c\u5927\u5bb6\u81ea\u5df1\u641c\uff0c\u8fd9\u91cc\u76f4\u63a5\u5c31\u76f4\u63a5\u4ece\u514b\u9686\u4ee3\u7801\u5f00\u59cb\u3002<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nmkdir pe-plus\ncd pe-plus\nrepo init -u https:\/\/github.com\/PixelExperience\/manifest -b twelve-plus\nrepo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u5c31\u662f\u6f2b\u957f\u7684\u4e0b\u8f7d\u4ee3\u7801\u7684\u8fc7\u7a0b\uff0c\u5982\u679c\u5927\u5bb6\u6709\u56fd\u5916\u670d\u52a1\u5668\u7684\u5c3d\u91cf\u9009\u62e9\u7845\u8c37\u7684\u72ec\u7acb\u670d\u52a1\u5668\uff0c\u8fd9\u6837\u901f\u5ea6\u4f1a\u5feb\u5f88\u591a\uff0c\u5b9e\u6d4b\u53ef\u4ee5\u572830min\u5de6\u53f3\u62c9\u5b8c\u4ee3\u7801\uff0c\u5728\u56fd\u5185\u4e0b\u8f7d\u4ee3\u7801\u901f\u5ea6\u592a\u6162\uff0c\u9700\u8981\u7b49\u5f85\u66f4\u957f\u65f6\u95f4\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e0b\u8f7d\u6a21\u62df\u5668\u955c\u50cf\u76f8\u5173\u7684device\u652f\u6301<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee3\u7801\u4e0b\u8f7d\u5b8c\u6210\u4e4b\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a\u7f16\u8bd1Emulator AVD\u955c\u50cf\u6240\u9700\u8981\u7684device\u4ee3\u7801\u6dfb\u52a0\u4e0a\u3002\u5728PE\u7684gituhub\u4e2d\u6211\u4eec\u770b\u5230\u4e00\u4e2asnippets\u76ee\u5f55\u91cc\u9762\u6709\u4e00\u4e2aremove.xml\u6587\u4ef6\uff0c\u5176\u4e2d\u5220\u9664\u4e86\u5b83\u8ba4\u4e3a\u4e0d\u9700\u8981\u7684aosp\u6e90\u7801\u6811\u4e2d\u7684\u4e00\u4e9b\u6a21\u5757\uff0c\u5927\u6982\u5982\u4e0b\u7684\u6837\u5b50\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n  &lt;!-- Device repos --&gt;\n  &lt;remove-project name=&quot;device\/amlogic\/yukawa&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/amlogic\/yukawa-kernel&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/common&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/arm64&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/armv7-a-neon&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/art&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/car&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/common&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/goldfish&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/goldfish-opengl&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/mini-emulator-arm64&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/mini-emulator-armv7-a-neon&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/mini-emulator-x86&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/mini-emulator-x86_64&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/opengl-transport&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/qemu&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/trusty&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/uml&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/x86&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/generic\/x86_64&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/atv&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/barbet&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/barbet-kernel&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/barbet-sepolicy&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/bonito&quot; \/&gt;\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u4f46\u662f\u6211\u4eec\u8981\u7f16\u8bd1\u7684\u662fAVD\u955c\u50cf\uff0c\u4f1a\u7528\u5230device\/common\u548cdevice\/generic\u76ee\u5f55\u4e0b\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u628a\u8fd9\u90e8\u5206\u5185\u5bb9\u5220\u9664\u4ee5\u540e\u518d\u91cd\u65b0\u540c\u6b65repo\u3002\u4fee\u6539.repo\/manifests\/snippets\/remove.xml\u6587\u4ef6\uff0c\u5220\u9664name\u91ccdevice\/common\u548cdevice\/generic\u5f00\u5934\u7684\u6761\u76ee\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nvim .repo\/manifests\/snippets\/remove.xml\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n  &lt;!-- Device repos --&gt;\n  &lt;remove-project name=&quot;device\/amlogic\/yukawa&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/amlogic\/yukawa-kernel&quot; \/&gt;\n\n     &lt;!-- \u8fd9\u4e2d\u95f4\u7684\u5168\u90e8\u5220\u6389 --&gt;\n\n  &lt;remove-project name=&quot;device\/google\/atv&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/barbet&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/barbet-kernel&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/barbet-sepolicy&quot; \/&gt;\n  &lt;remove-project name=&quot;device\/google\/bonito&quot; \/&gt;\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u6700\u540e\u91cd\u65b0repo sync -jX\u5373\u53ef\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6dfb\u52a0\u7f16\u8bd1target<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fdb\u5165pe-plus\u76ee\u5f55\uff0c\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n. build\/envsetup.sh\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u53d1\u73b0\u5728\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u65f6\uff0cPE\u7684\u7f16\u8bd1\u94fe\u5305\u542b\u4e86\u4ed6\u81ea\u5df1\u7684\u4e00\u4e2avendorsetup\u811a\u672c\u3002\u4f4d\u7f6e\u5728vendor\/aosp\/vendorsetup.sh\uff0c\u6253\u5f00\u770b\u770b\u6e90\u7801\u53ef\u4ee5\u53d1\u73b0PE\u901a\u8fc7vendor\/aosp\/tools\/get_official_devices.py\u4ecegithub\u7f51\u7ad9\u4e0a\u62c9\u53d6\u76ee\u524d\u652f\u6301\u7684device target\u5217\u8868\uff0c\u6dfb\u52a0\u5230\u4e00\u4e2a\u6570\u7ec4\u91cc\u9762\uff0c\u6240\u4ee5\u5982\u679c\u8981\u6dfb\u52a0\u81ea\u5df1\u7684target\u7684\u8bdd\u6211\u4eec\u76f4\u63a5\u52a0\u5728\u540e\u9762\u5c31\u53ef\u4ee5\u4e86\u3002\u7f16\u8f91vendor\/aosp\/vendorsetup.sh\u6587\u4ef6\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nlunch_others_targets=()\nfor device in $(python vendor\/aosp\/tools\/get_official_devices.py)\ndo\n    for var in user userdebug eng; do\n        lunch_others_targets+=(&quot;aosp_$device-$var&quot;)\n    done\ndone\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6700\u540e\u6dfb\u52a0\u4e0a\u4e00\u884clunch_others_targets+=(&#8220;sdk_phone_arm64-userdebug&#8221; &#8220;sdk_phone_arm64-eng&#8221;)\u5373\u53ef\uff0c\u56e0\u4e3a\u6211\u9700\u8981\u7684\u662farm64\u7684target\uff0c\u6240\u4ee5\u5c31\u52a0\u4e0aarm64\uff0c\u5982\u679c\u9700\u8981x86_64\u5c31\u52a0\u4e0asdk_phone_x86_64-userdebug\u6216\u8005sdk_phone_x86_64-eng\u90fd\u53ef\u4ee5\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u91cd\u65b0\u8fd0\u884cbuild\/envsetup.sh\uff0c\u7136\u540elunch\uff0c\u5c31\u80fd\u770b\u5230\u6211\u4eec\u81ea\u5df1\u6dfb\u52a0\u7684target\u4e86\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"565\" height=\"499\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247.png\" alt=\"\" class=\"wp-image-1553\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247.png 565w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-300x265.png 300w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u9009\u62e9292\u6216\u8005293\u5373\u53ef\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5f15\u5165PE\u7f16\u8bd1\u914d\u7f6e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u65f6\u5019\uff0c\u76f4\u63a5\u7f16\u8bd1\u8fd8\u662f\u4e0d\u884c\u7684\uff0c\u4f1a\u62a5\u9519\uff0c\u56e0\u4e3a\u867d\u7136AOSP\u672c\u8eab\u652f\u6301sdk_phone\u7684\u7f16\u8bd1target\uff0c\u4f46\u662f\u5e76\u6ca1\u6709\u52a0\u5165\u5230PE\u7684\u7f16\u8bd1\u73af\u5883\u91cc\u9762\uff0c\u56e0\u6b64\u7f16\u8bd1\u8fc7\u7a0b\u4f1a\u62a5\u9519\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-1-1024x232.png\" alt=\"\" class=\"wp-image-1554\" width=\"840\" height=\"190\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-1-1024x232.png 1024w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-1-300x68.png 300w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-1-768x174.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-1.png 1463w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u9519\u8bef\u539f\u56e0\u662funknown variable &#8216;$(PATH_OVERRIDE_SOONG)&#8217;\uff0c\u8fd9\u91cc\u9700\u8981\u627e\u4e00\u4e0bPATH_OVERRIDE_SOONG\u5728\u54ea\u91cc\u5b9a\u4e49\u7684\uff0c\u53d1\u73b0\u662f\u5728aosp\/config\/BoardConfigSoong.mk\u91cc\u9762\uff0c\u8bf4\u660e\u8fd9\u65f6\u5019sdk_phone\u7684\u914d\u7f6e\u8fd8\u6ca1\u6709\u5f15\u5165PE\u9700\u8981\u7684mk\u6587\u4ef6\u3002\u4e3a\u6b64\uff0c\u5bf9\u6bd4\u4e86\u4e00\u4e0b\u5176\u4ed6\u7684target\uff0c\u6bd4\u5982Pixel 5\uff0c\u5bf9\u6bd4PE\u7684aosp_redfin.mk\u548cgoogle\u539f\u751f\u7684mk\u6587\u4ef6\uff0c\u53d1\u73b0PE\u7684mk\u6587\u4ef6\u4e2d\u591a\u4e86\u4e00\u884c\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$(call inherit-product, vendor\/aosp\/config\/common_full_phone.mk)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u5c31\u662f\u5f15\u5165\u4e86PE\u7684\u7f16\u8bd1\u8bbe\u7f6e\u4e86\uff0c\u6211\u4eec\u540c\u6837\u8981\u5728build\/target\/product\/sdk_phone_arm64.mk\u4e2d\u5f15\u5165\u8fd9\u4e00\u884c\uff0c\u53ef\u4ee5\u52a0\u5728PRODUCT_PACKAGES\u4e4b\u524d\u5373\u53ef\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n...\u4e0a\u9762\u7701\u7565...\n# Inherit some common Pixel Experience stuff. &lt;----\u52a0\u5728\u8fd9\u91cc\uff1a\n$(call inherit-product, vendor\/aosp\/config\/common_full_phone.mk)\n\n# keep this apk for sdk targets for now\nPRODUCT_PACKAGES += \\\n    EmulatorSmokeTests\n\n# Overrides\nPRODUCT_BRAND := Android\nPRODUCT_NAME := sdk_phone_arm64\nPRODUCT_DEVICE := emulator_arm64\nPRODUCT_MODEL := Android SDK built for arm64\n# Disable &lt;uses-library&gt; checks for SDK product. It lacks some libraries (e.g.\n# RadioConfigLib), which makes it impossible to translate their module names to\n# library name, so the check fails.\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u52a0\u4e0a\u4e4b\u540e\u6211\u4eec\u91cd\u65b0envsetup\u7136\u540elunch\uff0c\u518d\u7f16\u8bd1\u8bd5\u8bd5\u770b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"222\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-2-1024x222.png\" alt=\"\" class=\"wp-image-1557\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-2-1024x222.png 1024w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-2-300x65.png 300w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-2-768x166.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-2.png 1470w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u6b21\u53d1\u73b0\uff0c\u9519\u8bef\u8fd8\u662fcmd: unknown variable &#8216;$(PATH_OVERRIDE_SOONG)&#8217;\uff0c\u7ecf\u8fc7\u4e86\u4e00\u4e9b\u8c03\u8bd5\uff0c\u53d1\u73b0common_full_phone.mk\u786e\u5b9e\u5df2\u7ecf\u88abinclude\u4e86\uff0c\u4f46\u662f\u4e0d\u77e5\u4e3a\u4f55BoardConfigSoong.mk\u4ecd\u7136\u6ca1\u6709\u88ab\u6b63\u5e38include\uff0c\u8fd9\u6b21\u6211\u4eec\u4eceBoardConfigSoong.mk\u5f00\u59cb\u4e00\u7ea7\u4e00\u7ea7\u5411\u4e0a\u8ffd\u6eaf\uff0c\u6700\u540e\u53d1\u73b0\u95ee\u9898\u51fa\u73b0\u5728build\/make\/core\/config.mk\u6587\u4ef6\uff0c\u91cc\u9762\u6709\u8fd9\u4e48\u4e00\u6bb5\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n...\u4e0a\u9762\u7701\u7565...\nifneq ($(CUSTOM_BUILD),)\ninclude vendor\/aosp\/config\/BoardConfig.mk\nendif\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u53ea\u6709\u5f53CUSTOM_BUILD\u53d8\u91cf\u4e0d\u4e3a\u7a7a\u7684\u65f6\u5019\uff0c\u624d\u4f1ainclude BoardConfig.mk\uff0c\u90a3\u4e48\u8fd9\u4e2aCUSTOM_BUILD\u53d8\u91cf\u662f\u4ec0\u4e48\u5462\uff1f\u7ecf\u8fc7\u641c\u7d22\u6700\u540e\u5728build\/make\/envsetup.sh\u6587\u4ef6\u91cc\u627e\u5230\u8fd9\u4e48\u4e00\u6bb5\u4ee3\u7801\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n....\nfunction check_product()\n{\n    local T=$(gettop)\n    if &#x5B; ! &quot;$T&quot; ]; then\n        echo &quot;Couldn't locate the top of the tree.  Try setting TOP.&quot; &gt;&amp;2\n        return\n    fi\n    if (echo -n $1 | grep -q -e &quot;^aosp_&quot;) ; then\n        CUSTOM_BUILD=$(echo -n $1 | sed -e 's\/^aosp_\/\/g')\n    else\n        CUSTOM_BUILD=\n    fi\n    export CUSTOM_BUILD\n\n        TARGET_PRODUCT=$1 \\\n        TARGET_BUILD_VARIANT= \\\n        TARGET_BUILD_TYPE= \\\n        TARGET_BUILD_APPS= \\\n        get_build_var TARGET_DEVICE &gt; \/dev\/null\n    # hide successful answers, but allow the errors to show\n}\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u53ef\u4ee5\u770b\u51fa\u6765\uff0c\u53ea\u6709aosp_\u5f00\u5934\u7684target\uff0c\u624d\u4f1a\u8bbe\u5b9a\u4e00\u4e2aCUSTOM_BUILD\uff0c\u5426\u5219\u8fd9\u4e2a\u53d8\u91cf\u5c31\u662f\u7a7a\u7684\uff0c\u800c\u8fd9\u4e2a\u53d8\u91cf\u5982\u679c\u662f\u7a7a\u7684\uff0c\u5c31\u4e0d\u4f1ainclude BoardConfig.mk\uff0c\u56e0\u6b64\u9020\u6210\u9519\u8bef\u3002\u800c\u6211\u4eec\u7f16\u8bd1\u6210sdk_phone\u7684target\u65f6\uff0c\u662f\u6ca1\u6709CUSTOM_BUILD\u7684\uff0c\u6240\u4ee5\u9700\u8981\u81ea\u5df1\u8bbe\u5b9a\u4e00\u4e2a\uff0c\u6bd4\u5982\u6211\u8fd9\u91cc\u5c31\u53ebemu\u597d\u4e86\uff0c\u6309\u5982\u4e0b\u7684\u65b9\u5f0f\u6539\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n....\nfunction check_product()\n{\n    local T=$(gettop)\n    if &#x5B; ! &quot;$T&quot; ]; then\n        echo &quot;Couldn't locate the top of the tree.  Try setting TOP.&quot; &gt;&amp;2\n        return\n    fi\n    if (echo -n $1 | grep -q -e &quot;^aosp_&quot;) ; then\n        CUSTOM_BUILD=$(echo -n $1 | sed -e 's\/^aosp_\/\/g')\n    elif (echo -n $1 | grep -q -e &quot;^sdk_&quot;) ; then\n        CUSTOM_BUILD=&quot;emu&quot;\n    else\n        CUSTOM_BUILD=\n    fi\n    export CUSTOM_BUILD\n\n        TARGET_PRODUCT=$1 \\\n        TARGET_BUILD_VARIANT= \\\n        TARGET_BUILD_TYPE= \\\n        TARGET_BUILD_APPS= \\\n        get_build_var TARGET_DEVICE &gt; \/dev\/null\n    # hide successful answers, but allow the errors to show\n}\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u91cd\u65b0\u8d70envsetup\u6d41\u7a0b\u548clunch\uff0c\u7ee7\u7eed\u5c1d\u8bd5\u91cd\u65b0\u7f16\u8bd1\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u53bb\u6389\u4e0d\u9700\u8981\u7684soong_namespace<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">lunch\u4e4b\u540e\u5bf9\u6bd4\u5b98\u65b9\u7684AOSP sdk_phone target\u53ef\u4ee5\u53d1\u73b0\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PRODUCT_SOONG_NAMESPACES=device\/generic\/goldfish device\/generic\/goldfish-opengl hardware\/google\/camera hardware\/google\/camera\/devices\/EmulatedCamera device\/generic\/goldfish device\/generic\/goldfish-opengl packages\/apps\/Bluetooth <strong>hardware\/nxp hardware\/qcom-caf\/common\/fwk-detect<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u76ee\u524d\u7684NAMESPACES\u591a\u51fa\u4e86hardware\/nxp hardware\/qcom-caf\/common\/fwk-detect\u8fd9\u4e24\u4e2a\u6a21\u5757\uff0c\u8fd9\u662f\u6211\u4eec\u4e0d\u9700\u8981\u7684\uff0c\u9700\u8981\u53bb\u9664\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u7f16\u8bd1\u51fa\u7684\u955c\u50cf\u65e0\u6cd5\u5728AVD\u4e2d\u542f\u52a8\u3002\u7ecf\u8fc7\u641c\u7d22\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u9700\u8981\u4fee\u6539<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">aosp\/config\/BoardConfigSoong.mk\uff0c\u53bb\u6389\u5c3e\u90e8\u5982\u4e0b\u7684\u5185\u5bb9\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nifneq ($(TARGET_USES_NQ_NFC),true)\nPRODUCT_SOONG_NAMESPACES += hardware\/nxp\nendif #TARGET_USES_NQ_NFC\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u4fee\u6539aosp\/config\/BoardConfig.mk\u6587\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53bb\u6389\u5c3e\u90e8\u5982\u4e0b\u7684\u5185\u5bb9\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nTARGET_FWK_DETECT_PATH ?= hardware\/qcom-caf\/common\nPRODUCT_SOONG_NAMESPACES += \\\n    $(TARGET_FWK_DETECT_PATH)\/fwk-detect\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u89e3\u51b3\u7f16\u8bd1\u8fc7\u7a0b\u9519\u8bef<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7ee7\u7eed\u5c1d\u8bd5\u7f16\u8bd1\uff0c\u8fd9\u6b21\u7684\u9519\u8bef\u53d8\u6210\u4e86<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-3-1024x442.png\" alt=\"\" class=\"wp-image-1562\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-3-1024x442.png 1024w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-3-300x129.png 300w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-3-768x331.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-3.png 1463w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"424\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-4-1024x424.png\" alt=\"\" class=\"wp-image-1563\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-4-1024x424.png 1024w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-4-300x124.png 300w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-4-768x318.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-4.png 1461w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5177\u4f53\u9519\u8bef\u53d1\u751f\u5728build\/make\/core\/artifact_path_requirements.mk\uff0c\u8fd9\u4e2a\u9519\u8bef\u5728\u7f51\u4e0a\u641c\u7d22\u4e86\u4e00\u4e0b\uff0c\u53d1\u73b0\u662fARTIFACT_PATH_REQUIREMENTS\u6821\u9a8c\u5f15\u8d77\u7684\uff0c\u7f16\u8bd1emulator\u955c\u50cf\u628a\u8fd9\u4e2a\u68c0\u67e5\u7ed9DISABLE\u5c31\u53ef\u4ee5\u4e86\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4fee\u6539vendor\/aosp\/config\/common_full_phone.mk\uff0c\u5728\u6700\u9876\u4e0a\u52a0\u4e0a\u5982\u4e0b\u7684\u4ee3\u7801\u5373\u53ef\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nifeq ($(CUSTOM_BUILD),emu)\nDISABLE_ARTIFACT_PATH_REQUIREMENTS := true\nendif\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u5c31\u53ef\u4ee5\u7ee7\u7eed\u5c1d\u8bd5\u7f16\u8bd1\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u6b21\u7684\u9519\u8bef\u662f\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"313\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-5-1024x313.png\" alt=\"\" class=\"wp-image-1564\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-5-1024x313.png 1024w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-5-300x92.png 300w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-5-768x235.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-5.png 1466w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a\u9519\u8bef\u5c31\u6bd4\u8f83\u5e38\u89c1\u4e86\uff0c\u95ee\u9898\u51fa\u5728vendor\/aosp\/build\/tasks\/kernel.mk\uff0c\u56e0\u4e3asdk_phone target\u7684\u7f16\u8bd1\u662f\u4f7f\u7528prebuilt\u5185\u6838\u7684\uff0c\u6240\u4ee5\u5728vendor\/aosp\/build\/tasks\/kernel.mk\u628a\u7f16\u8bd1kernel\u90e8\u5206\u7ed9\u6392\u9664\u5373\u53ef\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6700\u9876\u4e0a\u52a0\u4e0aCUSTOM_BUILD\u7684\u5224\u65ad\u5373\u53ef<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nifneq ($(CUSTOM_BUILD),emu)\nifneq ($(TARGET_NO_KERNEL),true)\n...\u4e2d\u95f4\u7701\u7565...\nendif # TARGET_NO_KERNEL\nendif\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u518d\u6b21\u5c1d\u8bd5\u7f16\u8bd1\uff0c\u8fd9\u6b21\u7ec8\u4e8e\u53ef\u4ee5\u6b63\u5e38\u8fdb\u884c\u7f16\u8bd1\u4e86\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"176\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-6-1024x176.png\" alt=\"\" class=\"wp-image-1565\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-6-1024x176.png 1024w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-6-300x52.png 300w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-6-768x132.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-6.png 1461w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u7f16\u8bd1\u7684\u8fc7\u7a0b\u53ef\u80fd\u4f1a\u51fa\u73b0You have tried to change the API from what has been previously approved.\u7c7b\u4f3c\u7684\u95ee\u9898\uff0c\u5927\u6982\u5982\u4e0b\u56fe<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"454\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-7-1024x454.png\" alt=\"\" class=\"wp-image-1574\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-7-1024x454.png 1024w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-7-300x133.png 300w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-7-768x340.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-7.png 1458w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nFAILED: out\/soong\/.intermediates\/frameworks\/base\/api-stubs-docs-non-updatable\/android_common\/metalava\/check_current_api.timestamp\n( true &amp;amp;&amp;amp; diff -u -F '{ *$' frameworks\/base\/core\/api\/current.txt out\/soong\/.intermediates\/frameworks\/base\/api-stubs-docs-non-updatable\/android_common\/metalava\/api-stubs-docs-non-updatable_api.txt &amp;amp;&amp;amp; diff -u -F '{ *$' frameworks\/base\/core\/api\/removed.txt out\/soong\/.intermediates\/frameworks\/base\/api-stubs-docs-non-updatable\/android_common\/metalava\/api-stubs-docs-non-updatable_removed.txt &amp;amp;&amp;amp; touch out\/soong\/.intermediates\/frameworks\/base\/api-stubs-docs-non-updatable\/android_comm\non\/metalava\/check_current_api.timestamp ) || ( echo -e &quot;\\n******************************\\nYou have tried to change the A\nPI from what has been previously approved.\\n\\nTo make these errors go away, you have two choices:\\n   1. You can add '@h\nide' javadoc comments (and remove @SystemApi\/@TestApi\/etc)\\n      to the new methods, etc. shown in the above diff.\\n\\n\n  2. You can update current.txt and\/or removed.txt by executing the following command:\\n         m api-stubs-docs-non-up\ndatable-update-current-api\\n\\n      To submit the revised current.txt to the main Android repository,\\n      you will ne\ned approval.\\n******************************\\n&quot; ; exit 38 ) # hash of input list: 029245c8d5b1fb42417b35080e5be16671c76f\nca0c74c985b4a579247f7b7b1e\n--- frameworks\/base\/core\/api\/current.txt        2022-11-09 03:55:30.306190310 +0000\n+++ out\/soong\/.intermediates\/frameworks\/base\/api-stubs-docs-non-updatable\/android_common\/metalava\/api-stubs-docs-non-updatable_api.txt  2022-11-09 09:04:10.522007109 +0000\n@@ -35422,6 +35422,7 @@ public static final class Settings.Secur\n     field public static final String SELECTED_INPUT_METHOD_SUBTYPE = &quot;selected_input_method_subtype&quot;;\n     field public static final String SETTINGS_CLASSNAME = &quot;settings_classname&quot;;\n     field public static final String SKIP_FIRST_USE_HINTS = &quot;skip_first_use_hints&quot;;\n+    field public static final String TETHERING_ALLOW_VPN_UPSTREAMS = &quot;tethering_allow_vpn_upstreams&quot;;\n     field public static final String TOUCH_EXPLORATION_ENABLED = &quot;touch_exploration_enabled&quot;;\n     field @Deprecated public static final String TTS_DEFAULT_COUNTRY = &quot;tts_default_country&quot;;\n     field @Deprecated public static final String TTS_DEFAULT_LANG = &quot;tts_default_lang&quot;;\n-e\n******************************\nYou have tried to change the API from what has been previously approved.\n\nTo make these errors go away, you have two choices:\n   1. You can add '@hide' javadoc comments (and remove @SystemApi\/@TestApi\/etc)\n      to the new methods, etc. shown in the above diff.\n\n   2. You can update current.txt and\/or removed.txt by executing the following command:\n         m api-stubs-docs-non-updatable-update-current-api\n\n      To submit the revised current.txt to the main Android repository,\n      you will need approval.\n******************************\n\n10:12:31 ninja failed with: exit status 1\n\n#### failed to build some targets (02:24 (mm:ss)) ####\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u662f\u56e0\u4e3aPE\u53ef\u80fd\u4fee\u6539\u4e86\u7cfb\u7edfFramework\u4e2d\u7684API\u6e90\u7801\uff0c\u5982\u679c\u8981\u7ee7\u7eed\u7f16\u8bd1\uff0c\u9700\u8981\u5148\u8fd0\u884c\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nmake update-api\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u4e4b\u540e\u5c31\u4f1a\u66f4\u65b0current.txt\uff0c\u5c31\u53ef\u4ee5\u6b63\u5e38\u7ee7\u7eed\u7f16\u8bd1\u6d41\u7a0b\u4e86\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7f16\u8bd1\u5b8c\u6210\u540e\uff0c\u4f1a\u5728out\/target\/product\/emulator_arm64\u76ee\u5f55\u4e0b\u751f\u6210\u955c\u50cf\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u8fd0\u884c\u955c\u50cf<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u628aout\/target\/product\/emulator_arm64\u76ee\u5f55\u4e0b\u7684system-qemu.img\uff0cvendor-qemu.img\uff0cramdisk-qemu.img\uff0cencryptionkey.img\u8986\u76d6\u5230SDK system-images\u76ee\u5f55\u4e0b\u7684\u67d0\u4e2aarm64\u955c\u50cf\u76ee\u5f55\u4e0b\u9762\uff08\u6587\u4ef6\u9700\u8981\u91cd\u547d\u540d\uff0c\u628a-qemu\u540e\u7f00\u53bb\u6389\uff09\uff0c\u7136\u540e\u7528\u8fd9\u4e2a\u955c\u50cf\u4e00\u4e2a\u521b\u5efaAVD\uff0c\u8bd5\u8bd5\u770b\u662f\u5426\u53ef\u4ee5\u8fd0\u884c\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"632\" height=\"1024\" src=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-8-632x1024.png\" alt=\"\" class=\"wp-image-1581\" srcset=\"https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-8-632x1024.png 632w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-8-185x300.png 185w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-8-768x1243.png 768w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-8-949x1536.png 949w, https:\/\/www.jarvisw.com\/wp-content\/uploads\/2022\/11\/\u56fe\u7247-8.png 1066w\" sizes=\"auto, (max-width: 632px) 100vw, 632px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5230\u6b64\uff0c\u6211\u4eec\u7f16\u8bd1\u7684\u955c\u50cf\u5df2\u7ecf\u53ef\u4ee5\u6b63\u5e38\u5728Android Emulator\u4e2d\u8fd0\u884c\u8d77\u6765\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6ce8\u610f\u4e8b\u9879<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PE\u5b98\u65b9\u7ed9\u7684\u7f16\u8bd1\u6559\u7a0b\u662f\u4f7f\u7528mka bacon -jX\u547d\u4ee4\u8fdb\u884c\u7f16\u8bd1\uff0c\u8fd9\u4e2a\u547d\u4ee4\u6700\u7ec8\u4f1a\u751f\u6210.zip\u5237\u673a\u5305\uff0c\u4f46\u662f\u6211\u4eec\u7f16\u8bd1\u7684\u662f\u6a21\u62df\u5668\u955c\u50cf\uff0c\u6700\u540e\u751f\u6210\u7684\u6587\u4ef6\u4e5f\u7f3a\u5c11\u6253\u5305\u6210.zip\u5237\u673a\u5305\u7684\u90e8\u5206\u6587\u4ef6\uff0c\u56e0\u6b64\u4f7f\u7528\u5b98\u65b9\u7f16\u8bd1\u547d\u4ee4\u4f1a\u7f16\u8bd1\u5931\u8d25\u3002\u800c\u5b9e\u9645\u4e0aPE\u4f7f\u7528\u7684\u662fLineageOS\u7684\u7f16\u8bd1\u7cfb\u7edf\uff0c\u6211\u4eec\u7f16\u8bd1\u76f4\u63a5\u8f93\u5165mka -jX\u5373\u53ef\u6b63\u5e38\u7f16\u8bd1\uff0c\u4e0d\u9700\u8981\u52a0bacon\u8fd9\u4e2atarget\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u80cc\u666f PixelExperience\u662f\u4e00\u4e2a\u57fa\u4e8eAOSP\u548cLineageOS\u7684\u5b89\u5353\u7cfb\u7edf\uff0c\u56e0\u4e3a\u5176\u91c7\u7528\u4e86\u548cPixel [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[291],"tags":[294,292,66],"class_list":["post-1538","post","type-post","status-publish","format-standard","hentry","category-mobile-security","tag-aosp","tag-pixel","tag-66"],"_links":{"self":[{"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=\/wp\/v2\/posts\/1538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1538"}],"version-history":[{"count":22,"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=\/wp\/v2\/posts\/1538\/revisions"}],"predecessor-version":[{"id":1585,"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=\/wp\/v2\/posts\/1538\/revisions\/1585"}],"wp:attachment":[{"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jarvisw.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}