做过这个,简单来说两句。
先不拽名词,比较版本是有版本号的,这个没得说的。搭建一个服务器配合本地应用,本地应用向服务器发送本地系统版本号,服务器进行判断,以返回不同的值。如果最新的和本地一样,那么就告知用户已经最新,如果有比更新的,那么就下载更新包。更新包重点更新的是system分区(类似于PC上C盘),在本地更新的流程完全是标准Android中实现的,会经过严格检查匹配稍有问题就不进行更新。所谓更新就是把下载包 替换 system分区。具体的更新过程就类似于Windows上使用PE启动一个最小系统,然后把 更新包 的system分区中的内容更新到对应的分区中(这点类似你执行了ghost还原系统到C盘)。/system分区一般是只读的,一般不去Root然后修改/system目录下的内容,更新都不会出任何的错误,如果root机器,修改了/system分区的内容,那么最后在最小系统更新系统时,检测到与原来的不同,则不予更新。而这个过程由于是远程下载更新包更新系统,不需要借助其它工具,称之为 OTA(空中下载技术)。

解决方案 »

  1.   


    编译android系统及内核时,会产生三个Bin文件(编译bootloader产生uboot.bin, 编译kernel产生boot.img,  编译android系统产生system.img)请问,所谓的 /system分区是和以上哪个img 文件对应?
      

  2.   


    编译android系统及内核时,会产生三个Bin文件(编译bootloader产生uboot.bin, 编译kernel产生boot.img,  编译android系统产生system.img)请问,所谓的 /system分区是和以上哪个img 文件对应?/system分区对应system.img。 boot.img和uboot.bin也会更新,但是频率没有system.img高。 它们的更新频率从高到低如下:
    system.img -> boot.img -> uboot.bin
      

  3.   

    "搭建一个服务器配合本地应用,本地应用向服务器发送本地系统版本号,服务器进行判断,以返回不同的值。如果最新的和本地一样,那么就告知用户已经最新,如果有比更新的,那么就下载更新包。"<----手机是android系统, android系统本身有这样的功能? (将本地系统版本号发送到服务器)  
            还是需要另外写APK 或服务,在后台进行? (将本地系统版本号发送到服务器)  
      

  4.   

    真正的物理上升级过程是不区别版本号的,升级过程中是不会检测升级包中的版本号,只要是一个无误的「升级包」就可以完成「升级」,这一点首先是要明确的。版本号是人为添加的,为了区别版本的东西。所以至于是什么版本只有上层APK来和服务器区分。然后再说怎么“升级”,一般情况下自己设备上的系统版本号不是会是完全跟随Android官方的版本号,因为自身的一般会比官方的升级频率高一些,且这样才可以达到自主控制,这一点可以参考「Miui的版本号」。说到这里其实你的APK也可以参考Miui中那个管理升级的APK了。压根都没有想过用系统中的,所以我也就没有关心过系统中有没有自带的。这个东西也没有办法统一,且也不是那么的难,且统一的意义也不大。APK的功能其实很简单,这个在什么系统中都可以实现,就是一个简单的逻辑,主要是服务器的配合。真正到升级的地方是系统已经完全做好,只需要调用系统的API 把你下载的升级包(zip包)存放的路径告知系统就好了,到这里你APK的工作就完了。上述中具体的API:
    http://developer.android.com/reference/android/os/RecoverySystem.html