<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>i.MX ProcessorsのトピックRe:  imx8qxp support OTA?</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868771#M132169</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The i.MX8QXP it is in Beta Phase,&amp;nbsp; since the device it is still under pre-production, so the BSP it is not completed, and when you are compiling OTA, all the components are separated build.&amp;nbsp; Uboot + Kernel + Android.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have a nice day!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 29 Jan 2019 17:26:52 GMT</pubDate>
    <dc:creator>jamesbone</dc:creator>
    <dc:date>2019-01-29T17:26:52Z</dc:date>
    <item>
      <title>imx8qxp support OTA?</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868770#M132168</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI Guys,&lt;/P&gt;&lt;P&gt;&amp;nbsp;imx8 support OTA? Why does "make otapackage" compile without output u-boot-imx8qxp.imx?&lt;/P&gt;&lt;P&gt;and&amp;nbsp;&amp;nbsp;Mfgtool needs u-boot-imx8qxp.imx to upgrade img for the first time.How to do it?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If the first “make -j4" can generate u-boot-imx8qxp.imx, but if I first time&amp;nbsp; completely recompile directly with the following command:&lt;/P&gt;&lt;P&gt;cd&amp;nbsp; ${MY_ANDROID}&lt;/P&gt;&lt;P&gt;build/envsetup. Sh&lt;/P&gt;&lt;P&gt;lunch mek_8q - userdebug&lt;/P&gt;&lt;P&gt;make otapackage - j4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Not generated u-boot-imx8qxp.imx.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Jan 2019 02:57:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868770#M132168</guid>
      <dc:creator>ucwenux5</dc:creator>
      <dc:date>2019-01-29T02:57:28Z</dc:date>
    </item>
    <item>
      <title>Re:  imx8qxp support OTA?</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868771#M132169</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The i.MX8QXP it is in Beta Phase,&amp;nbsp; since the device it is still under pre-production, so the BSP it is not completed, and when you are compiling OTA, all the components are separated build.&amp;nbsp; Uboot + Kernel + Android.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have a nice day!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Jan 2019 17:26:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868771#M132169</guid>
      <dc:creator>jamesbone</dc:creator>
      <dc:date>2019-01-29T17:26:52Z</dc:date>
    </item>
    <item>
      <title>Re:  imx8qxp support OTA?</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868772#M132170</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;Do you have OTA update working for Android pie on iMX8M?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Nov 2019 05:42:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868772#M132170</guid>
      <dc:creator>darshan_talati</dc:creator>
      <dc:date>2019-11-05T05:42:18Z</dc:date>
    </item>
    <item>
      <title>Re:  imx8qxp support OTA?</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868773#M132171</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;全包升级：&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;make otapackage –jx&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;编译&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;OTA&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;全包；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：解压&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;OTA&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;包，获取&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;payload.bin&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;和&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;payload_properties.txt&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件，将两个文件拷贝到&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;U&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;盘的OTA&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;local&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件夹中（&lt;SPAN style="font-size: large;"&gt;OTA&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;local&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件存在并且还是一个文件夹才可以进行&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;OTA&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;本地升级）；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：将&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;out/target/product/mek_8q/system/build.prop&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件拷贝到&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;U&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;盘的&lt;SPAN style="font-size: large;"&gt;OTA&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;local&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件夹中；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;4&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：查看当前系统的版本号并且修改&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;build.prop&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;中的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;ro.build.display.id&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;（当前系统的版本号与拷贝到&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;U&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;盘中的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;build.prop&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件中的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;ro.build.display.id&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;值不相等时，则表示全包升级）；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;5:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;最后手动点击&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;Upgrade&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;进行全包升级，升级成功之后点击&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;reboot&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;重启；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;差分升级：&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;make target-files-package -jx&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;编译&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;OTA&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;差分包（注意是要在全包升级的基础上编译差分包升级）；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：当有新的改动时再进行&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;make target-files-package -jx&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;编译新的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;OTA&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;差分包；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：将两个差分包文件通过&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;. build/tools/releasetools/ota_from_target_files –i&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;进行合并成一个&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;ota_update.zip&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;4&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：解压合并之后的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;ota_update.zip&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件，获取&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;payload.bin&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;和&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;payload_properties.txt&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件，将两个文件拷贝到&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;U&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;盘的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;JTDlocal&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件夹中（&lt;SPAN style="font-size: large;"&gt;OTA&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;local&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件存在并且还是一个文件夹才可以进行&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;OTA&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;本地升级）；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：将&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;out/target/product/mek_8q/system/build.prop&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件拷贝到&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;U&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;盘的&lt;SPAN style="font-size: large;"&gt;OTA&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;local&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件夹中；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;4&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;：查看当前系统的版本号并且修改&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;build.prop&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;中的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;ro.build.display.id&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;（当前系统的版本号与拷贝到&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;U&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;盘中的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;build.prop&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;文件中的&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;ro.build.display.id&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;值不相等时，则表示差分升级）；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0cm;"&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;5:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;最后手动点击&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;DiffUpgrade&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;进行差分升级，升级成功之后点击&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Calibri, serif;"&gt;&lt;SPAN style="font-size: large; "&gt;&lt;STRONG&gt;reboot&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: large;"&gt;&lt;STRONG&gt;重启；&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2019 01:18:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868773#M132171</guid>
      <dc:creator>ucwenux5</dc:creator>
      <dc:date>2019-11-08T01:18:06Z</dc:date>
    </item>
    <item>
      <title>Re:  imx8qxp support OTA?</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868774#M132172</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;From 2113rx5953d021ccf2419kt70000acfdfce70111 Mon Sep 23 00:00:00 2019&lt;BR /&gt;From: xxx &amp;lt;xxx@xxx.com&amp;gt;&lt;BR /&gt;Date: Mon, 22 Apr 2019 15:35:39 +0800&lt;BR /&gt;Subject: [PATCH] =OTAlocal!!&lt;BR /&gt;MIME-Version: 1.0&lt;BR /&gt;Content-Type: text/plain; charset=UTF-8&lt;BR /&gt;Content-Transfer-Encoding: 8bit&lt;/P&gt;&lt;P&gt;Change-Id: I222abd55ce4ced8ab23efd7155238131b1f2e445&lt;BR /&gt;---&lt;BR /&gt; FSLOta/AndroidManifest.xml | 19 +-&lt;BR /&gt; FSLOta/res/layout/main.xml | 2 +-&lt;BR /&gt; FSLOta/res/values/strings.xml | 0&lt;BR /&gt; .../src/com/fsl/android/ota/BuildPropParser.java | 16 +-&lt;BR /&gt; .../src/com/fsl/android/ota/OTAServerConfig.java | 48 +++-&lt;BR /&gt; .../src/com/fsl/android/ota/OTAServerManager.java | 254 ++++++++++++++++++---&lt;BR /&gt; FSLOta/src/com/fsl/android/ota/OtaAppActivity.java | 39 +++-&lt;BR /&gt; 7 files changed, 329 insertions(+), 49 deletions(-)&lt;BR /&gt; mode change 100644 =&amp;gt; 100755 FSLOta/AndroidManifest.xml&lt;BR /&gt; mode change 100644 =&amp;gt; 100755 FSLOta/res/layout/main.xml&lt;BR /&gt; mode change 100644 =&amp;gt; 100755 FSLOta/res/values/strings.xml&lt;BR /&gt; mode change 100644 =&amp;gt; 100755 FSLOta/src/com/fsl/android/ota/BuildPropParser.java&lt;BR /&gt; mode change 100644 =&amp;gt; 100755 FSLOta/src/com/fsl/android/ota/OTAServerConfig.java&lt;BR /&gt; mode change 100644 =&amp;gt; 100755 FSLOta/src/com/fsl/android/ota/OTAServerManager.java&lt;BR /&gt; mode change 100644 =&amp;gt; 100755 FSLOta/src/com/fsl/android/ota/OtaAppActivity.java&lt;/P&gt;&lt;P&gt;diff --git a/FSLOta/AndroidManifest.xml b/FSLOta/AndroidManifest.xml&lt;BR /&gt;old mode 100644&lt;BR /&gt;new mode 100755&lt;BR /&gt;index 61ca776..7700e83&lt;BR /&gt;--- a/FSLOta/AndroidManifest.xml&lt;BR /&gt;+++ b/FSLOta/AndroidManifest.xml&lt;BR /&gt;@@ -3,7 +3,7 @@&lt;BR /&gt; coreApp="true"&lt;BR /&gt; package="com.fsl.android.ota"&lt;BR /&gt; android:versionCode="1"&lt;BR /&gt;- android:versionName="1.0" &amp;gt;&lt;BR /&gt;+ android:versionName="1.0"&amp;gt;&lt;BR /&gt; &lt;BR /&gt; &amp;lt;uses-sdk android:minSdkVersion="15" /&amp;gt;&lt;BR /&gt; &amp;lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&amp;gt;&lt;BR /&gt;@@ -13,7 +13,24 @@&lt;BR /&gt; &amp;lt;uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /&amp;gt;&lt;BR /&gt; &amp;lt;uses-permission android:name="android.permission.WAKE_LOCK" /&amp;gt;&lt;BR /&gt; &amp;lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.VIBRATE" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.WRITE_SETTINGS" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.WAKE_LOCK" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.BROADCAST_STICKY" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.GET_TASKS" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.READ_MEDIA_STORAGE"/&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" /&amp;gt;&lt;BR /&gt;+ &amp;lt;uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/&amp;gt;&lt;BR /&gt; &lt;BR /&gt;+ &lt;BR /&gt; &amp;lt;application&lt;BR /&gt; android:icon="@drawable/ic_launcher"&lt;BR /&gt; android:usesCleartextTraffic="true"&lt;BR /&gt;diff --git a/FSLOta/res/layout/main.xml b/FSLOta/res/layout/main.xml&lt;BR /&gt;old mode 100644&lt;BR /&gt;new mode 100755&lt;BR /&gt;index 0b61ba4..8e4581e&lt;BR /&gt;--- a/FSLOta/res/layout/main.xml&lt;BR /&gt;+++ b/FSLOta/res/layout/main.xml&lt;BR /&gt;@@ -67,7 +67,7 @@&lt;BR /&gt; android:id="@+id/diff_upgrade_button"&lt;BR /&gt; android:layout_width="wrap_content"&lt;BR /&gt; android:layout_height="wrap_content"&lt;BR /&gt;- android:layout_column="3"&lt;BR /&gt;+ android:layout_column="6"&lt;BR /&gt; android:layout_columnSpan="3"&lt;BR /&gt; android:layout_row="5"&lt;BR /&gt; android:layout_rowSpan="2"&lt;BR /&gt;diff --git a/FSLOta/res/values/strings.xml b/FSLOta/res/values/strings.xml&lt;BR /&gt;old mode 100644&lt;BR /&gt;new mode 100755&lt;BR /&gt;diff --git a/FSLOta/src/com/fsl/android/ota/BuildPropParser.java b/FSLOta/src/com/fsl/android/ota/BuildPropParser.java&lt;BR /&gt;old mode 100644&lt;BR /&gt;new mode 100755&lt;BR /&gt;index 4f85d44..6c054d4&lt;BR /&gt;--- a/FSLOta/src/com/fsl/android/ota/BuildPropParser.java&lt;BR /&gt;+++ b/FSLOta/src/com/fsl/android/ota/BuildPropParser.java&lt;BR /&gt;@@ -39,10 +39,12 @@ public class BuildPropParser {&lt;BR /&gt; mContext = context;&lt;BR /&gt; propHM = new HashMap&amp;lt;String, String&amp;gt;();&lt;BR /&gt; setFile(file);&lt;BR /&gt;+ Log.d(TAG, "BuildPropParser() ---&amp;gt; file:" + file);&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public HashMap&amp;lt;String, String&amp;gt; getPropMap() { return propHM;};&lt;BR /&gt; public String getProp(String propname) { &lt;BR /&gt;+ Log.d(TAG, "getProp() ---&amp;gt; propname:" + propname);&lt;BR /&gt; if (propHM != null)&lt;BR /&gt; return (String) propHM.get(propname); &lt;BR /&gt; else &lt;BR /&gt;@@ -51,17 +53,22 @@ public class BuildPropParser {&lt;BR /&gt; &lt;BR /&gt; private void setByteArrayStream(ByteArrayOutputStream out) {&lt;BR /&gt; try {&lt;BR /&gt;+ Log.d(TAG, "setByteArrayStream() ---&amp;gt; out:" + out);&lt;BR /&gt; File tmpDir = null;&lt;BR /&gt; if (mContext != null)&lt;BR /&gt; tmpDir = mContext.getFilesDir();&lt;BR /&gt; Log.d(TAG, "tmpDir:" + tmpDir.toString() + "\n");&lt;BR /&gt; tmpFile = File.createTempFile("buildprop", "ss", tmpDir);&lt;BR /&gt;+ Log.d(TAG, "setByteArrayStream() ---&amp;gt; tmpFile:" + tmpFile);&lt;BR /&gt; &lt;BR /&gt; tmpFile.deleteOnExit();&lt;BR /&gt; FileOutputStream o2 = new FileOutputStream(tmpFile);&lt;BR /&gt;+ Log.d(TAG, "setByteArrayStream() ---&amp;gt; o2:" + o2);&lt;BR /&gt; out.writeTo(o2);&lt;BR /&gt;+ Log.d(TAG, "setByteArrayStream() ---&amp;gt; out writeTo:" + out);&lt;BR /&gt; o2.close();&lt;BR /&gt; setFile(tmpFile);&lt;BR /&gt;+ Log.d(TAG, "setByteArrayStream() ---&amp;gt; setFile tmpFile:" + tmpFile);&lt;BR /&gt; tmpFile.delete();&lt;BR /&gt; } catch (IOException e) {&lt;BR /&gt; e.printStackTrace();&lt;BR /&gt;@@ -70,14 +77,19 @@ public class BuildPropParser {&lt;BR /&gt; &lt;BR /&gt; private void setFile(File file) throws IOException {&lt;BR /&gt; try {&lt;BR /&gt;+ Log.d(TAG, "setFile() ---&amp;gt; file:" + file);&lt;BR /&gt; FileReader reader = new FileReader(file);&lt;BR /&gt;+ Log.d(TAG, "setFile() ---&amp;gt; reader:" + reader);&lt;BR /&gt; BufferedReader in = new BufferedReader(reader);&lt;BR /&gt;+ Log.d(TAG, "setFile() ---&amp;gt; in:" + in);&lt;BR /&gt; String string;&lt;BR /&gt; while ((string = in.readLine()) != null) {&lt;BR /&gt; Scanner scan = new Scanner(string);&lt;BR /&gt;+ Log.d(TAG, "setFile() ---&amp;gt; scan:" + scan);&lt;BR /&gt; scan.useDelimiter("=");&lt;BR /&gt; try {&lt;BR /&gt; propHM.put(scan.next(), scan.next());&lt;BR /&gt;+ Log.d(TAG, "setFile() ---&amp;gt; propHM:" + propHM);&lt;BR /&gt; } catch (NoSuchElementException e) {&lt;BR /&gt; continue;&lt;BR /&gt; }&lt;BR /&gt;@@ -90,13 +102,15 @@ public class BuildPropParser {&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public String getRelease() { &lt;BR /&gt;+ Log.d(TAG, "getRelease()");&lt;BR /&gt; if (propHM != null) &lt;BR /&gt; return propHM.get("ro.build.version.release");&lt;BR /&gt; else &lt;BR /&gt; return null;&lt;BR /&gt; }&lt;BR /&gt; public String getNumRelease() {&lt;BR /&gt;- if (propHM != null) &lt;BR /&gt;+ Log.d(TAG, "getNumRelease()");&lt;BR /&gt;+ if (propHM != null)&lt;BR /&gt; return propHM.get("ro.build.version.incremental");&lt;BR /&gt; else&lt;BR /&gt; return null;&lt;BR /&gt;diff --git a/FSLOta/src/com/fsl/android/ota/OTAServerConfig.java b/FSLOta/src/com/fsl/android/ota/OTAServerConfig.java&lt;BR /&gt;old mode 100644&lt;BR /&gt;new mode 100755&lt;BR /&gt;index 2e141d2..da7428b&lt;BR /&gt;--- a/FSLOta/src/com/fsl/android/ota/OTAServerConfig.java&lt;BR /&gt;+++ b/FSLOta/src/com/fsl/android/ota/OTAServerConfig.java&lt;BR /&gt;@@ -48,6 +48,8 @@ public class OTAServerConfig {&lt;BR /&gt; final String server_ip_config = "server";&lt;BR /&gt; final String port_config_str = "port";&lt;BR /&gt; final String android_nickname = "ota_folder_suffix";&lt;BR /&gt;+ final String OTAlocaldata_str = "OTAlocaldata";&lt;BR /&gt;+ String udisk;&lt;BR /&gt; public OTAServerConfig (String productname) throws MalformedURLException {&lt;BR /&gt; if (loadConfigureFromFile(configFile, productname) == false)&lt;BR /&gt; defaultConfigure(productname);&lt;BR /&gt;@@ -72,6 +74,8 @@ public class OTAServerConfig {&lt;BR /&gt; &lt;BR /&gt; String version = SystemProperties.get("ro.build.version.release");&lt;BR /&gt; String platform = SystemProperties.get("ro.board.platform");&lt;BR /&gt;+ udisk = SystemProperties.get("persist.sys.udisk");&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile ---&amp;gt; udisk : " + udisk);&lt;BR /&gt; ota_folder = new String(product + "_" + android_name + "_" + version + "/");&lt;BR /&gt; fileaddr = new String(ota_folder + product + "-ota-" + version_incremental + ".zip");&lt;BR /&gt; buildconfigAddr = new String(ota_folder + "build.prop");&lt;BR /&gt;@@ -81,6 +85,7 @@ public class OTAServerConfig {&lt;BR /&gt; payloadAddr = new String(ota_folder + "payload.bin");&lt;BR /&gt; diffPayloadAddr = new String(ota_folder + "payload_diff.bin");&lt;BR /&gt; if (platform.indexOf("imx8") != -1) {&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile ---&amp;gt; platform : " + platform);&lt;BR /&gt; ab_slot = true;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt;@@ -94,9 +99,12 @@ public class OTAServerConfig {&lt;BR /&gt; diffbuildpropURL = new URL(default_protocol, server, port, diffbuildconfigAddr);&lt;BR /&gt; diffPayloadPropertiesURL = new URL(default_protocol, server, port, diffPayloadPropertiesAddr);&lt;BR /&gt; diffPayloadURL = new URL(default_protocol, server, port, diffPayloadAddr);&lt;BR /&gt;- Log.d(TAG, "build.prop: " + buildpropURL.toString());&lt;BR /&gt;- Log.d(TAG, "payload.bin: " + payloadURL.toString());&lt;BR /&gt;- Log.d(TAG, "payload_properties.txt" + payloadPropertiesURL.toString());&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile() ---&amp;gt; build.prop: " + buildpropURL.toString());&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile() ---&amp;gt; payload.bin: " + payloadURL.toString());&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile() ---&amp;gt; payload_properties.txt" + payloadPropertiesURL.toString());&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile() ---&amp;gt; diffbuildpropURL : " + diffbuildpropURL.toString());&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile() ---&amp;gt; diffPayloadPropertiesURL : " + diffPayloadPropertiesURL.toString());&lt;BR /&gt;+ Log.d(TAG, "loadConfigureFromFile() ---&amp;gt; diffPayloadURL : " + diffPayloadURL.toString());&lt;BR /&gt; }&lt;BR /&gt; } catch (Exception e) {&lt;BR /&gt; Log.e(TAG, "wrong format/error of OTA configure file.");&lt;BR /&gt;@@ -114,27 +122,35 @@ public class OTAServerConfig {&lt;BR /&gt; String buildconfigAddr = new String(product + "/" + "build.prop"); &lt;BR /&gt; updatePackageURL = new URL(default_protocol, default_serveraddr, default_port, fileaddr );&lt;BR /&gt; buildpropURL = new URL(default_protocol, default_serveraddr, default_port, buildconfigAddr);&lt;BR /&gt;- Log.d(TAG, "create a new server config: package url " + updatePackageURL.toString() + "port:" + updatePackageURL.getPort());&lt;BR /&gt;- Log.d(TAG, "build.prop URL:" + buildpropURL.toString());&lt;BR /&gt;+ Log.d(TAG, "defaultConfigure() ---&amp;gt; create a new server config: package url " + updatePackageURL.toString() + "port:" + updatePackageURL.getPort());&lt;BR /&gt;+ Log.d(TAG, "defaultConfigure() ---&amp;gt; build.prop URL:" + buildpropURL.toString());&lt;BR /&gt;+ }&lt;BR /&gt;+ &lt;BR /&gt;+ public String getUdisk(){&lt;BR /&gt;+ return udisk;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public boolean ab_slot()&lt;BR /&gt; {&lt;BR /&gt;+ Log.d(TAG, "ab_slot() ---&amp;gt; ab_slot:" + ab_slot);&lt;BR /&gt; return ab_slot;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public boolean getDiffUpgrade()&lt;BR /&gt; {&lt;BR /&gt;+ Log.d(TAG, "getDiffUpgrade() ---&amp;gt; is_diff_upgrade:" + is_diff_upgrade);&lt;BR /&gt; return is_diff_upgrade;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public void setDiffUpgrade()&lt;BR /&gt; {&lt;BR /&gt;+ Log.d(TAG, "config setDiffUpgrade() ---&amp;gt;" + is_diff_upgrade);&lt;BR /&gt; is_diff_upgrade = true;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public URL getPackageURL ()&lt;BR /&gt; {&lt;BR /&gt;+ Log.d(TAG, "getPackageURL() ---&amp;gt; ab_slot:" + ab_slot);&lt;BR /&gt; if (ab_slot) {&lt;BR /&gt; if (getDiffUpgrade())&lt;BR /&gt; return diffPayloadURL;&lt;BR /&gt;@@ -147,14 +163,32 @@ public class OTAServerConfig {&lt;BR /&gt; &lt;BR /&gt; public URL getPayloadPropertiesURL ()&lt;BR /&gt; {&lt;BR /&gt;+ Log.d(TAG, "getPayloadPropertiesURL() ---&amp;gt; :");&lt;BR /&gt; if (getDiffUpgrade())&lt;BR /&gt; return diffPayloadPropertiesURL;&lt;BR /&gt; else&lt;BR /&gt; return payloadPropertiesURL;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt;- public URL getBuildPropURL() { return buildpropURL; }&lt;BR /&gt;+ public URL getBuildPropURL() {&lt;BR /&gt;+ Log.d(TAG, "getBuildPropURL() ---&amp;gt; :");&lt;BR /&gt;+ return buildpropURL; &lt;BR /&gt;+ }&lt;BR /&gt; &lt;BR /&gt;- public URL getBuildPropDiffURL() { return diffbuildpropURL; }&lt;BR /&gt;+ public URL getBuildPropDiffURL() { &lt;BR /&gt;+ Log.d(TAG, "getBuildPropDiffURL() ---&amp;gt; :");&lt;BR /&gt;+ return diffbuildpropURL; &lt;BR /&gt;+ }&lt;BR /&gt;+ &lt;BR /&gt;+ public boolean isFileExists(){&lt;BR /&gt;+ Log.d(TAG, "isFileExists() ---&amp;gt; :");&lt;BR /&gt;+ File file =new File(udisk + "/OTAlocal"); &lt;BR /&gt;+ if (file.exists()&amp;amp;&amp;amp; file.isDirectory()){ &lt;BR /&gt;+ Log.d(TAG, "isFileExists() ---&amp;gt; : file true");&lt;BR /&gt;+ return true;&lt;BR /&gt;+ }else{&lt;BR /&gt;+ return false;&lt;BR /&gt;+ }&lt;BR /&gt;+ }&lt;BR /&gt; &lt;BR /&gt; }&lt;BR /&gt;diff --git a/FSLOta/src/com/fsl/android/ota/OTAServerManager.java b/FSLOta/src/com/fsl/android/ota/OTAServerManager.java&lt;BR /&gt;old mode 100644&lt;BR /&gt;new mode 100755&lt;BR /&gt;index e4aaa1e..567ea56&lt;BR /&gt;--- a/FSLOta/src/com/fsl/android/ota/OTAServerManager.java&lt;BR /&gt;+++ b/FSLOta/src/com/fsl/android/ota/OTAServerManager.java&lt;BR /&gt;@@ -34,6 +34,7 @@ import android.os.RecoverySystem;&lt;BR /&gt; import android.os.UpdateEngine;&lt;BR /&gt; import android.os.UpdateEngineCallback;&lt;BR /&gt; import android.util.Log;&lt;BR /&gt;+import android.net.Uri;&lt;BR /&gt; &lt;BR /&gt; public class OTAServerManager {&lt;BR /&gt; public interface OTAStateChangeListener {&lt;BR /&gt;@@ -108,6 +109,7 @@ public class OTAServerManager {&lt;BR /&gt; &lt;BR /&gt; public OTAServerManager(Context context) throws MalformedURLException {&lt;BR /&gt; mConfig = new OTAServerConfig(Build.PRODUCT);&lt;BR /&gt;+ Log.d(TAG, "OTAServerManager ---&amp;gt; mConfig:" + mConfig + "Build.PRODUCT : " + Build.PRODUCT);&lt;BR /&gt; PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);&lt;BR /&gt; mWakelock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "OTA Wakelock");&lt;BR /&gt; mContext = context;&lt;BR /&gt;@@ -123,12 +125,15 @@ public class OTAServerManager {&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public boolean checkNetworkOnline() {&lt;BR /&gt;+ Log.d(TAG, "checkNetworkOnline ---&amp;gt;");&lt;BR /&gt; ConnectivityManager conMgr = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);&lt;BR /&gt; &lt;BR /&gt; if (conMgr.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isConnectedOrConnecting()||&lt;BR /&gt; conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting()) {&lt;BR /&gt;+ Log.d(TAG, "checkNetworkOnline wifi isConnectedOrConnecting---&amp;gt;");&lt;BR /&gt; return true;&lt;BR /&gt; } else {&lt;BR /&gt;+ Log.d(TAG, "checkNetworkOnline wifi false---&amp;gt;");&lt;BR /&gt; return false;&lt;BR /&gt; }&lt;BR /&gt; } &lt;BR /&gt;@@ -136,7 +141,10 @@ public class OTAServerManager {&lt;BR /&gt; public void startCheckingVersion() {&lt;BR /&gt; &lt;BR /&gt; Log.v(TAG, "startCheckingVersion");&lt;BR /&gt;- if (checkURLOK(mConfig.getBuildPropURL()) == false) {&lt;BR /&gt;+ if(mConfig.isFileExists() == false){ &lt;BR /&gt;+ //Network upgrade&lt;BR /&gt;+ if (checkURLOK(mConfig.getBuildPropURL()) == false) {&lt;BR /&gt;+ Log.d(TAG, "startCheckingVersion() ---&amp;gt; mConfig.getBuildPropURL(): " + mConfig.getBuildPropURL());&lt;BR /&gt; if (this.mListener != null) {&lt;BR /&gt; if (this.checkNetworkOnline()) {&lt;BR /&gt; reportCheckingError(OTAStateChangeListener.ERROR_CANNOT_FIND_SERVER);&lt;BR /&gt;@@ -152,8 +160,11 @@ public class OTAServerManager {&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; parser = getTargetPackagePropertyList(mConfig.getBuildPropURL());&lt;BR /&gt;+ Log.d(TAG, "startCheckingVersion() ---&amp;gt; parser: " + parser + "mConfig.getBuildPropURL():" + mConfig.getBuildPropURL());&lt;BR /&gt; if (ab_slot()) {&lt;BR /&gt;+ Log.d(TAG, "startCheckingVersion() ---&amp;gt; ab_slot(): " + ab_slot());&lt;BR /&gt; parser_diff = getTargetPackagePropertyList(mConfig.getBuildPropDiffURL());&lt;BR /&gt;+ Log.d(TAG, "startCheckingVersion() ---&amp;gt; parser_diff: " + parser_diff + "mConfig.getBuildPropDiffURL():" +mConfig.getBuildPropDiffURL());&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; if (parser != null) {&lt;BR /&gt;@@ -162,24 +173,40 @@ public class OTAServerManager {&lt;BR /&gt; OTAStateChangeListener.NO_ERROR, parser);&lt;BR /&gt; } else {&lt;BR /&gt; reportCheckingError(OTAStateChangeListener.ERROR_WRITE_FILE_ERROR);&lt;BR /&gt;+ Log.d(TAG, "startCheckingVersion() ---&amp;gt; OTAStateChangeListener.ERROR_WRITE_FILE_ERROR ");&lt;BR /&gt; }&lt;BR /&gt;+ &lt;BR /&gt;+ }else{&lt;BR /&gt;+ //Local upgrade&lt;BR /&gt;+ Log.v(TAG, "startCheckingVersion ota.conf getLocal exists");&lt;BR /&gt;+ if (this.mListener != null)&lt;BR /&gt;+ this.mListener.onStateOrProgress(OTAStateChangeListener.STATE_IN_CHECKED, &lt;BR /&gt;+ OTAStateChangeListener.NO_ERROR, null);&lt;BR /&gt;+ Log.d(TAG, "startCheckingVersion() ---&amp;gt; OTAStateChangeListener.ERROR_WRITE_FILE_ERROR ");&lt;BR /&gt;+ }&lt;BR /&gt;+ &lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public boolean getUpdateHeader(URL propertiesURL)&lt;BR /&gt; {&lt;BR /&gt; try {&lt;BR /&gt;+ Log.d(TAG, "getUpdateHeader() ---&amp;gt; propertiesURL: " + propertiesURL);&lt;BR /&gt; URL url = propertiesURL;&lt;BR /&gt;+ Log.d(TAG, "getUpdateHeader() ---&amp;gt; url: " + url);&lt;BR /&gt; url.openConnection();&lt;BR /&gt; InputStream is = url.openStream();&lt;BR /&gt; BufferedReader br = new BufferedReader(new InputStreamReader(is));&lt;BR /&gt;+ Log.d(TAG, "getUpdateHeader() ---&amp;gt; br: " + br);&lt;BR /&gt; List&amp;lt;String&amp;gt; lines = new ArrayList&amp;lt;String&amp;gt;();&lt;BR /&gt; String line = null;&lt;BR /&gt; while ((line = br.readLine()) != null) {&lt;BR /&gt; lines.add(line);&lt;BR /&gt;+ Log.d(TAG, "getUpdateHeader() ---&amp;gt; lines.add(line): " + line);&lt;BR /&gt; }&lt;BR /&gt; br.close();&lt;BR /&gt; is.close();&lt;BR /&gt; mUpdateHeader = lines.toArray(new String[lines.size()]);&lt;BR /&gt;+ Log.d(TAG, "getUpdateHeader() ---&amp;gt; mUpdateHeader: " + mUpdateHeader);&lt;BR /&gt; mUpdateEngine.bind(new OTAUpdateEngineCallback(this.mListener));&lt;BR /&gt; &lt;BR /&gt; return true;&lt;BR /&gt;@@ -191,7 +218,38 @@ public class OTAServerManager {&lt;BR /&gt; return false;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;+ &lt;BR /&gt;+ // read payload_properties.txt&lt;BR /&gt;+ public boolean getPayloadProperties(String payloadProperties) {&lt;BR /&gt;+ try {&lt;BR /&gt;+ File file = new File(payloadProperties);&lt;BR /&gt;+ Log.d(TAG, "getPayloadProperties file: " + file);&lt;BR /&gt;+ InputStreamReader is = new InputStreamReader(new FileInputStream(file));&lt;BR /&gt;+ Log.d(TAG, "getPayloadProperties is: " + is);&lt;BR /&gt;+ BufferedReader br = new BufferedReader(is);&lt;BR /&gt;+ Log.d(TAG, "getPayloadProperties br: " + br);&lt;BR /&gt;+ List&amp;lt;String&amp;gt; lines = new ArrayList&amp;lt;String&amp;gt;();&lt;BR /&gt;+ String line = null;&lt;BR /&gt;+ while ((line = br.readLine()) != null) {&lt;BR /&gt;+ Log.d(TAG, "getPayloadProperties line: " + line);&lt;BR /&gt;+ lines.add(line);&lt;BR /&gt;+ }&lt;BR /&gt;+ br.close();&lt;BR /&gt;+ is.close();&lt;BR /&gt;+ mUpdateHeader = lines.toArray(new String[lines.size()]);&lt;BR /&gt;+ Log.d(TAG, "getPayloadProperties() ---&amp;gt; mUpdateHeader: " + mUpdateHeader);&lt;BR /&gt;+ mUpdateEngine.bind(new OTAUpdateEngineCallback(this.mListener));&lt;BR /&gt;+ return true;&lt;BR /&gt;+ } catch (IOException e) {&lt;BR /&gt;+ e.printStackTrace();&lt;BR /&gt;+ return false;&lt;BR /&gt;+ } catch (Exception e) {&lt;BR /&gt;+ e.printStackTrace();&lt;BR /&gt;+ return false;&lt;BR /&gt;+ }&lt;BR /&gt;+ }&lt;BR /&gt; &lt;BR /&gt;+ String remoteBulidId;&lt;BR /&gt; // return true if needs to upgrade&lt;BR /&gt; public OtaTypeSelect compareLocalVersionToServer() {&lt;BR /&gt; boolean diff_ota = false;&lt;BR /&gt;@@ -199,40 +257,99 @@ public class OTAServerManager {&lt;BR /&gt; Long remoteDiffBuildUTC = 0L;&lt;BR /&gt; Long remoteDiffBuildBaseUTC = 0L;&lt;BR /&gt; &lt;BR /&gt;- if (parser == null) {&lt;BR /&gt;- Log.d(TAG, "compareLocalVersion Without fetch remote prop list.");&lt;BR /&gt;+ /*if (parser == null) {&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersion Without fetch remote prop list." + OtaTypeSelect.NONE);&lt;BR /&gt; return OtaTypeSelect.NONE;&lt;BR /&gt;- }&lt;BR /&gt;+ }*/&lt;BR /&gt; OtaTypeSelect upgrade = OtaTypeSelect.NONE;&lt;BR /&gt;- Long buildutc = Build.TIME;&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; upgrade: " + upgrade);&lt;BR /&gt;+ /*Long buildutc = Build.TIME;&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; buildutc: " + buildutc);&lt;BR /&gt; // *1000 because Build.java also *1000, align with it.&lt;BR /&gt; Long remoteBuildUTC = (Long.parseLong(parser.getProp("ro.build.date.utc"))) * 1000;&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; remoteBuildUTC: " + remoteBuildUTC);&lt;BR /&gt; if (buildutc &amp;lt; remoteBuildUTC)&lt;BR /&gt; full_ota = true;&lt;BR /&gt; if (ab_slot()) {&lt;BR /&gt; remoteDiffBuildUTC = (Long.parseLong(parser_diff.getProp("ro.build.date.utc"))) * 1000;&lt;BR /&gt; remoteDiffBuildBaseUTC = (Long.parseLong(parser_diff.getProp("base.ro.build.date.utc"))) * 1000;&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; remoteDiffBuildUTC: " + remoteDiffBuildUTC + "remoteDiffBuildBaseUTC:" + remoteDiffBuildBaseUTC);&lt;BR /&gt; if (buildutc &amp;lt; remoteDiffBuildUTC &amp;amp;&amp;amp; buildutc.equals(remoteDiffBuildBaseUTC))&lt;BR /&gt; diff_ota = true;&lt;BR /&gt;+ }*/&lt;BR /&gt;+&lt;BR /&gt;+ &lt;BR /&gt;+ String build_display_id = Build.DISPLAY;&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; build_display_id: " + build_display_id);&lt;BR /&gt;+ if(mConfig.isFileExists() == false){&lt;BR /&gt;+ //Network upgrade&lt;BR /&gt;+ remoteBulidId = parser_diff.getProp("ro.build.display.id");&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; remoteBulidId: " + remoteBulidId);&lt;BR /&gt;+ &lt;BR /&gt;+ }else{&lt;BR /&gt;+ //Local upgrade&lt;BR /&gt;+ String path = mConfig.getUdisk()+"/OTAlocal/build.prop";&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; path: " + path);&lt;BR /&gt;+ try {&lt;BR /&gt;+ File file = new File(path);&lt;BR /&gt;+ InputStreamReader is = new InputStreamReader(new FileInputStream(file));&lt;BR /&gt;+ BufferedReader br = new BufferedReader(is);&lt;BR /&gt;+ List&amp;lt;String&amp;gt; lines = new ArrayList&amp;lt;String&amp;gt;();&lt;BR /&gt;+ String line = null;&lt;BR /&gt;+ while ((line = br.readLine()) != null) {&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer line: " + line);&lt;BR /&gt;+ lines.add(line);&lt;BR /&gt;+ }&lt;BR /&gt;+ br.close();&lt;BR /&gt;+ is.close();&lt;BR /&gt;+ String[] buildProp = lines.toArray(new String[lines.size()]);&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer buildProp: " + buildProp);&lt;BR /&gt;+ for(String str : buildProp){&lt;BR /&gt;+ if(str.contains("ro.build.display.id=")){&lt;BR /&gt;+ String [] split = str.split("=");&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer split: " + split);&lt;BR /&gt;+ remoteBulidId = split[1]; &lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer str: " + str + "split : " + split + "remoteBulidId:" + remoteBulidId);&lt;BR /&gt;+ }&lt;BR /&gt;+ }&lt;BR /&gt;+ &lt;BR /&gt;+ } catch (IOException e) {&lt;BR /&gt;+ e.printStackTrace();&lt;BR /&gt;+ } catch (Exception e) {&lt;BR /&gt;+ e.printStackTrace();&lt;BR /&gt;+ }&lt;BR /&gt;+ }&lt;BR /&gt;+ &lt;BR /&gt;+ &lt;BR /&gt;+ if(build_display_id != remoteBulidId){&lt;BR /&gt;+ full_ota = true;&lt;BR /&gt;+ diff_ota = true;&lt;BR /&gt; }&lt;BR /&gt;- if (full_ota &amp;amp;&amp;amp; diff_ota)&lt;BR /&gt;+ &lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; full_ota: " + full_ota + "diff_ota:" + diff_ota);&lt;BR /&gt;+ /*if (full_ota &amp;amp;&amp;amp; diff_ota)&lt;BR /&gt; upgrade = OtaTypeSelect.BOTH_OTA;&lt;BR /&gt; else if (full_ota)&lt;BR /&gt; upgrade = OtaTypeSelect.FULL_OTA;&lt;BR /&gt; else if (diff_ota)&lt;BR /&gt;- upgrade = OtaTypeSelect.DIFF_OTA;&lt;BR /&gt;+ upgrade = OtaTypeSelect.DIFF_OTA;*/&lt;BR /&gt;+ if (full_ota || diff_ota){&lt;BR /&gt;+ upgrade = OtaTypeSelect.BOTH_OTA;&lt;BR /&gt;+ Log.d(TAG, "compareLocalVersionToServer() ---&amp;gt; OtaTypeSelect.BOTH_OTA:");&lt;BR /&gt;+ }&lt;BR /&gt; // here only check build time, in your case, you may also check build id, etc.&lt;BR /&gt;- Log.d(TAG, "remote BUILD TIME: " + remoteBuildUTC + " remote DIFF BUILD TIME: " + remoteDiffBuildUTC + " remote DIFF BUILD BASE TIME: " + remoteDiffBuildBaseUTC + " local BUILD TIME:" + buildutc);&lt;BR /&gt;+ //Log.d(TAG, "remote BUILD TIME: " + remoteBuildUTC + " remote DIFF BUILD TIME: " + remoteDiffBuildUTC + " remote DIFF BUILD BASE TIME: " + remoteDiffBuildBaseUTC + " local BUILD TIME:" + buildutc);&lt;BR /&gt; return upgrade;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; void publishDownloadProgress(long total, long downloaded) {&lt;BR /&gt;- //Log.v(TAG, "download Progress: total: " + total + "download:" + downloaded);&lt;BR /&gt;+ Log.v(TAG, "publishDownloadProgress() ---&amp;gt; download Progress: total: " + total + "download:" + downloaded);&lt;BR /&gt; Long progress = new Long((downloaded*100)/total);&lt;BR /&gt; if (this.mListener != null &amp;amp;&amp;amp; progress.longValue() != mCacheProgress) {&lt;BR /&gt; this.mListener.onStateOrProgress(OTAStateChangeListener.MESSAGE_DOWNLOAD_PROGRESS,&lt;BR /&gt; 0, progress);&lt;BR /&gt; mCacheProgress = progress.longValue();&lt;BR /&gt;+ Log.v(TAG, "publishDownloadProgress() ---&amp;gt; mCacheProgress: " + mCacheProgress);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt;@@ -256,20 +373,25 @@ public class OTAServerManager {&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public long getUpgradePackageSize() {&lt;BR /&gt;- if (checkURLOK(mConfig.getPackageURL()) == false) {&lt;BR /&gt;- Log.e(TAG, "getUpgradePckageSize Failed");&lt;BR /&gt;- return -1;&lt;BR /&gt;- }&lt;BR /&gt;- &lt;BR /&gt;- URL url = mConfig.getPackageURL();&lt;BR /&gt;- URLConnection con;&lt;BR /&gt;- try {&lt;BR /&gt;- con = url.openConnection();&lt;BR /&gt;- return con.getContentLength();&lt;BR /&gt;- } catch (IOException e) {&lt;BR /&gt;- e.printStackTrace();&lt;BR /&gt;- return -1;&lt;BR /&gt;+ if(mConfig.isFileExists() == false){&lt;BR /&gt;+ Log.e(TAG, "getUpgradePckageSize() ---&amp;gt; mConfig.getPackageURL()" + mConfig.getPackageURL());&lt;BR /&gt;+ if (checkURLOK(mConfig.getPackageURL()) == false) {&lt;BR /&gt;+ Log.e(TAG, "getUpgradePckageSize Failed");&lt;BR /&gt;+ return -1;&lt;BR /&gt;+ }&lt;BR /&gt;+ URL url = mConfig.getPackageURL();&lt;BR /&gt;+ Log.e(TAG, "getUpgradePckageSize() ---&amp;gt; url" + url);&lt;BR /&gt;+ URLConnection con;&lt;BR /&gt;+ try {&lt;BR /&gt;+ con = url.openConnection();&lt;BR /&gt;+ Log.e(TAG, "getUpgradePckageSize() ---&amp;gt; con.getContentLength()" + con.getContentLength());&lt;BR /&gt;+ return con.getContentLength();&lt;BR /&gt;+ } catch (IOException e) {&lt;BR /&gt;+ e.printStackTrace();&lt;BR /&gt;+ return -1;&lt;BR /&gt;+ }&lt;BR /&gt; }&lt;BR /&gt;+ return -1;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public void onStop() {&lt;BR /&gt;@@ -279,29 +401,62 @@ public class OTAServerManager {&lt;BR /&gt; public void startDownloadUpgradePackage() {&lt;BR /&gt; &lt;BR /&gt; Log.v(TAG, "startDownloadUpgradePackage()");&lt;BR /&gt;-&lt;BR /&gt;- if (checkURLOK(mConfig.getPackageURL()) == false) {&lt;BR /&gt;- if (this.mListener != null)&lt;BR /&gt;- reportDownloadError(OTAStateChangeListener.ERROR_CANNOT_FIND_SERVER);&lt;BR /&gt;- return;&lt;BR /&gt;+ //Log.v(TAG, "startDownloadUpgradePackage() mConfig.getPackageURL() : " + mConfig.getPackageURL());&lt;BR /&gt;+ //Network upgrade&lt;BR /&gt;+ if(mConfig.isFileExists() == false){&lt;BR /&gt;+ if (checkURLOK(mConfig.getPackageURL()) == false) {&lt;BR /&gt;+ Log.v(TAG, "startDownloadUpgradePackage() mConfig.getPackageURL() : " + mConfig.getPackageURL());&lt;BR /&gt;+ if (this.mListener != null)&lt;BR /&gt;+ reportDownloadError(OTAStateChangeListener.ERROR_CANNOT_FIND_SERVER);&lt;BR /&gt;+ return;&lt;BR /&gt;+ }&lt;BR /&gt; }&lt;BR /&gt;-&lt;BR /&gt;+ Log.v(TAG, "startDownloadUpgradePackage() ab_slot() : " + ab_slot());&lt;BR /&gt; if (ab_slot()) {&lt;BR /&gt;- if (getUpdateHeader(mConfig.getPayloadPropertiesURL()) == false) {&lt;BR /&gt;- reportCheckingError(OTAStateChangeListener.ERROR_CANNOT_FIND_SERVER);&lt;BR /&gt;- Log.v(TAG, "error cannot find server!");&lt;BR /&gt;- return;&lt;BR /&gt;+ //Network upgrade&lt;BR /&gt;+ if(mConfig.isFileExists() == false){&lt;BR /&gt;+ if (getUpdateHeader(mConfig.getPayloadPropertiesURL()) == false) {&lt;BR /&gt;+ Log.v(TAG, "startDownloadUpgradePackage() mConfig.getPayloadPropertiesURL() : " + mConfig.getPayloadPropertiesURL());&lt;BR /&gt;+ reportCheckingError(OTAStateChangeListener.ERROR_CANNOT_FIND_SERVER);&lt;BR /&gt;+ Log.v(TAG, "error cannot find server!");&lt;BR /&gt;+ return;&lt;BR /&gt;+ }&lt;BR /&gt;+ }else{&lt;BR /&gt;+ //Local upgrade&lt;BR /&gt;+ if(getPayloadProperties(mConfig.getUdisk()+"/OTAlocal/payload_properties.txt") == false){&lt;BR /&gt;+ Log.v(TAG, "startDownloadUpgradePackage() mConfig.getUdisk() : " + mConfig.getUdisk());&lt;BR /&gt;+ reportCheckingError(OTAStateChangeListener.ERROR_CANNOT_FIND_SERVER);&lt;BR /&gt;+ Log.v(TAG, "error cannot find server!");&lt;BR /&gt;+ return;&lt;BR /&gt;+ }&lt;BR /&gt; }&lt;BR /&gt;-&lt;BR /&gt;+ &lt;BR /&gt;+ &lt;BR /&gt;+ &lt;BR /&gt; mWakelock.acquire();&lt;BR /&gt;- mUpdateEngine.applyPayload(mConfig.getPackageURL().toString(), 0l, 0l, mUpdateHeader);&lt;BR /&gt;+ &lt;BR /&gt;+ &lt;BR /&gt;+ if(mConfig.isFileExists() == false){&lt;BR /&gt;+ //Network upgrade&lt;BR /&gt;+ Log.v(TAG, "___-&amp;gt;startDownloadUpgradePackage() mConfig.getPackageURL().toString() : " + mConfig.getPackageURL().toString() + "mUpdateHeader :" + mUpdateHeader);&lt;BR /&gt;+ mUpdateEngine.applyPayload(mConfig.getPackageURL().toString(), 0l, 0l, mUpdateHeader);&lt;BR /&gt;+ }else{&lt;BR /&gt;+ //Local upgrade&lt;BR /&gt;+ String packageUrl = mConfig.getUdisk()+"/OTAlocal/payload.bin";&lt;BR /&gt;+ Log.v(TAG, "startDownloadUpgradePackage() packageUrl: " + packageUrl.toString());&lt;BR /&gt;+ Uri uri = Uri.fromFile(new File(packageUrl));&lt;BR /&gt;+ mUpdateEngine.applyPayload(uri.toString(), 0l, 0l, mUpdateHeader);&lt;BR /&gt;+ Log.v(TAG, "startDownloadUpgradePackage() uri.toString() : " + uri.toString() + "mUpdateHeader :" + mUpdateHeader);&lt;BR /&gt;+ }&lt;BR /&gt; mWakelock.release();&lt;BR /&gt; return;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; File targetFile = new File(mUpdatePackageLocation);&lt;BR /&gt;+ Log.v(TAG, "startDownloadUpgradePackage() targetFile : " + targetFile);&lt;BR /&gt; try {&lt;BR /&gt; targetFile.createNewFile();&lt;BR /&gt;+ Log.d(TAG, "startDownloadUpgradePackage() targetFile try : " + targetFile.createNewFile());&lt;BR /&gt; } catch (IOException e) {&lt;BR /&gt; e.printStackTrace();&lt;BR /&gt; reportDownloadError(OTAStateChangeListener.ERROR_WRITE_FILE_ERROR);&lt;BR /&gt;@@ -322,16 +477,18 @@ public class OTAServerManager {&lt;BR /&gt; // download the file&lt;BR /&gt; InputStream input = new BufferedInputStream(url.openStream());&lt;BR /&gt; OutputStream output = new FileOutputStream(targetFile);&lt;BR /&gt;+ Log.d(TAG, "startDownloadUpgradePackage() input : " + input + "output : " + output);&lt;BR /&gt; &lt;BR /&gt;- Log.d(TAG, "file size:" + lengthOfFile);&lt;BR /&gt;+ Log.d(TAG, "startDownloadUpgradePackage() ---&amp;gt; file size:" + lengthOfFile);&lt;BR /&gt; byte data[] = new byte[100 * 1024];&lt;BR /&gt; long total = 0, count;&lt;BR /&gt; while ((count = input.read(data)) &amp;gt;= 0 &amp;amp;&amp;amp; !mStop) {&lt;BR /&gt; total += count;&lt;BR /&gt;- &lt;BR /&gt;+ Log.d(TAG, "startDownloadUpgradePackage() ---&amp;gt; total:" + total + "data:" + data +"mStop : " + mStop);&lt;BR /&gt; // publishing the progress....&lt;BR /&gt; publishDownloadProgress(lengthOfFile, total);&lt;BR /&gt; output.write(data, 0, (int)count);&lt;BR /&gt;+ Log.d(TAG, "startDownloadUpgradePackage() ---&amp;gt; while output:" + output);&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; output.flush();&lt;BR /&gt;@@ -339,9 +496,11 @@ public class OTAServerManager {&lt;BR /&gt; input.close();&lt;BR /&gt; if (this.mListener != null &amp;amp;&amp;amp; !mStop)&lt;BR /&gt; this.mListener.onStateOrProgress(OTAStateChangeListener.STATE_IN_DOWNLOADING, 0, null);&lt;BR /&gt;+ Log.d(TAG, "startDownloadUpgradePackage() ---&amp;gt; OTAStateChangeListener.STATE_IN_DOWNLOADING");&lt;BR /&gt; } catch (IOException e) {&lt;BR /&gt; e.printStackTrace();&lt;BR /&gt; reportDownloadError(OTAStateChangeListener.ERROR_WRITE_FILE_ERROR);&lt;BR /&gt;+ Log.d(TAG, "startDownloadUpgradePackage() ---&amp;gt; OTAStateChangeListener.ERROR_WRITE_FILE_ERROR");&lt;BR /&gt; } finally {&lt;BR /&gt; mWakelock.release();&lt;BR /&gt; mWakelock.acquire(2);&lt;BR /&gt;@@ -354,29 +513,35 @@ public class OTAServerManager {&lt;BR /&gt; if (mListener != null)&lt;BR /&gt; mListener.onStateOrProgress(OTAStateChangeListener.MESSAGE_VERIFY_PROGRESS, &lt;BR /&gt; 0, new Long(progress));&lt;BR /&gt;+ Log.d(TAG, "recoveryVerifyListener MESSAGE_VERIFY_PROGRESS ");&lt;BR /&gt; }&lt;BR /&gt; };&lt;BR /&gt; &lt;BR /&gt; public void startInstallUpgradePackage() {&lt;BR /&gt; if (ab_slot()) {&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; ab_slot() " + ab_slot());&lt;BR /&gt; if (mListener != null) {&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; MESSAGE_WAIT_REBOOT() ");&lt;BR /&gt; mListener.onStateOrProgress(OTAStateChangeListener.MESSAGE_WAIT_REBOOT, 0, null);&lt;BR /&gt; }&lt;BR /&gt; return;&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; File recoveryFile = new File(mUpdatePackageLocation);&lt;BR /&gt;- &lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; recoveryFile : " + recoveryFile + "mUpdatePackageLocation:" + mUpdatePackageLocation);&lt;BR /&gt; // first verify package&lt;BR /&gt; try {&lt;BR /&gt; mWakelock.acquire();&lt;BR /&gt; RecoverySystem.verifyPackage(recoveryFile, recoveryVerifyListener, null);&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; RecoverySystem.verifyPackage : " + recoveryFile + "mUpdatePackageLocation:" + mUpdatePackageLocation);&lt;BR /&gt; } catch (IOException e1) {&lt;BR /&gt; reportInstallError(OTAStateChangeListener.ERROR_PACKAGE_VERIFY_FALIED);&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; ERROR_PACKAGE_VERIFY_FALIED: ");&lt;BR /&gt; e1.printStackTrace();&lt;BR /&gt; return;&lt;BR /&gt; } catch (GeneralSecurityException e1) {&lt;BR /&gt; reportInstallError(OTAStateChangeListener.ERROR_PACKAGE_VERIFY_FALIED);&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; ERROR_PACKAGE_VERIFY_FALIED: ");&lt;BR /&gt; e1.printStackTrace();&lt;BR /&gt; return;&lt;BR /&gt; } finally {&lt;BR /&gt;@@ -387,14 +552,17 @@ public class OTAServerManager {&lt;BR /&gt; try {&lt;BR /&gt; mWakelock.acquire();&lt;BR /&gt; RecoverySystem.installPackage(mContext, recoveryFile);&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; RecoverySystem.installPackage : " + recoveryFile);&lt;BR /&gt; } catch (IOException e) {&lt;BR /&gt; // TODO Auto-generated catch block&lt;BR /&gt; reportInstallError(OTAStateChangeListener.ERROR_PACKAGE_INSTALL_FAILED);&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; ERROR_PACKAGE_INSTALL_FAILED ");&lt;BR /&gt; e.printStackTrace();&lt;BR /&gt; return;&lt;BR /&gt; } catch (SecurityException e){&lt;BR /&gt; e.printStackTrace();&lt;BR /&gt; reportInstallError(OTAStateChangeListener.ERROR_PACKAGE_INSTALL_FAILED);&lt;BR /&gt;+ Log.d(TAG, "startInstallUpgradePackage() ---&amp;gt; ERROR_PACKAGE_INSTALL_FAILED ");&lt;BR /&gt; return;&lt;BR /&gt; } finally {&lt;BR /&gt; mWakelock.release();&lt;BR /&gt;@@ -408,6 +576,7 @@ public class OTAServerManager {&lt;BR /&gt; HttpURLConnection.setFollowRedirects(false);&lt;BR /&gt; &lt;BR /&gt; HttpURLConnection con = (HttpURLConnection) url.openConnection();&lt;BR /&gt;+ Log.d(TAG, "checkURLOK() ---&amp;gt; url: " + url);&lt;BR /&gt; &lt;BR /&gt; con.setRequestMethod("HEAD");&lt;BR /&gt; &lt;BR /&gt;@@ -427,26 +596,33 @@ public class OTAServerManager {&lt;BR /&gt; // first try to download the property list file. the build.prop of target image.&lt;BR /&gt; try {&lt;BR /&gt; URL url = configURL;&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() ---&amp;gt; url: " + url + "configURL :" + configURL);&lt;BR /&gt; url.openConnection();&lt;BR /&gt; InputStream reader = url.openStream();&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() ---&amp;gt; reader: " + reader);&lt;BR /&gt; ByteArrayOutputStream writer = new ByteArrayOutputStream();&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() ---&amp;gt; writer: " + writer);&lt;BR /&gt; byte[] buffer = new byte[153600];&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() ---&amp;gt; buffer: " + buffer);&lt;BR /&gt; int totalBufRead = 0;&lt;BR /&gt; int bytesRead;&lt;BR /&gt; &lt;BR /&gt; Log.d(TAG, "start download: " + url.toString() + "to buffer");&lt;BR /&gt; &lt;BR /&gt; while ((bytesRead = reader.read(buffer)) &amp;gt; 0) {&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() ---&amp;gt; bytesRead before: " + bytesRead);&lt;BR /&gt; writer.write(buffer, 0, bytesRead);&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() ---&amp;gt; bytesRead later: " + bytesRead + "writer : " + writer);&lt;BR /&gt; buffer = new byte[153600];&lt;BR /&gt; totalBufRead += bytesRead;&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() ---&amp;gt; totalBufRead: " + totalBufRead);&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; Log.d(TAG, "download finish:" + (new Integer(totalBufRead).toString()) + "bytes download");&lt;BR /&gt; reader.close();&lt;BR /&gt; &lt;BR /&gt; BuildPropParser parser = new BuildPropParser(writer, mContext);&lt;BR /&gt;-&lt;BR /&gt;+ Log.d(TAG, "getTargetPackagePropertyList() parser:" + parser);&lt;BR /&gt; return parser;&lt;BR /&gt; &lt;BR /&gt; } catch (IOException e) {&lt;BR /&gt;@@ -464,10 +640,12 @@ public class OTAServerManager {&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public boolean ab_slot() {&lt;BR /&gt;+ Log.d(TAG, "manager ab_slot() mConfig.ab_slot():" + mConfig.ab_slot());&lt;BR /&gt; return mConfig.ab_slot();&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; public void setDiffUpgrade() {&lt;BR /&gt;+ Log.d(TAG, "manager setDiffUpgrade() mConfig.setDiffUpgrade()");&lt;BR /&gt; mConfig.setDiffUpgrade();&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;diff --git a/FSLOta/src/com/fsl/android/ota/OtaAppActivity.java b/FSLOta/src/com/fsl/android/ota/OtaAppActivity.java&lt;BR /&gt;old mode 100644&lt;BR /&gt;new mode 100755&lt;BR /&gt;index 6554c9e..acdd11c&lt;BR /&gt;--- a/FSLOta/src/com/fsl/android/ota/OtaAppActivity.java&lt;BR /&gt;+++ b/FSLOta/src/com/fsl/android/ota/OtaAppActivity.java&lt;BR /&gt;@@ -64,6 +64,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; public void handleMessage(Message msg) {&lt;BR /&gt; switch (msg.what) {&lt;BR /&gt; case IDLE:&lt;BR /&gt;+ Log.d(TAG, "MainHandler : IDLE");&lt;BR /&gt; mVersionTextView.setVisibility(View.INVISIBLE);&lt;BR /&gt; mDownloadProgress.setVisibility(View.INVISIBLE);&lt;BR /&gt; mUpgradeButton.setVisibility(View.INVISIBLE); &lt;BR /&gt;@@ -71,10 +72,12 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; mRebootButton.setVisibility(View.INVISIBLE);&lt;BR /&gt; break;&lt;BR /&gt; case CHECKED:&lt;BR /&gt;+ Log.d(TAG, "MainHandler : CHECKED");&lt;BR /&gt; mVersionTextView.setVisibility(View.VISIBLE);&lt;BR /&gt; mSpinner.setVisibility(View.INVISIBLE);&lt;BR /&gt; break;&lt;BR /&gt; case DOWNLOADING:&lt;BR /&gt;+ Log.d(TAG, "MainHandler : DOWNLOADING");&lt;BR /&gt; mVersionTextView.setVisibility(View.INVISIBLE);&lt;BR /&gt; mUpgradeButton.setVisibility(View.INVISIBLE);&lt;BR /&gt; mDiffUpgradeButton.setVisibility(View.INVISIBLE);&lt;BR /&gt;@@ -83,15 +86,19 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; mDownloadProgress.setVisibility(View.VISIBLE);&lt;BR /&gt; break;&lt;BR /&gt; case WIFI_NOT_AVALIBLE:&lt;BR /&gt;+ Log.d(TAG, "MainHandler : WIFI_NOT_AVALIBLE");&lt;BR /&gt; mMessageTextView.setText(getText(R.string.error_needs_wifi));&lt;BR /&gt; break;&lt;BR /&gt; case CANNOT_FIND_SERVER:&lt;BR /&gt;+ Log.d(TAG, "MainHandler : CANNOT_FIND_SERVER");&lt;BR /&gt; mMessageTextView.setText(getText(R.string.error_cannot_connect_server));&lt;BR /&gt; break;&lt;BR /&gt; case WRITE_FILE_ERROR:&lt;BR /&gt;+ Log.d(TAG, "MainHandler : WRITE_FILE_ERROR");&lt;BR /&gt; mMessageTextView.setText(getText(R.string.error_write_file));&lt;BR /&gt; break;&lt;BR /&gt; case WAIT_REBOOT:&lt;BR /&gt;+ Log.d(TAG, "MainHandler : WAIT_REBOOT");&lt;BR /&gt; mDownloadProgress.setVisibility(View.INVISIBLE);&lt;BR /&gt; mMessageTextView.setText(getText(R.string.wait_for_reboot));&lt;BR /&gt; mRebootButton.setVisibility(View.VISIBLE);&lt;BR /&gt;@@ -107,7 +114,8 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; public void onCreate(Bundle savedInstanceState) {&lt;BR /&gt; super.onCreate(savedInstanceState);&lt;BR /&gt; &lt;BR /&gt;- Log.d(TAG, "OTAAppActivity : onCreate");&lt;BR /&gt;+ Log.d(TAG, "&amp;lt;----------------OTAAppActivity : onCreate ----------------&amp;gt;");&lt;BR /&gt;+ Log.d(TAG, "&amp;lt;----onCreate target-files-packag-------&amp;gt;");&lt;BR /&gt; setContentView(R.layout.main);&lt;BR /&gt; (mUpgradeButton = (Button) findViewById(R.id.upgrade_button)) &lt;BR /&gt; .setOnClickListener(mUpgradeListener);&lt;BR /&gt;@@ -212,25 +220,33 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; Log.v(TAG, "onStateOrProgress: " + "message: " + message + " error:" + error + " info: " + info );&lt;BR /&gt; switch (message) {&lt;BR /&gt; case STATE_IN_CHECKED:&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: STATE_IN_CHECKED");&lt;BR /&gt; onStateChangeUI(message);&lt;BR /&gt; mState = STATE_IN_CHECKED;&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: STATE_IN_CHECKED mState :" +mState);&lt;BR /&gt; onStateInChecked(error, info);&lt;BR /&gt; break;&lt;BR /&gt; case STATE_IN_DOWNLOADING:&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: STATE_IN_DOWNLOADING");&lt;BR /&gt; onStateChangeUI(message);&lt;BR /&gt; mState = STATE_IN_DOWNLOADING;&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: STATE_IN_DOWNLOADING mState :" +mState);&lt;BR /&gt; onStateDownload(error, info);&lt;BR /&gt; break;&lt;BR /&gt; case STATE_IN_UPGRADING:&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: STATE_IN_UPGRADING");&lt;BR /&gt; onStateChangeUI(message);&lt;BR /&gt; mState = STATE_IN_UPGRADING;&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: STATE_IN_UPGRADING mState :" +mState);&lt;BR /&gt; onStateUpgrade(error, info);&lt;BR /&gt; break;&lt;BR /&gt; case MESSAGE_DOWNLOAD_PROGRESS:&lt;BR /&gt; case MESSAGE_VERIFY_PROGRESS:&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: MESSAGE_DOWNLOAD_PROGRESS MESSAGE_VERIFY_PROGRESS");&lt;BR /&gt; onProgress(message, error, info);&lt;BR /&gt; break;&lt;BR /&gt; case MESSAGE_WAIT_REBOOT:&lt;BR /&gt;+ Log.v(TAG, "onStateOrProgress: MESSAGE_WAIT_REBOOT");&lt;BR /&gt; mHandler.sendEmptyMessageDelayed(WAIT_REBOOT,0);&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt;@@ -242,13 +258,17 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; void onStateChangeUI(int newstate)&lt;BR /&gt; {&lt;BR /&gt; mState = newstate;&lt;BR /&gt;+ Log.d(TAG, "onStateChangeUI() ---&amp;gt; mState : " + mState + "newstate : " + newstate);&lt;BR /&gt; if (newstate == STATE_IN_IDLE) {&lt;BR /&gt; mHandler.sendEmptyMessageDelayed(IDLE,0);&lt;BR /&gt;+ Log.d(TAG, "onStateChangeUI() ---&amp;gt; STATE_IN_IDLE newstate : " + newstate);&lt;BR /&gt; }else if (newstate == STATE_IN_CHECKED) {&lt;BR /&gt; mHandler.sendEmptyMessageDelayed(CHECKED,0);&lt;BR /&gt;+ Log.d(TAG, "onStateChangeUI() ---&amp;gt; STATE_IN_CHECKED newstate : " + newstate);&lt;BR /&gt; }else if (newstate == STATE_IN_DOWNLOADING) {&lt;BR /&gt; // from start download, it start hide the version again.&lt;BR /&gt; mHandler.sendEmptyMessageDelayed(DOWNLOADING,0);&lt;BR /&gt;+ Log.d(TAG, "onStateChangeUI() ---&amp;gt; STATE_IN_DOWNLOADING newstate : " + newstate);&lt;BR /&gt; } &lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt;@@ -264,6 +284,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; // meet error in Verify, fall back to check.&lt;BR /&gt; // TODO which state should ?&lt;BR /&gt; } else if (error == ERROR_PACKAGE_INSTALL_FAILED) {&lt;BR /&gt;+ Log.d(TAG, "onStateUpgrade() ---&amp;gt; ERROR_PACKAGE_INSTALL_FAILED ");&lt;BR /&gt; mMessageTextView.post(new Runnable() {&lt;BR /&gt; public void run() {&lt;BR /&gt; mMessageTextView.setText(getText(R.string.error_package_install_failed));&lt;BR /&gt;@@ -282,6 +303,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; &lt;BR /&gt; Log.v(TAG, "progress : " + progress);&lt;BR /&gt; if (message == MESSAGE_DOWNLOAD_PROGRESS) {&lt;BR /&gt;+ Log.d(TAG, "onProgress() ---&amp;gt; MESSAGE_DOWNLOAD_PROGRESS ");&lt;BR /&gt; onStateChangeUI(STATE_IN_DOWNLOADING);&lt;BR /&gt; mMessageTextView.post(new Runnable() {&lt;BR /&gt; &lt;BR /&gt;@@ -301,6 +323,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; &lt;BR /&gt; void onStateDownload(int error, Object info) {&lt;BR /&gt; if (error == ERROR_CANNOT_FIND_SERVER) {&lt;BR /&gt;+ Log.d(TAG, "onStateDownload() ---&amp;gt; ERROR_CANNOT_FIND_SERVER ");&lt;BR /&gt; // in this case, the build.prop already found but the server don't have upgrade package&lt;BR /&gt; // report as "Server Error: Not have upgrade package";&lt;BR /&gt; mMessageTextView.post(new Runnable() {&lt;BR /&gt;@@ -310,6 +333,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; }&lt;BR /&gt; });&lt;BR /&gt; } else if (error == ERROR_WRITE_FILE_ERROR) {&lt;BR /&gt;+ Log.d(TAG, "onStateDownload() ---&amp;gt; ERROR_WRITE_FILE_ERROR ");&lt;BR /&gt; mMessageTextView.post(new Runnable() {&lt;BR /&gt; &lt;BR /&gt; public void run() {&lt;BR /&gt;@@ -321,6 +345,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; if (error == 0) {&lt;BR /&gt;+ Log.d(TAG, "onStateDownload() ---&amp;gt; error == 0 ");&lt;BR /&gt; // success download, let try to start with install package...&lt;BR /&gt; // we should already in another thread, no needs to create a thread.&lt;BR /&gt; mOTAManager.startInstallUpgradePackage();&lt;BR /&gt;@@ -336,6 +361,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; void onStateInChecked(int error, Object info) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; error --------&amp;gt; " + error);&lt;BR /&gt; mSpinner.post(new Runnable() { &lt;BR /&gt; public void run() {&lt;BR /&gt; mSpinner.setVisibility(View.INVISIBLE);&lt;BR /&gt;@@ -343,6 +369,7 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; });&lt;BR /&gt; &lt;BR /&gt; if (error == 0) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; error == 0 ");&lt;BR /&gt; // return no error, usually means have a version info from remote server, release name is in @info&lt;BR /&gt; // needs check here whether the local version is newer then remote version&lt;BR /&gt; if (mOTAManager.compareLocalVersionToServer() == OTAServerManager.OtaTypeSelect.NONE) {&lt;BR /&gt;@@ -356,7 +383,9 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; &lt;BR /&gt; } else {&lt;BR /&gt; final BuildPropParser parser = (BuildPropParser) info;&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; parser" + parser);&lt;BR /&gt; final long bytes = mOTAManager.getUpgradePackageSize();&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; bytes" + bytes);&lt;BR /&gt; mMessageTextView.post(new Runnable() {&lt;BR /&gt; public void run() {&lt;BR /&gt; onStateChangeUI(STATE_IN_CHECKED);&lt;BR /&gt;@@ -368,18 +397,23 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; parser.getProp("ro.build.id") + "\n" +&lt;BR /&gt; getText(R.string.full_version) + ":" +&lt;BR /&gt; parser.getProp("ro.build.description") + "\n");&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; bytes &amp;gt; 0 &amp;amp;&amp;amp; parser != null version :" + parser.getProp("ro.build.id") + parser.getProp("ro.build.description"));&lt;BR /&gt; }&lt;BR /&gt; mUpgradeButton.setVisibility(View.VISIBLE);&lt;BR /&gt; if (mOTAManager.ab_slot()) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; mOTAManager.ab_slot() :" +mOTAManager.ab_slot());&lt;BR /&gt; mDiffUpgradeButton.setVisibility(View.VISIBLE);&lt;BR /&gt; }&lt;BR /&gt; if (mOTAManager.compareLocalVersionToServer() == OTAServerManager.OtaTypeSelect.BOTH_OTA) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; mOTAManager.compareLocalVersionToServer() == OTAServerManager.OtaTypeSelect.BOTH_OTA");&lt;BR /&gt; mUpgradeButton.setEnabled(true);&lt;BR /&gt; mDiffUpgradeButton.setEnabled(true);&lt;BR /&gt; } else if (mOTAManager.compareLocalVersionToServer() == OTAServerManager.OtaTypeSelect.FULL_OTA) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; mOTAManager.compareLocalVersionToServer() == OTAServerManager.OtaTypeSelect.FULL_OTA");&lt;BR /&gt; mUpgradeButton.setEnabled(true);&lt;BR /&gt; mDiffUpgradeButton.setEnabled(false);&lt;BR /&gt; } else if (mOTAManager.compareLocalVersionToServer() == OTAServerManager.OtaTypeSelect.DIFF_OTA) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; mOTAManager.compareLocalVersionToServer() == OTAServerManager.OtaTypeSelect.DIFF_OTA");&lt;BR /&gt; mUpgradeButton.setEnabled(false);&lt;BR /&gt; mDiffUpgradeButton.setEnabled(true);&lt;BR /&gt; }&lt;BR /&gt;@@ -387,10 +421,13 @@ public class OtaAppActivity extends Activity implements OTAServerManager.OTAStat&lt;BR /&gt; });&lt;BR /&gt; }&lt;BR /&gt; } else if (error == ERROR_WIFI_NOT_AVALIBLE) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; error == ERROR_WIFI_NOT_AVALIBLE");&lt;BR /&gt; mHandler.sendEmptyMessageDelayed(WIFI_NOT_AVALIBLE,0);&lt;BR /&gt; } else if (error == ERROR_CANNOT_FIND_SERVER) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; error == ERROR_CANNOT_FIND_SERVER");&lt;BR /&gt; mHandler.sendEmptyMessageDelayed(CANNOT_FIND_SERVER,0);&lt;BR /&gt; } else if (error == ERROR_WRITE_FILE_ERROR ) {&lt;BR /&gt;+ Log.d(TAG, "onStateInChecked() ---&amp;gt; error == ERROR_WRITE_FILE_ERROR");&lt;BR /&gt; mHandler.sendEmptyMessageDelayed(WRITE_FILE_ERROR,0);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;-- &lt;BR /&gt;1.9.1&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2019 01:26:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx8qxp-support-OTA/m-p/868774#M132172</guid>
      <dc:creator>ucwenux5</dc:creator>
      <dc:date>2019-11-08T01:26:10Z</dc:date>
    </item>
  </channel>
</rss>

