生命壹号,大家发现四个版本只有0.1M的歧异

 

1.增量升级的原理 
增量更新的法则正是将本地apk与服务器端最新版本比对,并取得差别包。比如现在的版本是1.1.4,大小是7.2M,新本子是1.1.5.轻重是7.3M。我们发现多少个本子唯有0.1M的反差,那样我们如若利用增量升级生成0.1M左右的差距包,那样用户只必要下载0.1M的差别包举行升级而不须求再行下载7.3M的新本子了。

1.增量升级的规律 
增量更新的法则正是将本地apk与劳务器端最新版本比对,并得到差距包。比如往后的本子是1.1.4,大小是7.2M,新本子是1.1.5.高低是7.3M。大家发现三个本子唯有0.1M的歧异,那样大家假使使用增量升级生成0.1M左右的差异包,那样用户只必要下载0.1M的差别包举行升级换代而不需求再行下载7.3M的新本子了。

【声明】 

2.过去增量升级的贯彻 
第②要有服务端来生成差距包,这一步使用bsdiff(二进制差分工具)来生成老版本和新本子的差别包,再提须求使用下载差距包。应用端则是封装bspatch成so动态库,通过jni调用动态库将旧版本的apk和差别包合成新本子的apk。

2.过去增量升级的兑现 
首先要有服务端来生成差别包,这一步使用bsdiff(二进制差分工具)来生成老版本和新本子的差别包,再提须求接纳下载差距包。应用端则是封装bspatch成so动态库,通过jni调用动态库将旧版本的apk和差距包合成新本子的apk。

欢迎转发,但请保留文章原来出处→_→ 

3.过去增量升级的弊端 
1.
服务端和客户端都必要达成效益,时间周期长 
2.
不大概有限支撑用户每一次的立刻升级到最新,所以必须对宣布的每二个版本都和新颖的版本作成差距包,难以维护。 
3.
客户端下载服务端生成的差别包举行合成,或然会出现合成失败难题,有可能是劳动端生成的差别包不对,也有也许客户端合成有题目,供给大批量的测试和联调。

3.陈年增量升级的坏处 
1.
服务端和客户端都亟待完毕效益,时间周期长 
2.
无法确定保障用户每一回的立即提高到新型,所以必须对公布的每八个本子都和最新的本子作成差别包,难以保证。 
3.
客户端下载服务端生成的差别包举办合成,或许汇合世合成退步难点,有恐怕是劳动端生成的差别包不对,也有恐怕客户端合成非常,供给多量的测试和联调。

生命壹号:http://www.cnblogs.com/smyhvae/

4.友盟升级

4.友盟升级

文章来源:http://www.cnblogs.com/smyhvae/p/4653736.html

4.1
导入SDK所需jar包
 
下载最新版SDK的zip包,将内部的libs文件夹合并到地面工程libs子目录下。libs目录下的libs/armeabi/libbspatch.so文件是用以协助增量更新功用的库文件,也须要在eclipse中加上。

4.1
导入SDK所需jar包
 
下载最新版SDK的zip包,将里面包车型地铁libs文件夹合并到本地下工作程libs子目录下。libs目录下的libs/armeabi/libbspatch.so文件是用于援救增量更新成效的库文件,也亟需在eclipse中充足。

 

4.2
添加财富文件
 
将SDK提供的res文件夹拷入工程目录下,
和工程本人res目录合并。请不要随便删除个中的文件

4.2
添加能源文件
 
将SDK提供的res文件夹拷入工程目录下,
和工程自身res目录合并。请不要随便删除当中的公文

一、下载SDK:

4.3
配置AndroidManifest.xml
 
4.3.1
添加SDK需求的权杖到标签下:

4.3
配置AndroidManifest.xml
 
4.3.1
添加SDK须要的权能到标签下:

官网链接:http://www.umeng.com/component_update

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

开辟链接后,界面如下:

