天天看點

up rom for android,Android-RomUpgrade

Android 系統 OTA 更新應用

一個負責 Android 系統 ota 更新的背景應用,開機後自動運作背景 Service,支援系統更新、應用更新,支援本地更新(tf卡、u盤)、線上更新(百度),支援推薦更新、靜默更新。

已知相容版本:

Android 5.1

Android 6.0

Android 7.1

Android 8.1

預覽

本地更新(tf卡、u盤)

up rom for android,Android-RomUpgrade

線上更新(百度)

up rom for android,Android-RomUpgrade
up rom for android,Android-RomUpgrade

API

此固件更新應用也對外提供下面 API,供第三方應用調用 安裝、驗證、删除 更新包。

// IRomUpgradeService.aidl

package com.ayst.romupgrade;

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

interface IRomUpgradeService {

boolean installPackage(String packagePath);

boolean verifyPackage(String packagePath);

void deletePackage(String packagePath);

}

API使用

在 APP 源碼 aidl/com/ayst/romupgrade/ 目錄下建立 IRomUpgradeService.aidl,如下:

// IRomUpgradeService.aidl

package com.ayst.romupgrade;

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

interface IRomUpgradeService {

boolean installPackage(String packagePath);

boolean verifyPackage(String packagePath);

void deletePackage(String packagePath);

}

實作下面代碼:

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 boolean installPackage(String packagePath) {

if (null != mRomUpgradeService) {

try {

return mRomUpgradeService.installPackage(packagePath);

} catch (RemoteException e) {

e.printStackTrace();

}

}

return false;

}

public boolean verifyPackage(String packagePath) {

if (null != mRomUpgradeService) {

try {

return mRomUpgradeService.verifyPackage(packagePath);

} catch (RemoteException e) {

e.printStackTrace();

}

}

return false;

}

public void deletePackage(String packagePath) {

if (null != mRomUpgradeService) {

try {

mRomUpgradeService.deletePackage(packagePath);

} catch (RemoteException e) {

e.printStackTrace();

}

}

}

內建

這裡講述如何将此更新應用内置到您定制的系統固件中。

前提條件

系統簽名

root權限(應用更新預設采用靜默安裝,是以需要root權限)

内置

編譯release版本apk檔案(或者直接下載下傳已釋出的release版本)。

在Android源碼vendor/xxx/common/apps/路徑下建立“RomUpgrade”目錄。

将更新應用apk檔案複制到“RomUpgrade”目錄,并重命名為“RomUpgrade.apk。

将更新應用apk檔案中的so庫提取出來,複制到“RomUpgrade/lib/arm/”(如果是64系統請提取64庫到“RomUpgrade/lib/arm64/”)。

建立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)

修改vendor/xxx/common/apps/apps.mk,如下:

PRODUCT_PACKAGES += \

RomUpgrade

配置屬性

将下面屬性配置到系統build.prop中:

# 百度ota平台産品線id

ro.baidu.product.id=10254

# 百度ota平台産品線密鑰

ro.baidu.product.secret=NTUyOGFhOTVjODRlZjFmOA==

# 可更新的内置應用包名(多個包名通過逗号分隔,無應用更新可不配)

ro.baidu.presetapp=com.ayst.sample1,com.ayst.sample2

# 系統固件版本号

ro.fw.version=1.0.0

使用

本地更新(tf卡、u盤)

本地應用更新

在tf卡或u盤根目錄建立“exupdate”目錄。

将待安裝apk檔案複制到“exupdate”目錄下。

插入tf卡或u盤插入Android裝置。

等待5秒左右,會彈出更新提示對話框,請根據提示完成更新。

本地系統更新

将待更新系統ota包複制到tf卡或u盤根目錄下,并重命名為“update.zip”。

插入tf卡或u盤插入Android裝置。

等待5秒左右,會彈出更新提示對話框,請根據提示完成更新。

本地應用與系統同時更新

在tf卡或u盤根目錄建立“exupdate”目錄。

将待安裝apk檔案複制到“exupdate”目錄下。

将待更新系統ota包複制到tf卡或u盤目錄下,并重命名為“update.zip”。

插入tf卡或u盤插入Android裝置。

等待5秒左右,會彈出更新提示對話框,請根據提示完成更新。

配置推薦更新或靜默更新

在tf卡或u盤根目錄建立“exupdate”目錄。

在“exupdate”目錄下建立“config.ini”檔案,檔案内容如下:

#更新類型,1:推薦更新,2:靜默更新

UPDATE_TYPE=2

配置更新包版本号

此版本号可以配可以不配。如果配置了該版本号則目前系統版本小于此版本時才會更新,否則不更新。如果沒有配置該版本号則一律更新。

#OTA更新包版本号,如:1.0.0

PACKAGE_VERSION=1.0.0

注意 如果配置了靜默更新,請一定要配置此版本号,否則更新完成後又會重複更新。

線上更新(百度)

注冊百度OTA平台賬号

注冊 百度安全 OTA 平台 賬号,申請開通産品線,将**『産品線ID』和『産品線秘鑰』**通過屬性配置到系統。

上傳更新包

進入對應 『産品線』配置頁面,進入『更新資源庫』,點選『上傳更新包』。

up rom for android,Android-RomUpgrade

參數說明:

上傳檔案     選擇 OTA 更新封包件(應用更新請上傳 apk 檔案)。

類型 勾選『系統更新』『整包』。

版本号       版本号格式:1.0.0.0,不足4段補0(系統固件的版本号預設從『ro.topband.sw.version』屬性讀取)。

标簽         忽略。

配置測試任務

添加測試裝置分組

進入『裝置分組管理->測試裝置分組』,點選『添加測試裝置分組』,勾選『填寫裝置ID』。

up rom for android,Android-RomUpgrade

參數說明:

裝置ID        CPU 序号。可以通過指令『cat /proc/cpuinfo』檢視。

建立測試任務

進入『測試任務清單』,點選『建立測試任務』。

參數說明:

任務名稱          自定義。

更新範圍          勾選『指定測試裝置分組』,點選『選擇裝置分組』,選擇上一步添加的『測試裝置』分組。

更新類型          選擇『系統更新』『整包更新』。

系統更新資源    點選『資源庫選擇』,選擇上一步上傳的更新包。

更新方式          勾選『提示更新』。如果不希望 Android 彈出更新提示,而是直接安裝更新包,可以勾選『靜默更新』。

更新提示          一般填寫此次更新的修改點,當 Android 彈出更新提示時,會顯示這些内容。

優先級            預設值。

裝置端檢查更新

確定裝置端網絡連接配接正常,重新開機裝置後會立即檢查更新(稍後會每30分鐘檢查一次),當檢查到新版本更新時,會彈出下面更新提示框:

up rom for android,Android-RomUpgrade

點選『立即更新』開始下載下傳,下載下傳完成後将自動重新開機安裝(安裝過程中切勿斷電)。

up rom for android,Android-RomUpgrade

配置正式任務

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

開發者

License

Copyright 2019 Bob Shen

Licensed under the Apache License, Version 2.0 (the "License"); you may

not use this file except in compliance with the License. You may obtain

a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

License for the specific language governing permissions and limitations

under the License.