Android OTA升級(開源推薦)

項目地址:https://github.com/aystshen/Android-RomUpgrade

這是一個負責 Android OTA 升級的后臺應用省古,開機后自動運行后臺 Service粥庄,支持系統(tǒng)升級和應用升級,支持本地升級(tf卡豺妓、u盤)和在線升級(百度)惜互,支持推薦升級和靜默升級。

已知兼容版本:

  • Android 5.1
  • Android 6.0
  • Android 7.1
  • Android 8.1

預覽

本地升級(tf卡琳拭、u盤)

image.png
image.png

在線升級(百度

image.png
image.png

image.png
image.png

API

此固件升級應用也對外提供下面 API训堆,供第三方應用調用 安裝、驗證白嘁、刪除 升級包坑鱼。

// IRomUpgradeService.aidl
package com.ayst.romupgrade;

// Declare any non-default types here with import statements

interface IRomUpgradeService {
    public void checkUpdate();
    boolean installPackage(String packagePath);
    boolean verifyPackage(String packagePath);
    void deletePackage(String packagePath);
}

API使用

  1. 在 APP 源碼 **aidl/com/ayst/romupgrade **目錄下新建 IRomUpgradeService.aidl,如下:
// IRomUpgradeService.aidl
package com.ayst.romupgrade;

// Declare any non-default types here with import statements

interface IRomUpgradeService {
    public void checkUpdate();
    boolean installPackage(String packagePath);
    boolean verifyPackage(String packagePath);
    void deletePackage(String packagePath);
}
  1. 實現(xiàn)下面代碼:
Intent intent = new Intent();
intent.setPackage("com.ayst.romupgrade");
intent.setAction("com.ayst.romupgrade.UPGRADE_SERVICE");
mContext.bindService(intent, mRomUpgradeServiceConnection, Context.BIND_AUTO_CREATE);

private ServiceConnection mRomUpgradeServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        Log.d(TAG, "IRomUpgradeService, onServiceConnected...");
        mRomUpgradeService = IRomUpgradeService.Stub.asInterface(service);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.d(TAG, "IRomUpgradeService, onServiceDisconnected...");
        mRomUpgradeService = null;
    }
};

/**
 * 檢查升級
 * 接口為異步操作絮缅,無法直接返回檢查結果鲁沥,當有新版本可升級時直接彈出升級提示窗
 */