4.3.2
接着添加APPKEY和渠道到标签下:
(借使已经集成了总计SDK等友盟其余服务,不要求再行添加APPKEY)

4.3.2
接着添加APPKEY和渠道到标签下:
(借使已经济协作并了总结SDK等友盟其余服务,不供给再行添加APPKEY)

图片 1

<meta-data android:value="YOUR APP KEY" android:name="UMENG_APPKEY"/>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
<meta-data android:value="YOUR APP KEY" android:name="UMENG_APPKEY"/>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>

上海教室中,点开箭头处所示的岗位,下载Android对应的版本:

UMENG_APPKEY:用来定位该利用的唯一性,用你该行使的UMENG
APPKEY,替换value中的”YOU福睿斯 APP KEY”。 
UMENG_CHANNEL:用来标注使用推广渠道,分裂渠道能够上传分裂更新包,您能够行使十2人以内的英文和数字为渠道定名,替换value中的”Channel
ID”。假诺不改动,将意味着默许渠道,假设需求动用友盟自动更新多渠道创新,必须先集成友盟总结SDK。 
4.3.3
添加Service和Activity到标签下:
(请小心:v2.4的SDK中,对话框改为Activity完成,com.umeng包名恐怕有变,若是无法下载,请检查包名,替换到正确的包名)

UMENG_APPKEY:用来稳定该使用的唯一性,用你该使用的UMENG
APPKEY,替换value中的”YOUMurano APP KEY”。 
UMENG_CHANNEL:用来标注使用推广渠道,区别渠道能够上传不一致更新包,您能够运用20个人以内的英文和数字为渠道定名,替换value中的”Channel
ID”。如果不改动,将代表私下认可渠道,如果需要运用友盟自动更新多渠道革新,必须先集成友盟总结SDK。 
4.3.3
添加Service和Activity到标签下:
(请留意:v2.4的SDK中,对话框改为Activity完毕,com.umeng包名大概有变,假使不可能下载,请检查包名,替换到正确的包名)

图片 2

<service
    android:name="com.umeng.update.net.DownloadingService"
    android:process=":DownloadingService" >
</service>
<activity 
    android:name="com.umeng.update.UpdateDialogActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<service
    android:name="com.umeng.update.net.DownloadingService"
    android:process=":DownloadingService" >
</service>
<activity 
    android:name="com.umeng.update.UpdateDialogActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>

图片 3

4.3.4
调用更新接口 
首要采用场景:最广大的自动更新方式,当用户进入应用首页后,假若处在wifi环境则检查和测试更新,如果有立异,弹出对话框提醒有新本子,用户点选更新开头下载更新。 
在应用程序入口Activity里的OnCreate()
方法中调用

4.3.4
调用更新接口 
首要选用场景:最广大的自动更新格局,当用户进入应用首页后,如若处在wifi环境则检查和测试更新,倘诺有创新,弹出对话框提醒有新本子,用户点选更新起先下载更新。 
在应用程序入口Activity里的OnCreate()
方法中调用

 

public void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    UmengUpdateAgent.update(this);
public void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    UmengUpdateAgent.update(this);

上海体育场地中,单击红框部分下载SDK。

脚下默许在Wi-Fi接入意况下才进行自动唤醒。如需求在肆意网络环境下都进展翻新自动提醒,则请在update调用在此之前添加以下代码:UmengUpdateAgent.setUpdateOnlyWifi(false)。

当下暗中同意在Wi-Fi接入景况下才开始展览活动提醒。如须要在随意互连网环境下都实行更新自动唤醒,则请在update调用在此以前添加以下代码:UmengUpdateAgent.setUpdateOnlyWifi(false)。

  

4.4
上传最新的APK
 
若果开发者现已有了新星的APK版本,只要上传到友盟网站,同时客户端版本的版本号(VersionCode)小于上传的新星版本,客户端在运转时就会有革新提醒。

4.4
上传最新的APK
 
假若开发者现已有了新型的APK版本,只要上传到友盟网站,同时客户端版本的版本号(VersionCode)小于上传的风行版本,客户端在运维时就会有立异提醒。

② 、在友盟的后台注册应用:

5.友盟更新场景 
5.1
自动更新 
最常见的自动更新格局,当用户进入应用首页后,即使处在wifi环境则自动物检疫查和测试更新(暗许只在wifi环境下检查和测试,是为了用户流量考虑。这几个行为能够改变),假诺有立异,弹出对话框提醒有新本子,用户点选更新初阶下载更新。 
在应用程序入口Activity里的OnCreate()
方法中调用

5.友盟更新场景 
5.1
自动更新 
最普遍的自动更新方式,当用户进入应用首页后,假诺处在wifi环境则自动物检疫查和测试更新(暗中同意只在wifi环境下检查和测试,是为着用户流量考虑。那一个作为足以改变),假若有更新,弹出对话框提醒有新本子,用户点选更新开头下载更新。 
在应用程序入口Activity里的OnCreate()
方法中调用

图片 4

public void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    UmengUpdateAgent.update(this)
    //UmengUpdateAgent.update(this, "appkey", "channel");
public void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    UmengUpdateAgent.update(this)
    //UmengUpdateAgent.update(this, "appkey", "channel");

上海教室中,单击红框部分,创设新的运用。

5.2
手动更新 
最主要接纳境况:许多利用的安装界面中都会有自笔者批评更新等看似意义,要求用户积极触发而检查和测试更新。它的暗中同意行为基本和自动更新基本一致。 
它和自动更新的机要区别是:在那种手动更新的状态下,无论互联网情况是还是不是Wifi,无论用户是还是不是忽略过该版本的更新,都可以像上边包车型大巴以身作则一样在按钮的回调中倡导更新检查,代替update(Context
context):

5.2
手动更新 
首要利用意况:许多利用的设置界面中都会有自小编批评更新等接近作用,必要用户主动触发而检查和测试更新。它的暗中认可行为基本和自动更新基本一致。 
它和自动更新的机要差距是:在那种手动更新的动静下,无论网络情状是还是不是Wifi,无论用户是还是不是忽略过该版本的创新,都能够像上边包车型大巴言传身教一样在按钮的回调中倡导更新检查,代替update(Context
context):

图片 5

public void onClick(View v) {
    UmengUpdateAgent.forceUpdate(mContext);
}
public void onClick(View v) {
    UmengUpdateAgent.forceUpdate(mContext);
}

上海体育地方中,应用成立成功后,会生成AppKey,这就是大家前面要用到的。

5.3
静默下载更新 
驷马难追使用景况:当用户进入应用首页后只要处在wifi环境检查和测试更新,倘若有革新,后台下载新本子,假设下载成功,则展开文告栏展现,用户点击通告栏起初设置。 
沉默下载中途假设wifi断开,则会甘休下载。 
在应用程序入口Activity里的OnCreate()
方法中调用

5.3
静默下载更新 
重在接纳意况:当用户进入应用首页后假诺处在wifi环境检查和测试更新,假若有更新,后台下载新本子,假若下载成功,则展开通告栏呈现,用户点击公告栏开头安装。 
沉默下载中途假设wifi断开,则会告一段落下载。 
在应用程序入口Activity里的OnCreate()
方法中调用

 

public void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    UmengUpdateAgent.silentUpdate(this);
public void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    UmengUpdateAgent.silentUpdate(this);

② 、在代码中展开安顿:

6.友盟增量升级 
友盟增量更新的法则是:应用集成友盟自动更新SDK之后,SDK会在行使运行时将手提式无线电话机端的Version
Code和动用APK文件的MD5值发送到友盟的劳动器端。服务器通过对MD5值查找到老版本的APK,
同新老版本的APK做diff, 生成patch文件,再次来到给SDK。
SDK再将patch文件和手提式有线电电话机上的老版本APK文件合成生成新本子的APK。手提式有线电话机端生成的新版APK文件的MD5值会和劳务器端的新版APK
MD5值保持严苛平等。在此进程中,
供给友盟服务器必须存在新老多少个版本的APK文件。 
友盟暗中同意是选择的增量更新,要是想使用全量更新能够调用setDeltaUpdate(boolean
deltaUpdate)设置,暗中同意true,设为false则为全量更新

6.友盟增量升级 
友盟增量更新的规律是:应用集成友盟自动更新SDK之后,SDK会在接纳启动时将手提式有线电电话机端的Version
Code和采用APK文件的MD5值发送到友盟的劳务器端。服务器通过对MD5值查找到老版本的APK,
同新老版本的APK做diff, 生成patch文件,再次回到给SDK。
SDK再将patch文件和手提式有线电话机上的老版本APK文件合成生成新本子的APK。手机端生成的新版APK文件的MD5值会和服务器端的新版APK
MD5值保持严谨平等。在此进程中,
供给友盟服务器必须存在新老多少个本子的APK文件。 
友盟暗中同意是使用的增量更新,如若想利用全量更新能够调用setDeltaUpdate(boolean
deltaUpdate)设置,私下认可true,设为false则为全量更新

于今开首看官方文档怎么说的,文书档案链接如下:http://dev.umeng.com/auto-update/android-doc/quick-start

壹 、导入SDK所须求的jar包:

将SDK中的libs文件夹合并到地点工程libs子目录下。

 

② 、添加财富文件:

将SDK提供的res文件夹拷入工程目录下, 和工程本身res目录合并。提示:友盟SDK提供的财富文件都是umeng_开头。

 

3、配置AndroidManifest.xml:

3.一 、打开AndroidManifest.xml,添加SDK要求的权限到<manifest>标签下:

1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
2 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
3 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

 上方代码中:第2行的权位是同意将下载的apk保存到sd卡中。第①行的权限是允许检查网络状态,从而根据不一致网络环境控制何种下载策略,务必添加该权限。

 

3.二 、紧接着,添加APPKEY和沟渠到<application>标签下:
(固然已经合龙了计算SDK等友盟其余服务,不须要再一次添加APPKEY)

<meta-data android:value="YOUR APP KEY" android:name="UMENG_APPKEY"/>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>

 UMENG_APPKEY:用来稳定该使用的唯一性,用你该应用的UMENG
APPKEY,替换value中的”YOULX570 APP KEY”。

UMENG_CHANNEL:用来标注使用推广渠道,不相同渠道能够上传不相同更新包,您能够利用20个人以内的英文和数字为渠道定名,替换value中的”Channel
ID”。借使不改动,将意味暗许渠道。(尤其提示:若是急需运用友盟自动更新多渠道立异,必须先集成友盟总括SDK)

 

3.3、添加Service和Activity到<application>标签下:

<service
    android:name="com.umeng.update.net.DownloadingService"
    android:process=":DownloadingService" >
</service>
<activity 
    android:name="com.umeng.update.UpdateDialogActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>

  

四 、调用更新接口:

最首要选拔场景:

 
  最广泛的是自动更新形式:当用户进入应用首页后,假设处在wifi环境则检查和测试更新,假设有更新,弹出对话框提醒有新本子,用户点选更新初叶下载更新。

在应用程序入口Activity里的OnCreate() 方法中调用如下代码:

