總覽
利用Play Auto Installs(PAI),OEM可以爲設備創建單個軟件版本(單個工廠ROM)並支持服務器端配置。然後,製造商可以通過選擇要安裝的Google Play商店應用來進一步定製該設備,以作爲最終用戶開箱即用體驗的一部分。
爲什麼選擇PAI?
OEM通常會構建相同的硬件SKU並將其交付給各種各樣的客戶(從運營商到最終用戶),然後針對該硬件SKU使用多種軟件變體來滿足單個客戶的需求。在許多情況下,軟件變體之間的差異僅限於預加載的應用程序和功能集。
藉助PAI,OEM可以配置目標參數,以將特定的一組應用程序發送到特定的一組設備(例如,使用特定運營商,在特定國家/地區或特定硬件SKU中部署的一組設備)。PAI使用應用程序的最新版本來避免進行大規模的空中更新(無論用戶是否已登錄設備)。
PAI先決條件
在構建PAI配置之前:
-
獲取對Android Device Config門戶(ADCP)的訪問權限,這 是一個面向合作伙伴的門戶,用於配置PAI應用。設置PAI的功能是按用戶進行訪問控制的;要訪問門戶並獲取PAI的必要權限,請與您的Google技術客戶經理(TAM)聯繫。
-
確保設備支持。參與PAI的設備必須運行包含Google Play商店APK 7.4.33或更高版本的軟件。PAI版本2與Android版本分離,並且在所有設備上都可用。
PAI應用要求
由於PAI應用程序已預先安裝在設備上,因此它們必須滿足其他要求。特別:
-
必須通過Google Play商店提供應用。無法通過Google Play提供的應用無法與PAI一起使用。
-
應用必鬚髮布並遵守 Google Play開發者分發協議。
-
應用程序必須對收件人設備可見/可用。應用分發過濾適用於PAI應用,與適用於其他Google Play應用的過濾相同。
-
應用程序的數量(包括URL快捷方式)必須少於50。
-
對於運行Android 6.0(API級別23)或更高版本的設備,必須針對Android 6.0(API級別23)或更高版本編譯應用。
-
應用必須免費下載(但是允許進行應用內購買和需要登錄的應用)。
PAI工作流程
OEM使用Android設備配置門戶(ADCP)創建PAI產品配置,然後將其與Google Play商店基礎架構配合使用,將指定的一組應用推送到目標設備。
PAI操作涉及以下步驟:
-
OEM 構建 所需的PAI APK:
-
OEM將存根APK添加到將接收PAI應用程序的設備(目標設備)上。
-
在ADCP中,OEM:
-
ADCP驗證配置並與Google Play共享,以使其能夠將正確的PAI應用程序集發送到目標設備。
-
設備首次啓動並進入設置嚮導流程時,Google Play會提供設備配置APK,然後安裝指定的一組應用程序。有關詳細信息,請參見用戶體驗。
建築PAI APK
您可以同時構建設備配置和存根APK。
第1步:查看APK要求
查看APK要求:
步驟2:設定APK環境
使用提供的示例代碼從預先配置的設置開始,然後針對您的PAI應用進行自定義。
-
下載示例代碼 並將其解壓縮到構建樹中。
-
導航到
PlayAutoInstallsConfig
目錄。存根代碼包含在/stub
目錄中。 -
在中
build_APK.mk
,進行編輯LOCAL_CERTIFICATE
以指向將用於對APK簽名的證書。 -
在
AndroidManifest.xml
:-
編輯行
package=
以設置包名稱。 -
確保
oem
in中的值android.autoinstalls.config.oem
設置爲OEM名稱(必填)。
-
-
在中
stub/AndroidManifest.xml
,進行編輯package=
以將包名稱設置爲與步驟4中使用的值相同。
步驟3:配置變體
對於每個變體(例如,不同的語言環境或運算符),請執行以下步驟:
-
在中
Android.mk
,添加變體名稱(例如vzw-us
)。 -
使用語法創建變體目錄 (例如 :)。
res-variantname
res-vzw-us
-
創建兩個子目錄
xml/
和values/
。 -
在中
xml/
,創建並配置用於控制PAI應用顯示和處理的XML文件:-
使用該
default_layout.xml
文件設置主屏幕布局。 -
使用該
auto_install.xml
文件定義組和後臺安裝。
-
-
在中
values/
,編輯strings.xml
文件以爲目錄名稱設置正確的字符串。
步驟4:建立APK
使用make
以下命令構建APK :
$ make TARGET_BUILD_APPS='PlayAutoInstallConfig-variantname' TARGET_BUILD_VARIANT=userdebug
關於設備配置APK
設備配置APK文件列出了要在特定設備上預安裝的應用。您必須爲要定位的每個設備(例如,針對不同區域和運營商的設備)創建單獨的“設備配置” APK文件。
要求
設備配置APK具有以下要求:
-
軟件包名稱應與存根APK的名稱匹配。
-
套餐
AndroidManifest.xml
必須:-
使用以下意圖過濾器定義接收器:
<intent-filter>
<action android:name="android.autoinstalls.config.action.PLAY_AUTO_INSTALL" /> </intent-filter> -
有屬性
android:exported="false"
。 -
android:hasCode="false"
如果APK沒有代碼,則具有屬性。
-
-
設備配置APK必須:
-
將設置爲
versionCode
大於1000的值。 -
使用APK本地化資源爲各種文件夾名稱語言提供備用字符串。
-
包括兩個XML文件:
-
default_layout.xml
,它描述啓動器圖標的位置。 -
auto_install.xml
,它描述安裝組。工作區XML標識要自動安裝的應用程序列表。
-
-
使用與存根APK相同的密鑰簽名。
-
使用與存根APK相同的證書籤名。
-
-
設備配置APK絕不能定義任何權限,活動,其他接收者,內容提供者或服務。
-
列爲PAI應用程序的應用程序包名稱:
-
必須在Google Play中發佈。
-
必須對設備可見。
-
XML文件
設備配置APK包含兩個XML文件,這些文件定義了PAI應用程序集。
default_layout.xml
該文件定義了在啓動器屏幕上顯示圖標的PAI應用程序列表(以及其他預加載的圖標)。該文件必須滿足以下要求:
-
支持啓動程序期望的格式。有關詳細信息,請參閱AOSP啓動器。
-
支持放置PAI下載的應用程序的應用程序小部件。
-
支持指定的URL(瀏覽器鏈接)。
-
支持
<include>
包含XML文件的標籤;此類文件還應遵循default_layout.xml XML格式。
查看示例default_layout.xml
auto_install.xml
該文件定義了在啓動器屏幕上不顯示圖標的PAI應用程序列表。包括沒有圖標的應用程序(無頭應用程序)。
查看示例auto-install.xml文件
自動安裝參數
在中定義PAI應用時 default_layout.xml
,您可以使用autoinstall
標籤指定應自動安裝該應用。的autoinstall
標籤支持以下附加PAI參數。
參數 | 描述 |
---|---|
utmCampaign |
可以由已安裝的應用使用Play Install Referrer API讀取的歸因參數。 |
requiredPreload |
確定是否需要在設備上安裝應用程序。設置:
|
installByDefault |
確定是否預先選擇了可選應用。設置:
|
groupId |
定義應用發起人。可用組類型: 對於 |
關於存根APK
存根APK是安裝在目標設備上的小型應用程序,以使該設備能夠參與PAI。
要求
設備系統映像必須包含存根APK,該存根APK滿足以下授予設備配置APK附加權限的要求。
-
存根APK必須具有以下軟件包名稱:
-
按
android.autoinstalls.config
原樣使用前綴。建議的格式爲android.autoinstalls.config.<oem-name>.<device>
,其中OEM是OEM的品牌。 -
在設備系列中是唯一的。
-
-
軟件包AndroidManifest.xml必須:
-
使用意圖過濾器定義接收器:
<intent-filter>
<action android:name="android.autoinstalls.config.action.PLAY_AUTO_INSTALL" /> </intent-filter> -
有一個屬性
android:exported="false"
。 -
android:hasCode="false"
如果APK沒有代碼,則具有屬性。
-
-
在預安裝的應用程序集中,必須只有一個APK定義了上面的接收器。
-
存根APK必須:
-
將設置
versionCode
爲1。 -
被存儲在
/system/app
(不應有特權的地方)。 -
用私鑰簽名。不允許使用測試鍵;不建議使用平臺密鑰簽名。
-
在出廠ROM中處於禁用狀態。當同一SKU交付給多個運營商時,這一點很重要。
-
-
存根APK絕對不能定義任何權限,活動,其他接收者,內容提供者或服務。
具有特權權限的應用
要將PAI與具有特權權限的應用程序一起使用,請在設備的特權應用程序文件夾(/system/priv-app
)中預加載一個空的佔位符應用程序,其中包含必要的特權權限聲明。
在將應用程序安裝到設備上之前,您可以禁用佔位符應用程序以將其向用戶隱藏(除非安裝了PAI,否則用戶無法安裝該應用程序)。在PAI設置過程中,該應用程序會安裝在設備上,並且Google Play商店會啓用該應用程序(使其在應用程序列表中可見)。
測試中
創建設備配置和存根APK之後,您可以使用一個或多個測試設備來測試PAI操作。
端到端測試
要在PAI配置上執行端到端測試:
-
將存根APK預安裝在測試設備上。
-
在 ADCP中,創建一個新的產品配置。
-
在元數據中:
-
輸入配置名稱。
-
輸入與您的測試設備的基本構建指紋匹配的指紋。
-
啓用發佈配置。
-
-
在定位中:
-
輸入與您的測試設備的基本構建指紋匹配的指紋。
-
輸入測試設備IMEI或序列號作爲硬件ID。
-
-
上載設備配置APK。
-
根據需要配置自動安裝。
-
-
恢復測試設備的出廠設置。
-
在設置過程中,驗證PAI屏幕顯示正確的應用程序集。
-
設置完成後,請在“設置” >“ 應用程序”中檢查APK版本,以驗證是否已成功下載PAI配置APK 。
在不恢復出廠設置的情況下驗證APK下載
對於運行userdebug或eng build的測試設備,您可以通過手動觸發VPA服務來確認設備下載了Device Configuration APK,而無需恢復出廠設置。例:
$ adb root
$ adb shell am startservice -n \
com.android.vending/com.google.android.finsky.setup.VpaService -d \
playsetupservice://startvpa
這會將APK安裝排隊,而無需下載。要強制下載應用,請先停止然後重新啓動Play商店應用。
收集調試信息
如果您在配置或實施PAI時遇到問題,可以與您的Google聯繫人聯繫以尋求幫助。與我們聯繫之前,請從測試設備收集日誌和一些基本信息(Google Play商店版本和Android ID)。
收集日誌
要從測試設備收集日誌:
-
將測試設備連接到工作站(以便您可以
adb
在設備上運行命令)。 -
確保設備正在運行Play商店的用戶 調試版本(因爲您需要root訪問權限才能獲取日誌)。
-
將設備恢復出廠設置並在安裝嚮導的第一頁上停止。
-
從連接的工作站:
-
設置日誌記錄以寫入文件:
$ adb root
$ adb logcat -v threadtime > long.trace.txt -
設置適當的日誌記錄級別:
$ adb shell setprop log.tag.DfeProto VERBOSE
$ adb shell setprop log.tag.Finsky VERBOSE
$ adb shell setprop log.tag.Volley VERBOSE
$ adb shell setprop log.tag.SetupWizard VERBOSE
$ adb shell am broadcast -a \
com.google.gservices.intent.action.GSERVICES_OVERRIDE -e \
finsky.enable_sensitive_logging true
$ adb shell am broadcast -a \
com.google.gservices.intent.action.GSERVICES_OVERRIDE -e \
finsky.debug_options_enabled true
$ adb shell am broadcast -a \
com.google.gservices.intent.action.GSERVICES_OVERRIDE -e \
finsky.http.log_requests_curl true -
強制重啓Google Play商店:
$ adb shell kill `adb shell ps | grep com.android.vending | sed -e "s/^[^ ]* *//;s/[^0-9].*$//"`;
-
-
在測試設備上,完成安裝嚮導。
獲取基本設備信息
從連接的工作站:
-
獲取Google Play商店版本:
$ adb shell pm dump com.android.vending | grep versionName | cut -d "=" -f 2
-
獲取設備的Android ID:
$ adb shell su root sqlite3 \
/data/data/com.google.android.gsf/databases/gservices.db "SELECT * FROM main" | grep android_id用戶體驗
根據網絡的可用性,在安裝嚮導期間或之後開始PAI應用程序下載。對於以下用戶:
-
未計量的網絡(例如Wi-Fi),安裝嚮導完成後會立即開始應用下載。
-
計量網絡,應用程序下載將推遲到提供Wi-Fi爲止。但是,用戶可以選擇通過移動數據下載應用程序。
有關更多方案,請參閱下載方案。
設定精靈
作爲設置嚮導流程的一部分,Play商店會 在用戶進入主屏幕之前下載與ADCP上配置的過濾規則匹配的設備配置APK 。啓動器讀取工作空間的APK資源並加載它們。
安裝嚮導流程
圖1.安裝嚮導流程
安裝嚮導應包括一個屏幕或一個可選步驟,通知用戶自動安裝了哪些應用程序,並允許用戶選擇安裝了哪些可選應用程序。如果在沒有通知用戶的情況下自動安裝了應用程序,則必須在啓動器主屏幕上放置應用程序圖標。
啓動器應用程序圖標
PAI應用程序圖標可以放在啓動器主屏幕,文件夾或熱座上的任何位置。在未通知用戶的情況下自動安裝的任何應用程序的應用程序圖標必須放置在啓動器主屏幕上。URL(瀏覽器)快捷方式圖標也可以放置在啓動器主頁上。
OEM啓動器必須支持顯示所有PAI應用程序的承諾圖標和承諾小部件。Promise圖標和Promise小部件是UI功能,指示尚未將應用程序加載到設備上,但正在下載和安裝過程中。
圖2. Promise圖標
設置嚮導屏幕
下表總結了針對PAI配置可能出現的所有安裝嚮導屏幕:
屏幕 無線上網 零利率數據 僅計量數據 斷線 加載PAI配置 在設置嚮導中下載PAI設備配置APK。 當Play客戶端與Google服務器同步時(可能在網絡可用後的24小時之內),設備配置APK會下載。加載APK後,設備會顯示“完成設置”的通知。 應用選擇 顯示帶有“將在Wi-Fi上下載應用程序”副標題的“ 查看其他應用程序”屏幕。 在“ 查看其他應用程序”屏幕上顯示副標題爲“如果立即下載應用程序,則不收取數據費”。 顯示帶有“帶有Wi-Fi時將下載應用程序”副標題的“ 查看其他應用程序”屏幕。 顯示帶有“連接到互聯網時將下載應用程序”副標題的“ 查看其他應用程序”屏幕。 應用下載和安裝 立即下載。 等待Wi-Fi(除非用戶單擊“使用數據”)。 等待網絡。 PAI進度通知 顯示進度欄和“正在安裝X個Y應用程序”通知。 顯示“將在有Wi-Fi時下載應用程序”和帶有“使用數據”的按鈕來更改默認行爲。 如果設備配置APK已下載且用戶:
-
尚未看到應用程序選擇屏幕,顯示“完成設置”通知。
-
已經看到應用程序選擇屏幕,顯示“網絡可用時將下載應用程序”消息。
無極圖標/小工具放置 答應放置在主屏幕上的圖標和/或小部件。如果用戶單擊一個Promise圖標,它們將被帶到應用程序詳細信息頁面。 承諾圖標和/或小部件將不會放置在主屏幕上。 詳細頁面信息 常規屏幕上帶有標籤,提示當前未下載特定應用時,“應用已在下載隊列中”。 帶有“正在等待Wi-Fi”標籤的常規屏幕。 帶有“等待網絡”標籤的常規屏幕。 在安裝過程中,用戶可以選擇從其他功能中查看其他應用程序。屏幕。在“ 查看其他應用程序”中,用戶可以查看並選擇或取消選擇PAI可選應用程序。要使應用程序成爲可選應用程序並預先選擇要下載的應用程序,請參閱Config APK XML文件。
圖3. Setup Wizard應用程序選擇屏幕,用戶可以選擇查看其他應用程序 圖4. 安裝嚮導查看其他應用程序屏幕。屏幕打開時,將根據連接狀態調整“應用程序將被下載...”字符串。 警報: 如果您刪除其他內容?屏幕或“ 安裝嚮導”中的“ 查看其他應用程序”屏幕,您必須將所有PAI應用程序放置在啓動器主屏幕上。下載和安裝狀態
在下載應用程序時,用戶可以查看進度通知。
轉存失敗重新上傳取消 轉存失敗重新上傳取消 圖5. 用戶未計量連接時的通知 圖6. 用戶沒有Wi-Fi或零費率連接時的通知 如果用戶在Google Play中打開應用的詳細頁面,他們還可以查看下載和安裝狀態。
圖7. Google Play中應用程序下載和安裝狀態的示例
下載場景
應用會根據以下條件開始下載:
圖8.應用交付邏輯
立即下載(非計量網絡)
對於非計量網絡(例如Wi-Fi)上的用戶,應用程序下載將在安裝嚮導完成後立即開始。用戶不會收到有關下載的通知。
Wi-Fi卸載(計量網絡)
對於使用計費網絡的用戶,應用程序下載將推遲到Wi-Fi可用或用戶連接到未計費的網絡爲止;這樣可以保護用戶的數據計劃。用戶可能同意使用移動數據或計量數據下載應用程序。
注意:要下載PAI應用程序進行Wi-Fi卸載需要Android 7.x或更高版本。Android 7.0需要其他嚮導腳本。Android 7.1+已包含更改。零稅率
爲PAI應用啓用了零稅率且運營商已將用於PAI下載的IP / URL列入白名單時:
-
用戶免費下載與PAI應用相關的所有內容。
-
安裝嚮導完成後,PAI應用程序下載立即開始。
-
用戶將收到免費下載的通知。
有關詳細信息,請參見啓用零利率。
延遲設定
當用戶設置沒有數據連接的新設備時,Play商店將無法下載設備配置APK或任何自動安裝應用。在這些情況下,設置將推遲到設備獲得連接爲止。
當後臺服務檢測到連接時,設備會自動下載設備配置APK,並向用戶顯示不可撤銷的通知,提示他們完成設置。例:
圖9.不可取消的通知以完成設置
從通知中,用戶可以:
-
在應用選擇屏幕上查看應用,或
-
安裝所有應用程序(跳過查看並安裝所有PAI應用程序)。
然後,設備下載選定的應用程序。
注意: 如果在安裝嚮導中未運行PAI,則應用程序圖標不會放置在主屏幕上。延遲插入SIM卡
在完成安裝嚮導後插入SIM卡的用戶將看到略有不同的PAI流程,其中入口點有所不同,但總體流程,通知和UI保持不變。
延遲插入SIM卡要求設備預先加載Google Play商店13.1或更高版本。
驗證
當用戶插入SIM卡並連接到移動網絡時,Google Play會檢查以下內容:
-
設備在不到7天前被激活。
-
之前尚未通過插入的SIM卡觸發PAI設置。
-
已爲此設備配置了PAI應用,但當前尚未安裝。
如果上述所有條件都成立,則Play會觸發通知,通知用戶可以下載PAI應用。
注意:在用於後期SIM卡流程的PAI中,配置爲“ 必需”的應用程序顯示爲“ 可選”,但已預先選擇。由於用戶可能已經使用該設備一段時間,因此用戶可以取消選擇他們不想要的應用程序。多個SIM卡設備
由於PAI僅支持與主SIM卡對應的下載,因此 僅向用戶顯示一(1)條通知。
主SIM卡的Play商店定義是用於數據連接的SIM卡。在其中一個SIM卡用於語音和SMS且另一個SIM卡用於數據的情況下,主SIM卡是用於數據的SIM卡(因此是用於PAI的SIM卡)。
用戶體驗
在完成安裝嚮導後插入SIM卡的用戶將看到一條拒絕輸入PAI的通知。
-
如果用戶點擊 INSTALL ALL,則設備會將所有應用程序排隊等待安裝,並且用戶會根據其數據連接看到圖5或圖6。
-
如果用戶點擊通知正文或REVIEW ,則會顯示一個類似於圖4的應用程序選擇屏幕。從先前的PAI流程中安裝的應用程序將從應用程序選擇屏幕的列表中過濾掉。
用戶選擇要安裝的應用程序後,安裝流程與常規PAI流程相同。
注意: 由於用戶可能已經自定義了自己的啓動器,因此晚期SIM PAI不提供主屏幕圖標的放置。PAI安裝完成後,設備將顯示安裝完成通知。
圖10. PAI設置完成時的通知
-
指標字段
類型 | 領域 | 描述 |
---|---|---|
STRING(尺寸) | build_fingerprint |
設備構建指紋(ro.build.fingerprint )。 |
STRING(尺寸) | event_type |
PAI事件類型。可能的值:
|
時間戳(尺寸) | timestamp |
PAI事件的時間戳。 |
STRING(尺寸) | ro_oem_key |
構建道具鍵(ro.oem.key )用作PAI目標屬性。 |
STRING(尺寸) | carrier |
運營商名稱。 |
STRING(尺寸) | ip_country |
該國家/地區的兩個字符代碼用作PAI目標屬性。 |
STRING(尺寸) | package_name |
正在安裝的應用程序名稱的唯一標識符。僅在event_type = APP時有效。 |
STRING(尺寸) | mcc_mnc |
運營商的MCC_MNC代碼。 |
STRING(尺寸) | pai_group |
分配給虛擬預加載配置中包含的一組硬件ID的唯一字符串。格式: eng.android_partner.pai.prod。<設備>。<產品>。<虛擬預加載ID> |
整數(公制) | success_count |
成功事件數。 |
整數(公制) | failure_count |
失敗事件數。 |
整數(公制) | unique_count |
成功涉及的唯一設備總數。例如,如果一臺設備兩次恢復出廠設置 |
常問問題
哪些版本的Android支持PAI?
Android 5.x及更高版本支持PAI。
在安裝嚮導過程中沒有數據連接時的行爲是什麼?
當用戶設置的設備沒有數據連接時:
-
啓動器將顯示默認工作空間(嵌入在啓動器中)。
-
PAI使用延遲的設置 流程。
用戶跳過Google帳戶登錄時的行爲是什麼?
即使用戶跳過登錄,PAI應用程序仍會下載。
ADCP如何評估產品配置列表?
ADCP使用從上到下的順序評估產品配置。與設備匹配的第一個定位規則確定將哪個配置發佈到設備;找到規則匹配後,將不評估其他任何規則。設置規則的順序以控制對傳入設備請求評估規則的順序。
可以將多少個應用程序加載到PAI中?
自動安裝的應用程序數量上限爲50;推薦數量爲10-15個應用。
PAI是否支持付費應用程序(下載前需要付款)?
沒有。
PAI如何處理已經預先加載在系統映像中的PAI應用程序?
預加載的應用程序包含在PAI應用程序中。如果預加載的版本已過期,則會使用其餘的PAI應用程序進行更新。
PAI如何與現有應用配合使用?
如果預加載的應用程序版本已過期,則PAI將自動更新該應用程序(在等待Wi-Fi之後)。
通過PAI安裝的應用是否可用於用戶登錄的其他設備?
PAI應用是特定於設備的,這意味着PAI僅下載和安裝已爲特定設備配置的應用。您可以在Google Play>我的應用>所有中查看安裝到設備上的PAI應用 。
PAI如何處理SIM卡交換?
SIM卡交換不會觸發PAI(但是,出廠重置會觸發PAI)。
如果用戶在完成安裝嚮導後第一次插入SIM卡怎麼辦?
在預加載了Google Play Store 13.1或更高版本的設備上,向用戶顯示在完成安裝嚮導後插入SIM卡的PAI流程略有不同,其中入口點有所不同,但總體流程,通知和UI保持不變。有關詳細信息,請參閱SIM後插入。
在未預加載Google Play商店13.1或更高版本的設備上,PAI僅運行一次。如果在用戶添加SIM卡之前運行了PAI,則即使使用SIM卡提供的設備載體,它也不會再次執行。使用運營商作爲配置機制的合作伙伴應在設置嚮導中添加一個屏幕,以提示用戶插入有效的SIM卡,以確保交付正確的應用程序。
是否可以在安裝嚮導之外觸發PAI的意圖?
沒有。