动用友盟进行apk的自动更新,Android友盟增量更新

 

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。

招待转发,但请保留小说原本出处→_→ 

3.陈年增量晋级的流弊 
1.
服务端和客户端都须求贯彻效果与利益,时间周期长 
2.
不只怕保障客户每一次的立刻升高到最新,所以必需对发表的每四个本子都和最新的本子作成差别包,难以保证。 
3.
客商端下载服务端生成的差别包实行合成,恐怕会冷俊不禁合成战败难题,有不小可能率是服务端生成的差距包不对,也可能有超级大可能率顾客端合成不平常,需求大批量的测量检验和联调。

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

4.友盟进级

小说来源:http://www.cnblogs.com/smyhvae/p/4653736.html

4.1
导入SDK所需jar包
 
下载最新版SDK的zip包,将中间的libs文件夹合併到本地下工作程libs子目录下。libs目录下的libs/armeabi/libbspatch.so文件是用于协助增量更新成效的库文件,也亟需在eclipse中增加。

 

4.2
增多能源文件
 
将SDK提供的res文件夹拷入工程目录下,
和工程本身res目录合併。请不要随意删除在那之中的文书

一、下载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>

开荒链接后,分界面如下:

4.3.2
接着增多APPKEY和路子到标签下:
(如若已经济同盟并了总结SDK等友盟其余服务,无需重新扩大应用软件KEY)

图片 1

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

上海图书馆中,点开箭头处所示之处,下载Android对应的版本:

UMENG_应用软件KEY:用来恒定该应用的唯豆蔻梢头性,用你该利用的UMENG
APPKEY,替换value中的”YOUEnclave APP KEY”。 
UMENG_CHANNEL:用来标记使用推广门路,区别门路能够上传分化更新包,您能够利用十几个人以内的法语和数字为门路定名,替换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>

图片 3

4.3.4
调用更新接口 
首要选用场景:最广泛的自动更新情势,当客商步入应用首页后,假诺处在wifi情况则检查实验更新,要是有更新,弹出对话框提醒有新本子,顾客点选更新开始下载更新。 
在应用程序入口Activity里的OnCreate()
方法中调用

 

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

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

眼下默许在Wi-Fi接入景况下才开展活动提醒。如供给在大肆网络境况下都进行更新自动提示,则请在update调用以前增添以下代码:UmengUpdateAgent.setUpdateOnlyWifi(false)。

  

4.4
上传最新的APK
 
假使开荒者现本来就有了流行的APK版本,只要上传到友盟网址,同反常间客商端版本的版本号(VersionCode)小于上传的风靡版本,客商端在运维时就能有更新提醒。

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

5.友盟更新场景 
5.1
自动更新 
最分布的自动更新方式,当客商步向应用首页后,假诺处在wifi遭受则自动物检疫查实验更新(私下认可只在wifi蒙受下检验,是为着客户流量思量。这么些作为足以转移),要是有更新,弹出对话框提示有新本子,顾客点选更新最初下载更新。 
在应用程序入口Activity里的OnCreate()
方法中调用

图片 4

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

上海体育场面中,单击红框部分,创设新的施用。

5.2
手动更新 
重大利用情况:大多利用的设置界面中都会有自己商酌更新等看似意义,必要客商主动触发而检测更新。它的私下认可行为基本和自动更新基本生龙活虎致。 
它和自动更新的显要差异是:在这里种手动更新的景况下,不论互连网意况是还是不是Wifi,无论客商是或不是忽视过该版本的翻新,都足以像下边包车型地铁亲自过问相符在开关的回调中倡导更新检查,取代update(Context
context):

图片 5

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

上海体育场合中,应用创立成功后,会生成AppKey,那就是我们后边要用到的。

5.3
静默下载更新 
要害行使意况:当客商步向应用首页后如若处在wifi景况检查测量检验更新,假如有更新,后台下载新本子,假如下载成功,则开展示公布告栏呈现,客户点击公告栏早先安装。 
默不做声下载中途假若wifi断开,则会甘休下载。 
在应用程序入口Activity里的OnCreate()
方法中调用

 

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则为全量更新

以后最初看官方文书档案怎么说的,文书档案链接如下:http://dev.umeng.com/auto-update/android-doc/quick-start

1、导入SDK所要求的jar包:

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

 

2、增添财富文件:

将SDK提供的res文件夹拷入工程目录下, 和工程本人res目录合併。提醒:友盟SDK提供的能源文件都以umeng_开头。

 

3、配置AndroidManifest.xml:

3.1、张开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>

 上方代码中:第风度翩翩行的权力是允许将下载的apk保存到sd卡中。第二行的权柄是同意检查网络状态,进而依照不一样互联网意况调节何种下载战略,必需加多该权限。

 

3.2、紧接着,增添APPKEY和沟渠到<application>标签下:
(假设已经济合营并了总括SDK等友盟其余服务,无需重新扩展应用程式KEY)

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

 UMENG_应用程式KEY:用来恒定该接收的唯风姿罗曼蒂克性,用你该使用的UMENG
APPKEY,替换value中的”YOU奇骏 APP KEY”。

UMENG_CHANNEL:用来标明使用推广门路,不一样路子能够上传区别更新包,您能够使用二十一人以内的英文和数字为路子定名,替换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>

  

4、调用更新接口:

关键行使场景:

 
  最分布的是自动更新格局:当顾客步入应用首页后,若是处在wifi景况则检查测量试验更新,即使有更新,弹出对话框提醒有新本子,客商点选更新开端下载更新。

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

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

 即调用上方的第3行代码就可以。

注意: 

 
  考虑到客商流量的约束,近年来大家暗中同意在Wi-Fi接入情状下才开展自动唤醒。如供给在自由网络意况下都进展翻新自动提示,则请在update调用从前增加以下代码:UmengUpdateAgent.setUpdateOnlyWifi(false)。
特别提示:针对机顶盒等也许不扶持依旧尚未有线互联网的设备,
请相近拉长上述代码。

 

5、集成监测:

v2.4版本之后的SDK中暗许开启了集成检查评定效能,在调用放肆的更新接口后,大家将替你自动物检疫查上述集成进程中2、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

上航海用图书馆中,更新红框部分的版本号就能够。注意第11行的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);