本頁說明如何設定 Android 執行階段 (ART) 及其編譯選項。主題
這裡的解決方式包括 系統映像檔的預先編譯設定:dex2oat
編譯選項,以及如何取捨系統分區空間、資料分區空間和
才需進行
請參閱 ART 和 Dalvik 以及 Dalvik 可執行格式,以便與 ART 搭配使用。請參閱驗證中 Android 執行階段 (ART) 的應用程式行為:確保應用程式正常運作 正確做法。
ART 的運作方式
ART 採用預先 (AOT) 編譯,並從 Android 7 開始 採用 AOT 編譯、及時 (JIT) 編譯和解讀的混合組合 並分析 AOT 編譯以上所有執行模式的組合 並會在本節中討論。例如,Pixel 裝置採用的配置 做法如下:
- 應用程式最初安裝時,會有一個由開發人員發行的 dex 中繼資料 (
.dm
) 檔案, Play 商店,內含雲端設定檔。ART AOT 編譯雲端中列出的方法 或者,如果安裝應用程式時沒有 dex 中繼資料檔案,則不會執行 AOT 編譯 執行任務 - 當應用程式前幾次執行時,系統會解讀未編譯 AOT 的方法。 在解譯方法中,我們接著會編譯經常執行的方法。阿根廷時間 根據執行作業產生本機設定檔,並將其與雲端設定檔 (如果有的話) 結合 存在)。
- 當裝置處於閒置狀態且正在充電時,系統會執行編譯 Daemon 來重新編譯應用程式 產生的資料集
- 在應用程式後續執行作業中,ART 會使用編譯產生的構件 相較於期間產生的程式碼,Daemon 包含更多 AOT 編譯的程式碼 未經過 AOT 編譯的方法仍會解讀或編譯。ART 更新設定檔 安裝程序,系統隨即會在後續的 編譯 Daemon
ART 包含編譯器 (dex2oat
工具) 和執行階段
(libart.so
)。
dex2oat
工具會接收 APK 檔案,並產生一或多個檔案
執行階段載入的編譯構件檔案檔案數量,以及
各個版本的擴充功能和名稱可能會變動,但自
Android 8 版本,系統會產生下列檔案:
.vdex
:包含其他中繼資料,加快驗證速度,有時可能會與 帶有 APK 的未壓縮 DEX 程式碼。.odex
:包含 AOT 編譯的程式碼,適用於 APK。.art (optional)
包含 ART 內部 表示 APK 中列出的部分字串和類別,用來加快 應用程式啟動作業
編譯選項
ART 編譯選項有兩種:
- 系統 ROM 設定:建構元件時,AOT 編譯的程式碼 系統映像檔
- 執行階段設定:ART 如何在 裝置。
編譯器篩選器
其中一種核心 ART 選項來設定這兩個類別,那就是編譯器
篩選器。編譯器篩選器會影響 ART 編譯 DEX 程式碼的方式,
選項傳送至 dex2oat
工具。自 Android 8 起,
以下是正式支援的 4 個篩選器:
verify
:只會執行 DEX 程式碼驗證 (無 AOT 編譯)。quicken
:(在 Android 11 之前) 執行 DEX 程式碼 驗證及最佳化一些 DEX 指示,以提高翻譯效能。speed
:執行 DEX 程式碼驗證和 AOT 編譯所有方法。speed-profile
:執行 DEX 程式碼驗證和 AOT 編譯方法 列在設定檔中。
系統 ROM 設定
建構系統映像檔時,預先安裝的程式庫和應用程式會經過 AOT 編譯。這個 程序稱為 dreopt。這類已編譯的檔案只要所有依附元件即可使用 ,尤其是啟動類別路徑。
注意:如果裝置 更新「系統模組」後,開機類別路徑就非常 可能在下次更新中可能變更,這會導致所有已過時且無法使用的檔案。
設定 dreopt 有多種 ART 建構選項。設定方式 這些選項取決於系統映像檔的可用儲存空間 預先安裝的應用程式。編譯成系統 ROM 的 JAR/APK 可分成四個 類別:
- 啟動類別路徑程式碼:使用
speed-profile
編譯器篩選條件編譯, 預設值。 - 系統伺服器程式碼 (請參閱
PRODUCT_SYSTEM_SERVER_JARS
、PRODUCT_APEX_SYSTEM_SERVER_JARS
、PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
、PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
):- (Android 14 以上版本) 已透過
speed-profile
編譯 編譯器會預設篩選,或是以speed
編譯器篩選器編譯 (如果 沒有個人資料 - (Android 13 以下版本) 已透過
speed
編譯 編譯器篩選器預設會篩選掉。
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
設定 (詳情請參閱本文後續章節) 文件)。 - (Android 14 以上版本) 已透過
- 產品專屬的核心應用程式 (請參閱後續的
PRODUCT_DEXPREOPT_SPEED_APPS
文件):預設是以speed
編譯器篩選器編譯而成。 - 所有其他應用程式:預設是以
speed-profile
編譯器篩選器編譯, 或是使用verify
編譯器篩選器進行編譯。可透過
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
設定 (詳情請參閱下文 文件)。
Makefile 選項
WITH_DEXPREOPT
DONT_DEXPREOPT_PREBUILTS
(Android 5 以上版本)PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
(Android 9) 以上版本)WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
(自 Android 8 MR1 起)LOCAL_DEX_PREOPT
PRODUCT_DEX_PREOPT_BOOT_FLAGS
PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
PRODUCT_DEX_PREOPT_MODULE_CONFIGS
PRODUCT_DEXPREOPT_SPEED_APPS
(自 Android 8 起)PRODUCT_SYSTEM_SERVER_APPS
(自 Android 8 起)PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD
(自 Android 起) 8.WITH_DEXPREOPT_PIC
(適用於 Android 7)WITH_DEXPREOPT_BOOT_IMG_ONLY
(適用於 Android 7 版本) MR1)PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
- (Android 14 以上版本) 如未指定,
speed-profile
使用編譯器篩選器,或者,如果不是設定檔,則會使用speed
編譯器篩選器 或更新提示 - (Android 13 以下版本) 如未指定,
speed
編譯器 篩選器。 - 如果設為
speed
,系統會使用speed
編譯器篩選器。 - 如果設為
speed-profile
,就會使用speed-profile
編譯器篩選器。 如未提供設定檔,則會使用verify
編譯器篩選器。 - 如果設為
verify
,系統會使用verify
編譯器篩選器。 PRODUCT_SYSTEM_SERVER_JARS
、PRODUCT_APEX_SYSTEM_SERVER_JARS
、PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
,PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
- (必要)
PRODUCT_SYSTEM_SERVER_JARS
:系統伺服器類別路徑 JAR 的清單 平台 (即SYSTEMSERVERCLASSPATH
的一部分)。新增系統伺服器 必須指定這份清單中的 classpath JAR。無法將系統伺服器 classpath JAR 加入清單 會導致系統無法載入這些 JAR。 - (必要)
PRODUCT_APEX_SYSTEM_SERVER_JARS
:系統伺服器 classpath JAR 的清單 是透過 APEX 傳送 (也就是SYSTEMSERVERCLASSPATH
的一部分)。格式為<apex name>:<jar name>
。將 APEX 系統伺服器類別路徑 JAR 新增至 這份清單是必要的如果無法將 APEX 系統伺服器類別路徑 JAR 新增至這份清單,將導致 這些 JAR 沒有載入 - (選用,Android 13 以下版本)
PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
:系統伺服器載入的 JAR 清單 透過個別的類別載入器動態 (透過SystemServiceManager.startServiceFromJar
)。將獨立系統伺服器 JAR 新增至 雖然這份清單並非必要,但「強烈建議」您採用這個清單,因為這會讓 JAR 進行編譯和 因此執行階段效能良好 - (自 Android 13 起為必要)
PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
:清單 透過 APEX 傳送的 JAR 會使用個別的類別載入器,以動態方式載入 ( 是透過SystemServiceManager.startServiceFromJar
或宣告為<apex-system-service>
)。格式為<apex name>:<jar name>
。將獨立 APEX 系統伺服器 JAR 新增至 這份清單是必要的如果無法將獨立 APEX 系統伺服器 JAR 新增至這份清單,將導致 啟動失敗。
是否在系統映像檔上安裝的 DEX 程式碼叫用 dex2oat
。預設啟用。
啟用 DONT_DEXPREOPT_PREBUILTS
會禁止系統執行預先建構
都已清除。這些是含有「include $(BUILD_PREBUILT)
」的應用程式
在 Android.mk
中指定的檔案。略過
撤銷可能會透過 Google Play 更新的預先建構應用程式
節省系統映像檔的空間,但會增加首次啟動時間。請注意,此選項不會產生任何影響
Android.bp
中定義的預先建構應用程式。
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
指定預設編譯器篩選器
針對遭棄置的應用程式這些應用程式已在「Android.bp
」中定義,或
include $(BUILD_PREBUILT)
已在其 Android.mk
中指定。如果未指定
預設值為 speed-profile
;如未指定值,則為 verify
且未提供個人資料
啟用「WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
」只會撤銷
開機類別路徑和系統伺服器 jar 檔案
您也可以透過下列方式,啟用或停用個別應用程式
指定模組定義中的 LOCAL_DEX_PREOPT
選項。
如果能立即停用可能會立即停用的應用程式,這項功能就能派上用場
接收 Google Play 更新,因為更新會導致遭撤銷的
程式碼已過時。這也有助於節省
版本升級 OTA,因為使用者可能在
資料分區
LOCAL_DEX_PREOPT
支援 true
或 false
的值
啟用或停用 dexpreopt。此外,nostripping
可以
;如果 dexpreopt 不應移除 classes.dex
該檔案從 APK 或 JAR 檔案匯入。由於這個檔案沒有
但這個最後一個選項是
允許第三方 APK 簽名保持有效。
將選項傳遞至 dex2oat
,以控制啟動映像檔的方式
加以訓練可用於指定自訂圖片類別清單、編譯而成
類別清單和編譯器篩選器
將選項傳遞至 dex2oat
,以便控制除了
開機映像檔會經過編譯
能夠將特定dex2oat
選項
模組和產品設定設在產品的
$(call add-product-dex-preopt-module-config,<modules>,<option>)
上傳了 device.mk
個檔案
其中 <modules>
是 LOCAL_MODULE
清單和
JAR 和 APK 檔案的 LOCAL_PACKAGE
名稱分別。
產品清單,列出了 Google 認定為產品核心的應用程式,以及
使用 speed
編譯器篩選器進行編譯。適用對象
舉例來說,SystemUI 等永久性應用程式
設定檔引導編譯作業只會在下次重新啟動時執行,因此可能較適合
確保這些應用程式一律經過 AOT 編譯
系統伺服器載入的應用程式清單。這些應用程式
根據預設,會使用 speed
編譯器篩選器進行編譯。
是否在裝置上加入 ART 偵錯版本。根據預設,這會是
啟用使用者偵錯版本和工程版本。只要明確覆寫此行為即可
將選項設為 true
或 false
。
根據預設,裝置會使用非偵錯版本 (libart.so
)。
如要切換,請將系統屬性 persist.sys.dalvik.vm.lib.2
設為
libartd.so
。
在 Android 5.1.0 到 Android 6.0.1 版本中,WITH_DEXPREOPT_PIC
可以
都必須指定順序,才能啟用與排名無關的程式碼 (PIC)。透過這個方法
不必放在映像檔中的程式碼
將 /system
轉換為 /data/dalvik-cache
,節省資料分區的空間。
然而,執行階段會稍有影響,因為這樣會停用充分運用優勢的最佳化功能
。一般而言,裝置會佔用 /data
的儲存空間
應該啟用 PIC 編譯
在 Android 7.0 中,系統預設啟用 PIC 編譯。
這個選項已由「WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
」取代
也會預先選用系統伺服器 JAR
這個選項會指定系統伺服器的編譯器篩選器。
系統伺服器載入的 JAR 清單如下。JAR 會使用
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
指定的編譯器篩選器
啟動類別路徑設定
預先載入的類別清單是 Zygote 初始化的一系列類別
啟動。如此一來,每個應用程式就不必執行類別初始化器。
分別可加快啟動速度,並在記憶體中分享頁面。
預先載入的類別清單檔案位於 frameworks/base/config/preloaded-classes
並且包含根據一般手機使用情形調整的清單。這可能會
與其他裝置 (例如穿戴式裝置) 不同,而且必須調整相關設定
。調整時請務必謹慎加入過多課程
就會產生記憶體加入的類別太少,會強制讓每個應用程式執行
必須有自己的副本
這同樣會浪費記憶體
使用方式範例 (位於產品的 device.mk
中):
PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
注意:您必須將此行程式碼置於
沿用任何含有預設值的產品設定檔
build/target/product/base.mk
。
執行階段設定
JIT 選項
以下選項只會影響 ART JIT 編譯器的 Android 版本 可以使用。
dalvik.vm.usejit
:是否啟用 JIT。dalvik.vm.jitinitialsize
(預設為 64K):初始容量 程式碼快取功能程式碼快取會定期 GC,並視需要增加。dalvik.vm.jitmaxsize
(預設為 64M):程式碼快取的最大容量。dalvik.vm.jitthreshold
(預設為 10000): 「熱度」門檻方法必須依序傳遞 才能進行 JIT 編譯「熱度」則是「計數器」指標 複製到執行階段包含呼叫、反向分支版本等 。dalvik.vm.usejitprofiles
(在 Android 13 之前): 未啟用 JIT 設定檔。即使dalvik.vm.usejit
為 false 仍然可以使用。 請注意,如果這個值為 false,編譯器篩選器speed-profile
會 未經過 AOT 編譯任何方法,且等同於verify
。開始時間 Android 14 (JIT 設定檔) 一律會啟用,且無法關閉。dalvik.vm.jitprithreadweight
(預設為dalvik.vm.jitthreshold
/ 20):JIT「樣本」的權重 (請參閱 jitthreshold) 瞭解應用程式 UI 執行緒。用於加快編譯速度 這些方法會直接影響使用者體驗 應用程式。dalvik.vm.jittransitionweight
(預設為dalvik.vm.jitthreshold
/ 10): 方法的權重 叫用程式碼。這有助於 請確定所有涉及的方法經過編譯,以盡量減少轉場 (也就是 高昂)。
Dex2oat 選項
這些選項會影響裝置端編譯 (即 dexopt),其中部分選項也會影響 已清除,但僅限上方「系統 ROM 設定」一節所述的選項 會影響 dexpreopt。
資源用量控管選項:
dalvik.vm.image-dex2oat-threads
/dalvik.vm.image-dex2oat-cpu-set
(在 Android 11 之前):執行緒數量和 CPU 核心組合 (請參閱 ) 用於開機映像檔。dalvik.vm.boot-dex2oat-threads
/dalvik.vm.boot-dex2oat-cpu-set
:- (直到 Android 11 為止) 執行緒數量和 CPU 核心組合 及下文說明 (請參閱下文)。開機映像檔以外的所有物件。
- (自 Android 12 起) 執行緒數量和 CPU 核心組合
(請見下方說明),在開機期間用於所有檔案,包括開機映像檔。
- 具體來說,自 Android 14 起,這對應
ART Service 中的優先類別
PRIORITY_BOOT
。
- 具體來說,自 Android 14 起,這對應
ART Service 中的優先類別
dalvik.vm.restore-dex2oat-threads
/dalvik.vm.restore-dex2oat-cpu-set
:- (從 Android 11 開始,到 Android 13) 要用於從雲端還原的執行緒數量和 CPU 核心組合 (請見下方說明) 備份。
- (自 Android 14 起) 執行緒數量和 CPU 核心組合
(請見下文),針對所有較易受到延遲時間影響的內容 (包括
從雲端備份還原
- 具體來說,這與優先類別相對應
ART 服務中的
PRIORITY_INTERACTIVE_FAST
。
- 具體來說,這與優先類別相對應
ART 服務中的
dalvik.vm.background-dex2oat-threads
/dalvik.vm.background-dex2oat-cpu-set
(自 Android 14 起):執行緒數量和 CPU 核心組合 (請參閱 使用於背景。- 具體來說,這與
PRIORITY_BACKGROUND
ART 服務。
- 具體來說,這與
dalvik.vm.dex2oat-threads
/dalvik.vm.dex2oat-cpu-set
: 執行緒數量和所有其他項目要使用的 CPU 核心組合。
應將一組 CPU 核心指定為以半形逗號分隔的 CPU ID 清單。舉例來說 在 CPU 核心 0 到 3 的 dex2oat 上,請設定:
dalvik.vm.dex2oat-cpu-set=0,1,2,3
設定 CPU 相依性屬性時,建議您為 符合所選 CPU 數量的 dex2oat 執行緒數量,避免不必要的記憶體和 I/O 爭用情況:
dalvik.vm.dex2oat-cpu-set=0,1,2,3 dalvik.vm.dex2oat-threads=4
除了上述系統屬性之外,您還可以使用工作設定檔來控制 dex2oat 資源用量 (請參閱 Cgroup 抽象層)。
支援的工作設定檔如下:
Dex2OatBackground
(自 Android 14 起) (預設為沿用Dex2OatBootComplete
): 控管要在背景使用的資源。- 具體來說,這與
PRIORITY_BACKGROUND
ART 服務。
- 具體來說,這與
Dex2OatBootComplete
:- (Android 13 以下版本) 控管所有要用的資源 啟動後的符記
- (從 Android 14 開始) 控管所有要用的資源
而不是在背景執行
- 具體來說,這與優先類別相對應
ART 中的「
PRIORITY_INTERACTIVE_FAST
」和「PRIORITY_INTERACTIVE
」 售後服務
- 具體來說,這與優先類別相對應
ART 中的「
如果同時指定系統屬性和工作設定檔,兩者都會生效。
控管堆積大小的選項:
dalvik.vm.image-dex2oat-Xms
:啟動映像檔的初始堆積大小。dalvik.vm.image-dex2oat-Xmx
:啟動映像檔的堆積大小上限。dalvik.vm.dex2oat-Xms
:所有其他項目的初始堆積大小。dalvik.vm.dex2oat-Xmx
:其他所有物件的堆積大小上限。
控制以下項目的初始和最大堆積大小的選項
dex2oat
不應減少,因為這可能會限制
則可以編譯
控制編譯器篩選器的選項:
dalvik.vm.image-dex2oat-filter
(直到 Android 11 為止): 用於篩選開機映像檔的編譯器。從 Android 12 開始,編譯器 開機映像檔的篩選條件一律為speed-profile
,且無法變更。dalvik.vm.systemservercompilerfilter
(自 Android 13 起): 系統伺服器的編譯器篩選器。詳情請參閱PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
。dalvik.vm.systemuicompilerfilter
(自 Android 13 起): 系統 UI 套件的編譯器篩選器。dalvik.vm.dex2oat-filter
(直到 Android 6 為止): 編譯器會篩選所有其他項目。pm.dexopt.<reason>
(自 Android 7 起): 編譯器會篩選所有其他項目。詳情請見 Android 適用的 ART 服務設定 14 以上版本,或 的套件管理員設定: Android 13 以下版本。
控管啟動映像檔以外所有項目的編譯方式:
dalvik.vm.dex2oat-very-large
(自 Android 7.1 起):Dex 總檔案大小下限 才能停用 AOT 編譯dalvik.vm.dex2oat-swap
(自 Android 7.1 起) (預設值:true):允許使用替換功能 dex2oat 檔案這有助於避免記憶體不足當機。請注意 開啟,dex2oat 只會在特定條件下使用替換檔案,例如 的 dex 檔案相當大,條件可能會有所變動。dalvik.vm.ps-min-first-save-ms
(從 Android 12 開始): 執行階段首次產生應用程式設定檔前,要等待的最短時間 系統就會啟動應用程式dalvik.vm.ps-min-save-period-ms
(從 Android 12 開始): 更新應用程式設定檔前,至少等候多久時間。dalvik.vm.dex2oat64.enabled
(自 Android 11 開始) (預設值:false): 是否使用 64 位元版本的 dex2oat。dalvik.vm.bgdexopt.new-classes-percent
(自 Android 12 起) (預設值:20): 設定檔中的新類別在 0 到 100 之間,觸發重新編譯作業的百分比下限。 僅適用於設定檔導覽編譯 (speed-profile
),一般適用於 背景 dexopt。請注意,除了 50 個新類別之外,還設有至少 50 個新類別的門檻 無法設定百分比門檻dalvik.vm.bgdexopt.new-methods-percent
(自 Android 12 起) (預設值:20): 設定檔中新方法的百分比下限 (0 到 100),會觸發重新編譯作業。 僅適用於設定檔導覽編譯 (speed-profile
),一般適用於 背景 dexopt。請注意,我們還設有至少 100 個新方法的門檻 無法設定百分比門檻dalvik.vm.dex2oat-max-image-block-size
(自 Android 10 開始) (預設值:524288) 壓縮圖片的固體區塊大小上限。大型圖片將畫面分割成一組實心 不要讓任何區塊大於大小上限。dalvik.vm.dex2oat-resolve-startup-strings
(從 Android 10 開始) (預設值:true) 如果為 true,將使 dex2oat 解析從標示為 「開機」。debug.generate-debug-info
(預設值:false) 是否產生用於原生偵錯 (例如堆疊解開) 的偵錯資訊 資訊、ELF 符號和 Dwarf 區段。dalvik.vm.dex2oat-minidebuginfo
(從 Android 9 開始) (預設值:true) 無論是否產生必要的 LZMA 壓縮偵錯資訊 輸出反向追蹤記錄。
ART 服務選項
從 Android 14 開始,應用程式端的 AOT 編譯 (又稱 dexopt) 並由 ART 服務處理。如要進一步瞭解如何設定 ART 服務,請參閱 ART 服務設定。套件管理員選項
在 Android 14 之前,應用程式的裝置端 AOT 編譯 (又稱 dexopt) 由套件管理員處理如需瞭解如何設定 dexopt 的套件管理工具 請參閱「套件管理員設定」。A/B 專屬設定
ROM 設定
從 Android 7.0 開始,裝置可能會使用兩個系統分割區來啟用 A/B 系統更新: 如要節省系統分區大小,您可以在 未使用的第二個系統分區並將這些資料複製到資料分區 初次啟動時。
使用範例 (device-common.mk
):
PRODUCT_PACKAGES += \ cppreopts.sh PRODUCT_PROPERTY_OVERRIDES += \ ro.cp_system_other_odex=1
在裝置的「BoardConfig.mk
」中:
BOARD_USES_SYSTEM_OTHER_ODEX := true
請注意,開機類別路徑程式碼、系統伺服器程式碼,以及產品專屬核心
應用程式一律會編譯至系統分區根據預設
應用程式會編譯至未使用的第二個系統分區可用的值包括
由 SYSTEM_OTHER_ODEX_FILTER
控制,且其值是由
預設值:
SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
背景 OTA dexopt
在支援 A/B 的裝置上,應用程式可以在背景中編譯,然後再以 新的系統映像檔詳情請參閱「應用程式編譯: 背景,選擇在系統映像檔中加入編譯指令碼和二進位檔。 此編譯使用的編譯篩選器控制:
pm.dexopt.ab-ota=speed-profile
建議你使用 speed-profile
,以啟用個人資料引導
加以編譯,節省儲存空間
JDWP 選項
在使用者偵錯版本中,Java 偵錯傳輸通訊協定 (JDWP) 執行緒的建立作業是透過
persist.debug.dalvik.vm.jdwp.enabled
系統屬性。根據預設
未設定,且只會為可偵錯的應用程式建立 JDWP 執行緒。同時啟用 JDWP 執行緒
可進行偵錯和無法進行偵錯的應用程式,請設定 persist.debug.dalvik.vm.jdwp.enabled
至 1
。裝置必須重新啟動,屬性變更才會生效。
如要在使用者偵錯版本上對無法進行偵錯的應用程式進行偵錯,請執行下列指令來啟用 JDWP 指令:
,瞭解如何調查及移除這項存取權。 針對搭載 Android 13 以下版本的裝置,執行階段會建立 JDWP 適用於使用者偵錯版本上可進行偵錯和無法偵錯應用程式的執行緒。也就是說 來附加偵錯工具,或剖析使用者偵錯版本上的任何應用程式。adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot