Android OTA升级

1,Build otapackage后system.img没有打包进去?

Ota包里面缺失system img,原因是客户修改了prop里面的“ro.product.device” value值.
尝试以下两种方式,ota_from_target_files中不需要设定 cust_dir1 这个值了:

a.  修改ota_from_target_files 中的system_path:system_path =    os.path.join("out/target/product/g32wh_xfy","system.img")

b.  將 system.img copy 一份到不需要 device 相关的路径,比如out/target下,那么在此处设置system_path值如下:system_path = os.path.join("out/target", "system.img")

2,Build OTA升级包的时候出现异常,无法编译 ?

是low memory 导致build otapackage 失败的:
需确定build otapackage时保证足够的memory,比较多的情况下在制作升级包时,都是采
用虚拟机的方式,而不是特定义的一台server,所以就会有low memory 的情况。如果可 以,
增加此虚拟机的memory 也行参考以下两种方案:
a) 将 partition_table_MT6589.xls中的android那个区域的大小改小一些, 删除一些内置
   在system区域的apk;(cause:对于build otapackage 失败,是在打包ota时,对    ota进行签章时报了low memory的error。对于签章sign所需的memory的大小,取决于apk的大小,所以对partition_table_MT6589.xls 中的android 分区设定,如果android 分区设定大,则在对ota中的apk进行签章时要求的memory也要大。)