public void checkUpdate() {
    if (null != mRomUpgradeService) {
        try {
            mRomUpgradeService.checkUpdate();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

/**
 * 安裝升級
 *
 * @param packagePath ota升級包
 * @return
 */
public boolean installPackage(String packagePath) {
    if (null != mRomUpgradeService) {
        try {
            return mRomUpgradeService.installPackage(packagePath);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    return false;
}

/**
 * 驗證升級包
 *
 * @param packagePath ota升級包
 * @return
 */
public boolean verifyPackage(String packagePath) {
    if (null != mRomUpgradeService) {
        try {
            return mRomUpgradeService.verifyPackage(packagePath);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    return false;
}

/**
 * 刪除升級包
 *
 * @param packagePath ota升級包
 */
public void deletePackage(String packagePath) {
    if (null != mRomUpgradeService) {
        try {
            mRomUpgradeService.deletePackage(packagePath);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

集成

這里講述如何將此升級應用內置到您定制的系統(tǒng)固件中。

前提條件

  • 系統(tǒng)簽名
  • root 權限(應用升級默認采用靜默安裝耕魄,因此需要 root 權限)

內置

  1. 編譯 release 版本 apk 文件(或者直接下載已發(fā)布的 release 版本)画恰。
  2. 在 Android 源碼 vendor/xxx/common/apps/ 路徑下新建“RomUpgrade”目錄。
  3. 將升級應用 apk 文件復制到“RomUpgrade”目錄吸奴,并重命名為“RomUpgrade.apk”阐枣。
  4. 將升級應用 apk 文件中的 so 庫提取出來,復制到“RomUpgrade/lib/arm/”(如果是64系統(tǒng)請?zhí)崛?4庫到“RomUpgrade/lib/arm64/”)奄抽。
  5. 新建 Android.mk 文件,內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := RomUpgrade
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#LOCAL_PRIVILEGED_MODULE :=
LOCAL_CERTIFICATE := PRESIGNED
#LOCAL_OVERRIDES_PACKAGES := 
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#LOCAL_REQUIRED_MODULES :=
LOCAL_PREBUILT_JNI_LIBS := \
        lib/arm/libotaso.so \
        lib/arm/libnative-lib.so
include $(BUILD_PREBUILT)
  1. 修改 vendor/xxx/common/apps/apps.mk甩鳄,如下:
PRODUCT_PACKAGES += \
    RomUpgrade

配置屬性

將下面屬性配置到系統(tǒng) build.prop 中:

# 百度ota平臺產品線id
ro.baidu.product.id=10000

# 百度ota平臺產品線密鑰
ro.baidu.product.secret=NTUyOGFhOTVjODRlxxxxxx==

# 可升級的內置應用包名(多個包名通過逗號分隔逞度,無應用升級可不配)
ro.baidu.presetapp=com.ayst.sample1,com.ayst.sample2

# 系統(tǒng)固件版本號
ro.fw.version=1.0.0

使用

本地升級(tf卡、u盤)

本地應用升級

  1. 在 tf 卡或 u 盤根目錄新建“exupdate”目錄妙啃。
  2. 將待安裝 apk 文件復制到“exupdate”目錄下档泽。
  3. 插入 tf 卡或u盤插入 Android 設備俊戳。
  4. 等待5秒左右,會彈出升級提示對話框馆匿,請根據提示完成升級抑胎。

本地系統(tǒng)升級

  1. 將待升級系統(tǒng) ota 包復制到 tf 卡或 u 盤目錄下,并重命名為“update.zip”渐北。
  2. 插入 tf 卡或 u 盤插入 Android 設備阿逃。
  3. 等待5秒左右,會彈出升級提示對話框赃蛛,請根據提示完成升級恃锉。

本地應用與系統(tǒng)同時升級

  1. 在 tf 卡或 u 盤根目錄新建“exupdate”目錄。
  2. 將待安裝 apk 文件復制到“exupdate”目錄下呕臂。
  3. 將待升級系統(tǒng) ota 包復制到 tf 卡或 u 盤目錄下破托,并重命名為“update.zip”。
  4. 插入 tf 卡或 u 盤插入Android設備歧蒋。
  5. 等待5秒左右土砂,會彈出升級提示對話框,請根據提示完成升級谜洽。

配置推薦升級或靜默升級

  1. 在tf卡或u盤根目錄新建“exupdate”目錄萝映。
  2. 在“exupdate”目錄下新建“config.ini”文件,文件內容如下:
#升級類型褥琐,1:推薦升級锌俱,2:靜默升級
UPDATE_TYPE=2

配置升級包版本號

此版本號可以配可以不配。如果配置了該版本號則當前系統(tǒng)版本小于此版本時才會升級敌呈,否則不升級贸宏。如果沒有配置該版本號則一律升級。

#OTA升級包版本號磕洪,如:1.0.0
PACKAGE_VERSION=1.0.0

在線系統(tǒng)升級(百度)

注冊百度OTA平臺賬號

注冊 百度安全 OTA 平臺 賬號吭练,申請開通產品線,將『產品線ID』『產品線秘鑰』通過屬性配置到系統(tǒng)析显。

上傳升級包

進入對應 『產品線』配置頁面鲫咽,進入『升級資源庫』,點擊『上傳升級包』谷异。

image.png
image.png

參數說明:

  • 上傳文件 選擇 OTA 升級包文件(應用升級請上傳 apk 文件)分尸。
  • 類型 勾選『系統(tǒng)升級』『整包』。
  • 版本號 版本號格式:1.0.0.0歹嘹,不足4段補0(系統(tǒng)固件的版本號默認從『ro.topband.sw.version』屬性讀嚷嵘堋)。
  • 標簽 忽略尺上。

配置測試任務

添加測試設備分組

進入『設備分組管理->測試設備分組』材蛛,點擊『添加測試設備分組』圆到,勾選『填寫設備ID』。

image.png
image.png

參數說明:

  • 設備ID ** CPU 序號卑吭⊙康可以通過命令『cat /proc/cpuinfo**』查看。
創(chuàng)建測試任務

進入『測試任務列表』豆赏,點擊『創(chuàng)建測試任務』挣菲。
參數說明:

  • 任務名稱 自定義。
  • 升級范圍 勾選『指定測試設備分組』河绽,點擊『選擇設備分組』己单,選擇上一步添加的『測試設備』分組。
  • 升級類型 選擇『系統(tǒng)升級』『整包升級』耙饰。
  • 系統(tǒng)升級資源 點擊『資源庫選擇』纹笼,選擇上一步上傳的升級包。
  • 升級方式 勾選『提示升級』苟跪。如果不希望 Android 彈出升級提示廷痘,而是直接安裝升級包,可以勾選『靜默升級』件已。
  • 升級提示 一般填寫此次升級的修改點笋额,當 Android 彈出升級提示時,會顯示這些內容篷扩。
  • 優(yōu)先級 默認值兄猩。
設備端檢查升級

確保設備端網絡連接正常,重啟設備后會立即檢查升級(稍后會每30分鐘檢查一次)鉴未,當檢查到新版本升級時枢冤,會彈出下面升級提示框:


image.png
image.png

點擊『立即升級』開始下載,下載完成后將自動重啟安裝(安裝過程中切勿斷電)铜秆。

image.png
image.png

配置正式任務

測試任務驗證正常后淹真,按照同樣方法配置正式任務即可。

在線應用升級(百度)

應用升級配置步驟同配置系統(tǒng)升級连茧。唯一需要注意的是支持配置應用安裝完成后動作核蘸,比如:安裝后重啟系統(tǒng),安裝后重新啟動應用啸驯。

配置應用安裝后動作

升級配置界面客扎,滾動到『其他配置』項,打開『自定義字段』罚斗,按下面表格配置『字段名稱』和『』虐唠,點擊『添加』。

image.png
image.png

功能 字段名稱
配置安裝后重啟系統(tǒng) after 1
配置安裝后啟動應用 after 2
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末惰聂,一起剝皮案震驚了整個濱河市疆偿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搓幌,老刑警劉巖杆故,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異溉愁,居然都是意外死亡处铛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門拐揭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撤蟆,“玉大人,你說我怎么就攤上這事堂污〖铱希” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵盟猖,是天一觀的道長讨衣。 經常有香客問我,道長式镐,這世上最難降的妖魔是什么反镇? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮娘汞,結果婚禮上歹茶,老公的妹妹穿的比我還像新娘。我一直安慰自己你弦,他們只是感情好惊豺,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳖目,像睡著了一般扮叨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上领迈,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天彻磁,我揣著相機與錄音,去河邊找鬼狸捅。 笑死衷蜓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的尘喝。 我是一名探鬼主播磁浇,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朽褪!你這毒婦竟也來了置吓?” 一聲冷哼從身側響起无虚,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衍锚,沒想到半個月后友题,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡戴质,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年度宦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片告匠。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡戈抄,死狀恐怖,靈堂內的尸體忽然破棺而出后专,到底是詐尸還是另有隱情划鸽,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布行贪,位于F島的核電站漾稀,受9級特大地震影響,放射性物質發(fā)生泄漏建瘫。R本人自食惡果不足惜崭捍,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啰脚。 院中可真熱鬧殷蛇,春花似錦、人聲如沸橄浓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荸实。三九已至匀们,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間准给,已是汗流浹背泄朴。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留露氮,地道東北人祖灰。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像畔规,于是被迫代替她去往敵國和親局扶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容

  • 原文鏈接 Android應用經常會內置檢測版本更新的功能,在有版本更新的時候三妈,通過下載更新文件進行本地的升級畜埋。本文...
    msq3閱讀 10,633評論 0 19
  • Android基礎及相關機制 Android Context 上下文 你必須知道的一切 Android中子線程真的...
    楷桐閱讀 1,998評論 1 30
  • Tcp/IP通信也是不安全的,在傳輸的時候也可能出現(xiàn)漏洞 查看正在運行的進程 adb shell ps -A |g...
    遠遠飄著云閱讀 4,347評論 0 0
  • 一畴蒲、關于AndroidManifest.xml AndroidManifest.xml 是每個android程序中...
    Marlon_IT閱讀 9,449評論 0 3
  • [TOC] 以下內容基于Android 8.0 Project Treble Project treble是And...
    Joe_HUST閱讀 3,113評論 0 1