跳轉到

如何追蹤應用程式

基礎

向 Obtainium 新增應用程式連結時,必須選擇一個應用程式來源。應用程式來源定義了如何從您輸入的連結中擷取應用程式資訊和 APK 檔案。大多數情況下,Obtainium 會自動選擇要使用的應用程式來源,如果無法選擇,則會顯示“覆寫來源”下拉選單。

至少,應用程式來源必須為其應用程式提供以下資料:

  • 應用程式版本(或“偽版本”——為應用程式的每個新版本而改變的識別碼)
  • 至少一個與所提供版本對應的 APK 下載連結

應用程式來源還可提供其他資訊——這些資訊可提供額外功能或使用者介面優勢。例如:

  • 應用程式作者
  • 應用程式套件名稱
  • 最新版本的發布日期
  • 應用程式舊版本或其他變體資訊

在理想的情況下,每個應用程式來源都能以簡單明瞭的方式提供所需的全部資訊——每個給定的連結只提供一個應用程式,並以標準格式提供所需的全部資訊。但實際情況往往並非如此——即使是同一個應用程式來源,也有許多不同的應用程式發布處理方式,因此不可能有一套固定的步驟來處理所有應用程式。因此,在新增應用程式時,您會看到各種附加選項,這些選項可用於修改擷取應用程式資訊的方式。雖然預設值適用於大多數應用程式,但您可能需要瞭解這些選項以處理極端情況,更多資訊請參閱下面的應用程式來源部分。

注意:Obtainium 中的許多篩選條件設定(包括許多特定於應用程式來源的可選篩選條件)都使用了規則運算式——你應該熟悉這些。

版本偵測

Obtainium 在追蹤當前已安裝的應用程式時,會從 Android 中取得應用程式版本,並將其與源提供的版本字串進行比較。然後,它將兩者進行比較,以確定是否有可用的更新,或應用程式的安裝狀態是否已有所變更。只有在兩個版本格式相同的情況下,才能進行比較,但情況並非總是如此。例如,您可能會遇到以下任何一種情況:

  1. 來自 GitHub 來源的 Obtainium

    • 來自 Android 本地的應用程式版本編號: 0.14.21
    • 來自應用程式來源的版本編號: v0.14.21-beta
  2. 來自 SourceHut 來源的 Cheogram

    • 來自 Android 本地的應用程式版本編號: 2.12.8-2+free
    • 來自應用程式來源的版本編號: 2.12.8-2
  3. 來自 Tor 官網的 Tor

    • 來自 Android 本地的應用程式版本編號: 102.2.1-Release (12.5.6)
    • 來自應用程式來源的版本編號: 無(該 HTML 來源未提供版本字串,因此使用連結哈希值作為“偽版本”)
  4. 來自 GitHub 來源的 Quotable

    • 來自 Android 本地的應用程式版本編號: 1
    • 來自應用程式來源的版本編號: v10

Obtainium 會存儲一個“標準”格式列表,用於進行比較(如 x.y.zx.y)。如果比較的兩個版本符合相同的格式,則將進行比較。否則,將停用該應用程式的版本偵測。在某些情況下,Obtainium 會從源字串中刪除多餘的部分,這樣處理將產生一個標準版本編號(例如從 Obtainium 的 v0.14.21-beta 中刪除 v-beta),然後即可進行比較。我們從不試圖從操作系統提供的“真實”版本中剝離部分內容。

該程式碼片段定義了各種「標準」格式的產生方式。

我們隨時都可以擴展這段代碼,新增對更多格式的支援,但這需要慎重考慮。例如,如果 Android 本地某個已安裝應用程式的版本是“1.2”,但應用程式來源顯示該應用程式的最新可用版本是“1.2-4”,我們是否應該去掉 -4 並說兩者是相同的(意味著沒有可用的更新)?在某些情況下(即 -4 實際上並不表示應用程式本身發生了變化)這樣做可能沒有問題,但在其他情況下就不行。因此,支援這種特定情況並不是一個好主意。

關閉版本偵測通常不會對日常使用產生重大影響。如果停用了某個應用程式的版本偵測,您可能偶爾會遇到本地應用程式真實版本與 Obtainium 介面中顯示的版本不一致的情況。這種情況只會在兩種情況下發生:

  1. 如果本地應用程式的版本因 Obtainium 之外的操作而有所變更(例如,如果它被 Google Play 更新)。
  2. 如果 Obtainium 嘗試在背景靜默更新應用程式失敗

在這種情況下,Obtainium 無法偵測到本地應用程式的真實版本已更改,因此無法相應更新其內部記錄——您需要手動糾正不一致。

兩個額外的每應用程式選項可以影響版本的處理方式:

  • 使用版本代碼作為操作系統版本:啟用後,Obtainium 將使用 Android 版本代碼(一個數字)而不是版本名稱字串與源進行比較。當源提供版本代碼但操作系統報告版本名稱時,這可以解決不匹配問題,反之亦然。
  • 使用發布日期作為版本:對於許多源可用,此開關將發布日期視為偽版本,而不是使用源提供的版本字串。當源未提供有意義的版本資訊但發布日期可靠時,此功能非常有用。

另請參閱:Obtainium issue #946 評論

背景更新

Obtainium 會定期在背景檢查應用程式更新。您可以在設定頁面上控制這些更新任務的頻率。

背景更新檢查可以透過兩種機制之一運行:

  • WorkManager(預設):使用 Android 的標準背景任務調度器。這很省電,但可能會被某些製造商的電池優化策略延遲。
  • 前景服務(可選):作為帶有通知的持久前景服務運行。在積極限制背景工作的裝置上,這更可靠,但代價是持續顯示通知。需要 Android 11 或更高版本。

您可以限制背景檢查的時間:

  • 僅限 Wi-Fi:僅當連接到 Wi-Fi 網路時檢查更新。
  • 僅限充電時:僅當裝置充電時檢查更新。

您還可以選擇在每次打開應用程式時("啟動時檢查")和/或每次查看應用程式詳情頁面時檢查更新。

靜默安裝

背景更新檢查任務完成後,任何可用的更新都會被分為兩類:

  1. 可在背景應用程式的更新
  2. 無法在背景應用程式的更新

要在背景自動安裝更新(又稱靜默更新),必須滿足某些條件:

  • 操作系統必須是 Android 12 或更高版本
  • 安裝的應用程式必須是較新的 Android API 版本
  • 當前安裝的應用程式版本必須由 Obtainium 安裝
  • 您必須在 Obtainium 中啟用背景更新(包括全域設定與此應用程式的個別設定——兩者預設皆為啟用)
  • 如果有多個 APK 可用於更新,則必須設定該應用程式的附加選項,以便 Obtainium 能夠將這些 APK 篩選為一個 APK

在可能的情況下,下載並安裝每個可用的更新,然後通知使用者更新可用或已在背景安裝。

預設情況下,Obtainium 逐個下載和安裝更新。啟用並行下載將同時處理多個更新,這可以加快批次更新的速度,但可能會使用更多的網路帶寬和系統資源。

請注意,由於技術限制,背景更新只能以異步、盡力的方式安裝。因此,如果背景更新安裝失敗,您將不會收到錯誤通知。