b) 修改SignFile.java 中的cmd = [“java”, “-Xmx2048m”, “-jar”, 这条 ,将
“-Xmx2048m”,修改 为“-Xmx4096m” 或者更大,也可。(cause:对于这个SignFile 中
 的这个cmd,是指当前签章run 的虚拟机上,指定虚拟机可用的最大heap size为2048,这个值
 需要参考当前的build的pc server的可用内存的大小。

3,DM/FOTA/MOTA相关的feature宏开关 ?

   在alps/mediate/config/[project]/projectConfig.mk里的对应DM/FOTA/MOTA的宏开关都由客户自行控制,但如果要实现相应的功能,则需要将相应的宏开关设置为Yes。宏开关所控制的应用如下:
    MTK_SMSREG_APP -- 短信自注册编译开关
    MTK_DM_APP--DM功能(包括采配,SCOMO, LAWMO,FUMO)编译开关
MTK_FOTA_SUPPORT-- FOTA编译开关
MTK_FOTA_ENTRY-- FOTA升级手机端入口开关
MTK_SCOMO_ENTRY -- SCOMO下载及升级状态查看入口开关
MTK_GOOGLEOTA_SUPPORT -- MOTA升级功能 (JB2 之前版本)
MTK_SYSTEM_UPDATE_SUPPORT --MOTA升级功能(JB2及JB2之后的版本)。

4,DM短信自注册,在重新download版本后也要重新短信自注册?

 支持情况:目前MT6573/75/77/89都支持DM短信自注册
相关资料:有关短信子注册,DM的参考资料请在DMS搜索以下文档:CMCC_Common_DM送测版本克制化准备.ppt
客户端的代码请参考:alps/mediatek/source/packages/SmsReg
Solution: 修改alps/mediatek/source/packages/dm_agent_binder/下的dm_agent.c文件,
将其中的define DM_IMSI_PATH DM_ROOT_PATH "imsi"修改为define DM_IMSI_PATH "/data/imsi"
这样修改的话,在恢复出厂设置时也会重新发送自注册消息。

5,Fota 升级error总结。

a. 0x8001007C: system_attr 文档与当前device版本的system.img不一致
b. 0x80010016: system 分区太小
c. 0x80010022: boot.xml或system.xml配置有误,请check boot.xml/system.xml中<PartitionName>boot</PartitionName>或    <PartitionName>system</PartitionName>
d, 0x80000001: redbend 的 library 在解析升级包时需要更多的memory(默认20MB,一般够),可分析制作boot.delta时的log,并check boot.xml,设置:SourceInputOffsetInFlash>0</SourceInputOffsetInFlash  TargetInputOffsetInFlash>0</TargetInputOffsetInFlash

e. 0x8000013C:ram太小,ram use cannot be less than 0x10004,请采用v7.0工具制作升级包

6, How to make OTA.zip for SDcard Upgrade ?

1. Enable SystemUpdate: EngineerMode--->Others--->System update options--->Sd card Update
2
2. Build : makeMtk [project] new
makeMtk [project] otapackages Full package:[project]-ota-eng.[username].zip ,rename as updat.zip; or delta package, please use command : build/tools/releasetools/ota_from_target_files -n -i old.zip

new.zip update.zip

3. META-INF(/com/google/andriod/updater-script) (from full package)

scatter.txt:partition layout information(from full package)

type.txt: type of update package(from full package)

config.xml:(configure follow info by yourself ,please preference build.prop)

4.将以上文件 files (update.zip, META-INF, scatter.txt, type.txt, configure.xml)打包为 **.zip

5. copy **.zip to SD card , entry setting—>system update

8, MOTA Server 搭建环境问题.

 在搭建MOTA Server时,会有无权访问文档或者无法打开某些文档的类似error
 原因:搭建MOTA server的整体环境有问题
解决:製作差分包的server環境是否有以下3個問題
1. out/host/linux-x86/bin/ 目錄下的檔案必須為可執行權限 chmod 755 *
2. server 是否缺少 32 bit 相關 library, apt-get install libc6-i386 lib32gcc1 lib32z1
lib32stdc++6 ia32-libs
3. server 是否缺少 java 程式, apt-get install openjdk-6-jre

9,MOTA Server上传整包软件失败,界面显示upload error?

1.在/var/www/路径下需要创建文件夹命名为OTA
 2.在fota/db.php文件里面,查看$upload_version_dir的值是否等于‘/var/www/OTA/‘;如  果不是的话,需要对1中提到的OTA路径按要求进行修改。

10.MOTA升级时更改版本问题

默认情况下,可以通过修改ProjectConfig.mk中的MTK_BUILD_VERNO即可达到修改版本的目的。如果客户想保留MTK_BUILD_VERNO字段不变,采用CUSTOM_BUILD_VERNO来区分版本,需做以下修改:
– 配置:ProjectConfig.mk中配置宏:CUSTOM_BUILD_VERNO=custom.v1
– APP code:GoogleOta 中的Util.java中的getDeviceVersionInfo()里的
String buildnumber = SystemProperties.get("ro.build.display.id")修改为String buildnumber = SystemProperties.get("ro.costom.build.version")
– 差分包:制作差分包的准备包时,配置config.xml时:buildnumber 参考build.prop里的ro.costom.build.version进行配置 。

11,OTA 升级查询版本失败,log显示yourversion is illegal ?

这是因为手机的信息,也就是old版本的信息与Server上提交old版本时候填写的信息不一致。 old版本,new版本在upload到server的时候,server上要求填写的项是来自于package包的build.prop文件。对应关系如下:
build.prop upload.php
– ro.build.display.id-----------------build number of the version
– ro.product.locale.language---------------LANGUAGE
– ro.product.manufacturer------------------OEM
– ro.operator.oper--------------------OPERATOR
– ro.product.device-----------PRODUCT
– ro.build.fingerprint------------FINGERPRINT
– ro.build.version.release--------------------android version
– ro.product.name------------------------name of the version

12,FAQ10254]OTA 升级重启后,提示:”fail toupgrade to version *“.

原因:客户有自定义一个 custom version,这样,在升级后通知升级结果时,原code获取的版本信息是build.verno,并不是custom version,所以不一样,提示升级失败。
请参考以下方式修改code:请修改 SystemUpdateReceiver.java 的 getUpdateResult():
修改后:
private boolean getUpdateResult() {
Xlog.i(TAG, "getUpdateResult");
if (FeatureOption.MTK_EMMC_SUPPORT) {
  try {
    IBinder binder = ServiceManager.getService("GoogleOtaBinder");
    SystemUpdateBinder agent = SystemUpdateBinder.Stub
 .asInterface(binder);
    if (agent == null) {
    Xlog.e(TAG, "Agent is null.");
    return false;
    }
    return agent.readUpgradeResult();
    } catch (RemoteException e) {
    e.printStackTrace();
    return false;
    }
    } else {
    //add by lyx begin
    String strCurrentVersion =
    SystemProperties.get("ro.custom.build.version");
    if(strCurrentVersion ==null){
    String strCurrentVersion = SystemProperties.get("ro.build.display.id");
    }
    //add by lyx end
    if (strCurrentVersion != null) {
    strCurrentVersion = strCurrentVersion.trim();
    Xlog.i(TAG, "strCurrentVersion = " + strCurrentVersion);
    }
    DownloadInfo downloadInfo = DownloadInfo.getInstance(mContext);
    String strTargetVersion = downloadInfo.getTargetVer();
    if (strTargetVersion != null) {
    strTargetVersion = strTargetVersion.trim();
    Xlog.i(TAG, "strTargetVersion = " + strTargetVersion);
    }
    return (strTargetVersion.equalsIgnoreCase(strCurrentVersion));
    }
    }

13,OTA升级,无法找到更新包?

 在对比版本的时候,会对比fingerprint值,log来看这里
12-20 09:49:20.895: INFO/SystemUpdate/HttpManager(2002): fingerPrintPkg = XXXXX/vh075_td_emmc_xxxxx_s4509/vh075_td_emmc_xxxxx_s4509:4.2.2/JDQ39/1387464158:user/test-keys
12-20 09:49:20.895: INFO/SystemUpdate/HttpManager(2002): fingerPrintLocal = fingerPrintLocal是获取来的本地手机的fingerprint值,这边获取为null,是因为 客户定义的版本号太长了,导致在组装成fingerprint值的时候,超出了google限制
的property的长度92 byte,这种情况下,请改小客户定义版本内容,即
XXXXX/vh075_td_emmc_xxxxx_s4509/vh075_td_emmc_xxxxx_s4509:4.2.2/JDQ39/1387464158:user/test-keys

14,OTA升级不能进入到recovery mode

原因:在初始化时没有将应用GoogleOtaBinder设置为user root。
解决:在init.rc中添加以下两行:
1, service GoogleOtaAgent /system/bin/GoogleOtaBinder
2, user root

15,要求FOTA升级功能适用所有运营商

解决:
A. 将/alps/mediatek/source/operator/OP02/SPEC0200/operator_packages下的fota_zte文件拷贝到/alps/mediatek/source/external下
b, 将Android.mk文件的第一行”ifneq”和最后一行的”endif”用“#”注释掉

16,用ota_from_target_files制作差分包失败问题

原因:客户误用整包来制作差分包了,需要改换成ota.zip来制作差分包。
解决:您在用ota_from_target_files制作差分包时,请用
/out/target/product/[product]/obj/PACKAGING/target_files_intermediates/

下面的[project]-target_files-eng.[username].zip,改名为ota.zip。这个是用来制作差分包用

的原始包。

17,有关OTA升级与FOTA升级的区别,及相应的资料 ?

支持情况:目前MT6573/75/77都支持OTA升级

相关资料:有关OTA升级的参考资料请参考DMS的以下路径:

/3G Phone Data/Smart Phone/Software_Customer/Standard Package/MT6577 SW Doc

Package/Application/OTA Update

客户端的代码请参考:alps/mediatek/source/packages/GoogleOta*三支文件

DM/fota和mota的区别:是两种软件版本升级的方式,只需采用其中之一即可。

fota: 是需要拿到三方RedBend的license,升级包的发布与管理是由运行商控制的,在实现过程中

需要从运行商那申请开通DM(增强售后服务)功能,在升级过程中需要收费;

mota: 是敝司自行实现的一套升级方式,其中server端和客户端都已经实现,且免费提供给客户

,是不需要三方介入。

18,FAQ11682]手机在进行OTA升级的时候,将仅使用WLAN升级不选择的时候,点击升级后仅使用WLAN升级又会勾选

这个是MTK的design,因为差分包一般都比较大,我们不建议终端用户使用GPRS流量来下载。所

以每一次都会初始化wifi-only这个check box,以保证终端用户不会因为没有勾选而造成流量损

失。

我们的代码流程你可以参考一下

点击是—–检查GPRS网络——GPRS网络不可用(客户自己断开了GPRS网络)———-下

载切到PauseDownload状态———–初始化wifi-only为勾选

点击否——初始化wifi-only为勾选

如果客户觉得这种行为不合适,那可以注释掉initWifiOnlyCheckbox(),这个方法的调用。但

是MTK不建议修改

19,差分包升级时签章问题

原因:A版使用的key和B版使用的key不一致,导致签章error。
解决:先确定在ProjectConfig.mk文件中的宏:MTK_SIGNATURE_CUSTOMIZATION设置,
如果设置为yes, 客户需要自己去gen releasekey,生成key的文档参考DMS如下路径的资料:/Product Line/WCX/3G Phone Data/Smart Phone/Software_Customer/Standard Package/MT6575 SW Doc Package/Build/V2.3 /Application Signing Process Enhancement.ppt ,产生releasekey之后(releasekey在:alps/build/target/product/security/project下),Build第一个版本,build A new, build A otapackage, 将A版download到手机上,再build第二版,build B new, build Botapackage。最后用命令./build/tools/releasetools/ota_from_target_files –k alps/build/target/product/security/project/release –n –i oldotapackage.zip newotapackage.zip update.zip.如果宏MTK_SIGNATURE_CUSTOMIZATION设置为no,则不需要产生key,使用默认的
alps/build/target/product/security下的testkey。这时在build 完A、B两个版本后直接用命令:./build/tools/releasetools/ota_from_target_files –n –i oldotapackage.zip newotapackage.zip update.zip.来制作差分包
时间: 2024-11-09 00:56:54

Android OTA升级的相关文章

Android Recovery OTA升级(一)—— make otapackage