1 public void onCreate(Bundle  savedInstanceState) {
2     super.onCreate(savedInstanceState);
3     UmengUpdateAgent.update(this);

 即调用上方的第2行代码即可。

注意: 

 
  考虑到用户流量的限制,近期大家私下认可在Wi-Fi接入情状下才实行活动提醒。如供给在随机互连网环境下都实行更新自动唤醒,则请在update调用之前添加以下代码:UmengUpdateAgent.setUpdateOnlyWifi(false)。
特别提示:针对机顶盒等恐怕不扶助照旧尚未有线网络的装置,
请同样丰硕上述代码。

 

⑤ 、集成监测:

v2.4本子之后的SDK中私下认可开启了合并检查和测试效能,在调用任意的更新接口后,我们将替你自动物检疫查上述集成进度中贰 、3三个步骤是还是不是被正确完毕。
如若没错完毕不会现身此外指示,不然会以如下的toast提醒你。

你能够通过调用UmengUpdateAgent.setUpdateCheckConfig(false)来禁用此成效。

toast的含义如下:

    “Please copy
all resources (res/) from SDK to your
project!”:请检查是或不是把res文件夹下全体的能源文件都放到了工程中。

    “Please add
Permission in
AndroidManifest!”:请检查上述手续1.3中3.1的连带权限是还是不是正确添加。

    “Please add
Activity in
AndroidManifest!”:请检查上述手续1.3中3.3的Activity是不是正确添加。

    “Please add
Service in
AndroidManifest!”:请检查上述手续1.3中3.3中的Service是或不是科学添加。

    “Please set
umeng appkey!”:请检查上述手续3.第22中学的APPKEY是还是不是科学添加。

 

叁 、上传最新的apk进行翻新:

一经在此以前的版本号是1.0,如若您未来又开发出了新的版本,那么一旦上传到友盟网站,同时新开发的版本号(VersionCode)要大于1.0,客户端在运转时就会有革新提醒。

大家来尝试一下。

图片 6

上海教室中,先单击红框部分的“组件”,再单击红框部分的“自动更新”,就会现出上海教室中的文字提醒了。大家更为须要专注上航海用教室中的蓝框部分的文字。

 

咱俩先修改一下工程文件中的代码,将TextView的文件内容改为“乌拉拉,作者是第②个本子哟”。

然后修改一下app那个module中的gradle文件,提高版本号。如下图所示:

图片 7

上海体育地方中,更新红框部分的版本号即可。注意第贰1行的versionCode必须为整数啊。然后生成新版的apk。

 

接下来打开友盟的后台:

图片 8

上海教室中,将新版的apk上传,并填写更新日志。点击“鲜明”,弹出如下界面:

图片 9

 

四、测试: 

v1.0本子的apk运维之后是底下的界面:

图片 10

加盟了自动更新成效之后,再打开程序,弹出了之类界面:

图片 11

上海体育场所中,点击“自动更新”之后,界面如下:

图片 12

革新完了以后,效果如下:

图片 13

 

备注:

比方点击更新之后,出现的是之类界面:

图片 14

上海体育场地的荒谬是因为,前后五个版本的apk用的是例外的签著名编剧致的。

 

此外推荐一个连接我们看看:

友盟自动更新常见难题索引(开发者必读)http://bbs.umeng.com/thread-5924-1-1.html

 

【工程文件】

二零一六-07-16-Update德姆o工程文件

 

 

投机处理检查和测试更新的结果:

意思是说,未来app中有个【检查和测试更新】按钮,通过点击那一个按钮来检查和测试是不是必要立异。那我们得以把下边那段代码放在按钮的监听事件中:

UmengUpdateAgent.setUpdateAutoPopup(false);
UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() {
    @Override
    public void onUpdateReturned(int updateStatus, UpdateResponse updateInfo) {
        switch (updateStatus) {
            case UpdateStatus.Yes: // has update
                UmengUpdateAgent.showUpdateDialog(UIUtils.getContext(), updateInfo);
                break;
            case UpdateStatus.No: // has no update
                UIUtils.showToastSafe("当前已是最新版本");
                break;
            case UpdateStatus.NoneWifi: // none wifi
                UIUtils.showToastSafe("没有wifi连接, 只在wifi下更新");
                break;
            case UpdateStatus.Timeout: // time out
                UIUtils.showToastSafe("超时");
                break;
        }
    }
});
UmengUpdateAgent.forceUpdate(this);

 

 

 

 

 

 

 

相关文章