【声明】

欢迎转载,但请保留文章原始出处→_→

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

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

一、下载SDK:
打开链接后,界面如下:
上图中,点开箭头处所示的位置,下载Android对应的版本:
 
上图中,单击红框部分下载SDK。
  
二、在友盟的后台注册应用:
上图中,单击红框部分,创建新的应用。
上图中,应用创建成功后,会生成AppKey,这就是我们后面要用到的。
 
二、在代码中进行配置:
现在开始看官方文档怎么说的,文档链接如下: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>标签下:
 <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>

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

 
3.2、紧接着,添加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中的"YOUR 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>
4、调用更新接口:
主要应用场景:
    最常见的是自动更新模式:当用户进入应用首页后,如果处于wifi环境则检测更新,如果有更新,弹出对话框提示有新版本,用户点选更新开始下载更新。
在应用程序入口Activity里的OnCreate() 方法中调用如下代码:
 public void onCreate(Bundle  savedInstanceState) {
super.onCreate(savedInstanceState);
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.2中的APPKEY是否正确添加。
 
三、上传最新的apk进行更新:
假设之前的版本号是1.0,如果你现在又开发出了新的版本,那么只要上传到友盟网站,同时新开发的版本号(VersionCode)要大于1.0,客户端在启动时就会有更新提示。
我们来实验一下。
上图中,先单击红框部分的“组件”,再单击红框部分的“自动更新”,就会出现上图中的文字提示了。我们尤其需要注意上图中的蓝框部分的文字。
 
我们先修改一下工程文件中的代码,将TextView的文本内容改为“乌拉拉,我是第二个版本哟”。
然后修改一下app这个module中的gradle文件,提高版本号。如下图所示:
上图中,更新红框部分的版本号即可。注意第11行的versionCode必须为整数哦。然后生成新版的apk。
 
然后打开友盟的后台:
上图中,将新版的apk上传,并填写更新日志。点击“确定”,弹出如下界面:
 
四、测试: 
v1.0版本的apk运行之后是下面的界面:
加入了自动更新功能之后,再打开程序,弹出了如下界面:
上图中,点击“自动更新”之后,界面如下:
更新完了之后,效果如下:
 

备注:
如果点击更新之后,出现的是如下界面:

上图的错误是因为,前后两个版本的apk用的是不同的签名导致的。
 
另外推荐一个连接大家看看:
友盟自动更新常见问题索引(开发者必读)http://bbs.umeng.com/thread-5924-1-1.html
 
【工程文件】
 
 
自己处理检测更新的结果:
意思是说,现在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);
 
 
 
 
 

使用友盟进行apk的自动更新的更多相关文章

  1. 友盟消息推送和更新XML配置

    <receiver android:name="com.umeng.message.NotificationProxyBroadcastReceiver" android:e ...

  2. android使用友盟第三方自动更新/手动更新

    最近项目用到自动更新,发现一个方便快捷的第三方组件非常好用,只需要几行代码搞定,非常适合新手使用.分享给大家一起学习. 本文档帮助您以最快速最简洁的方式集成使用自动更新组件. 一.申请友盟开发者账号创 ...

  3. 【Android】友盟的自动更新组件

    前言 又好又专业的服务能帮开发者省很多时间.一开始做项目也准备自己来统计数据.自己做自动更新,随着使用友盟服务的时间增加,渐渐放弃了这种想法,转而研究如何更充分的使用,这里分享一下使用自动更新组件的心 ...

  4. Android 云服务器的搭建和友盟APP自动更新功能的实现

    setContentView(R.layout.activity_splash); //Bmob SDK初始化--只需要这一段代码即可完成初始化 //请到Bmob官网(http://www.bmob. ...

  5. Android友盟增量更新

    1.增量升级的原理 增量更新的原理就是将本地apk与服务器端最新版本比对,并得到差异包.比如现在的版本是1.1.4,大小是7.2M,新版本是1.1.5.大小是7.3M.我们发现两个版本只有0.1M的差 ...

  6. android-关于友盟的自动版本更新(面向小白)

    今天说一下关于友盟的自动版本更新(傻瓜式版本更新) 关于自动更新的话,如果让android程序猿自己写的话还是不是那么简单的(对于我这个菜鸟来说...),又要检查当前版本,又要在服务器存储新的版本,又 ...

  7. 友盟ionic多渠道自动签名app

    这几天公司的运营部门要求添加流量统计功能,集成了友盟的插件,中间遇到很多的问题,在这里说明记录一下,为遇到相同问题的朋友们减少麻烦 问题一.插件的使用直接将友盟sdk系在放置到项目根目录下plugin ...

  8. Android ant自动打包脚本:自动替换友盟渠道、版本号、包名

    本文最后修改时间:2014-3-10 Android项目开发时,给公司人员安装,频繁升级,版本号总需要改,太麻烦,跟着时间变,自动升级才方便. Android项目开发新版时,手机上可能要装两个版本,一 ...

  9. android之apk自动更新解析包失败问题

    在apk自动更新(相关问题可以看我的博客http://blog.csdn.net/caicongyang) 从服务器下载完成后,点击notification提示安装时,每次都报解析包失败错误!首先我想 ...

随机推荐

  1. hdu 1518 拼正方形

    本题来自:http://acm.hdu.edu.cn/showproblem.php?pid=1518 题意:输入几个长度,判断能否拼成正方形. 以下部分参考了网友代码,终于ac啦. #include ...

  2. GDB调试器使用总结

    概述:GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情.强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到.下 ...

  3. 关于JS闭包,作者不详(转)

    说明:本文由两篇文章结合而成,系从他人笔记中转过来的, 具体作者不详.因为觉得不错,遂共享之.如有侵权,立删致歉. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变 ...

  4. SQL Server join介绍

    介绍Inner Join(可以省略Inner,平常经常inner,就是inner join), Full Out Join,Cross Join,Left Join, Right Join区别. )) ...

  5. Android项目实战(六):JazzyGridView和JazzyListView的使用

    GridView和ListView控件划动的动画效果 ------------------------------------------------------------------------- ...

  6. C语言指针的长度和类型

    本文地址:http://www.cnblogs.com/archimedes/p/point-length-type.html,转载请注明源地址. 如果考虑应用程序的兼容性和可移植性,指针的长度就是一 ...

  7. 【读书笔记】iOS-特性

    一,@符号标志着“你将使用Objective-C的特殊用法”.@property是一种新的编译器功能,表示声明了一个新对象属性. 二,@property预编译指令的作用是自动声明属性的setter和g ...

  8. OC--代理模式

    一,代理设计模式的场合: 当对象A发生了一些行为,想告知对象B (让对象B成为对象A的代理对象) 对象B想监听对象A的一些行为 (让对象B成为对象A的代理对象) 当对象A无法处理某些行为的时候,想让对 ...

  9. UIScrollView常见属性

    什么是UIScrollView •设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限 • •当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容 • •普通的UIV ...

  10. Xcode 插件失效的临时解决方案

    每当Xcode升级之后,都会导致原有的Xcode插件不能使用,这是因为每个插件的Info.plist中记录了该插件兼容的Xcode版本的DVTPlugInCompatibilityUUID,而每个版本 ...