目录 目录 概述 make otapackage BUILT_TARGET_FILES_PACKAGE ota_from_target_files WriteFullOTAPackage SignOutput 总结 概述 make otapackage是Android Build系统支持的命令,用来生成Recovery系统能够进行升级的zip包.因此,想要了解Android的OTA升级机制,我们首先需要学习make otapackage命令的执行过程. 为了防止泄密,以下源码内容都是基于Andr

android 更新APN列表OTA升级后开机即生效

更新APN列表OTA升级后需要恢复出厂设置APN更新才有效, 客户需要做升级后开机即生效. 因为,OTA升级更新的是三个区域,boot , recovery, system, APN属于DATA域,OTA升级不会涉及到, 所以,必须reset之后才会更新有效. 所以, 需要修改alps\build\tools\releasetools\ota_from_target_files这个脚本, 在 script.DeleteFiles([i[1] for i in to_create]) script

OTA Updates官方文档(一,OTA 升级)

写在前面: Android设备可以接受和安装基于系统和应用的更新.在设备中有一个特殊recovery分区,在这个分区中有一套特殊的恢复系统可以将下载的更新包进行解压并应用到系统中去. 本节主要描述了更新包的组织架构,并且概述了如何使用更新包打包工具制作系统升级的更新包.OTA 的存在是用来对潜在系统的升级,或者在系统分区安装只读(不可卸载)的应用程序,因此在升级过程中不会影响到用于已经安装到系统中的 应用程序. 本节的内容主要基于Android5.x版本. 一.Android设备布局的设计 通常

Android增量升级简单实现(附源码)

随着现在手机硬件不断的提升,分辨率提高手机的安装包也是越来越大了.当年NOKIA,MOTO时代,一个手机APP如果有1MB那都是算大的,2MB已经不得了了.虽然网络.存储都已经大大提升,但是流量还不至于廉价到APP改了一个标题要去下载一个几兆的程序安装包.今天就介绍安卓增量下载的实现.有耐心的先看原理,后面实践! 增量升级的原理 今天我们就来实现类似的应用的增量升级.其实增量升级的原理很简单,即首先将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,例如旧版本的APK有5M,新版的有

关于OTA升级从高版本到低版本升级后,数据库无法降级引起的异常分析

1.问题描述: OTA升级从高版本升级到低版本成功,开机后桌面闹钟图标不见了,且桌面闹钟报错,无法打开应用. 参考log如下: 01-14 20:29:22.290: E/AndroidRuntime(2722): FATAL EXCEPTION: AsyncHandler 01-14 20:29:22.290: E/AndroidRuntime(2722): Process: com.android.deskclock, PID: 2722 01-14 20:29:22.290: E/Andr

OTA升级详解(一)

不积跬步,无以至千里: 不积小流,无以成江海. 出自荀子<劝学篇> 1.概念解释 OTA是何物? 英文解释为 Over The Air,既空中下载的意思,具体指远程无线方式,OTA 技术可以理解为一种远程无线升级技术: FOTA:Firmware OverThe Air/固件空中升级,通过云端为具有连网功能的设备:例如手机.平板电脑.移动互联网设备等提供固件升级服务,手机中的固件升级即可称为 FOTA: 在3G.4G网络普遍的今天,很多时候还是要考虑流量限制,如果步入5G时代,虽然流量已不在是

解决android模块化升级的办法

关于原生android版本更新升级必须整个apk更新安装,不能实现部分模块化升级的解决思路: 原生+web混合型APP~ 具体应客户要求,程序必须实现模块化升级,不管用何种办法,我是这么做的,每个功能首页写成html放本地(asset),html里面action操作全部请求服务器端的,之间的传值使用签名+验签方式确保信息安全 [首页放本地而不放服务端是解决即使没网情况下,也可以很友好的给用户展示一个页面] 这个只是我想到的一种解决方案,还有好的方案,请一起分享 public class Main

Android在线升级相关笔记一(解析服务器版本与当前版本比较)

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较, 如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级. 一.首先用tomcat搭建服务器,用于开发测试. 下载tomcat请参考:http://blog.csdn.net/only_tan/article/details/25110625 1.在tomcat中新建自己的项目: \apache-tomcat-6.0.39\webapps 目录下新建自己的项目文件夹,

Android Studio升级后报 method not found: &#39;runProguard&#39;的错误

今天升级了下Android Studio,然后发现更新gradle,然后在sync项目的时候总是报  method not found: 'runProguard'的错误 找了很多发现不对. 最后解决办法是这样的,修改app下 build.gradle文件. If you are using version 0.14.0 or higher of the gradle plugin, you should replace "runProguard" with"minifyEn