Android OTA升级
Posted nullZgy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.来制作差分包
以上是关于Android OTA升级的主要内容,如果未能解决你的问题,请参考以下文章