最近新项目想用个第三方的更新功能,之前一直用的讯飞,但是现在讯飞将更新功能关闭了,就在网上找到了腾讯的bugly,下面是具体使用方法(我用的是最简单的配置,使用的是全量更新)
这句话我还是写在上面吧:使用as的模拟器是不提示这个更新界面的,一直会提示“you have no new version”,所以大家还是用真机来开发测试。
效果如下图 (提示界面可以在bugly上自定义):
1、添加依赖
//腾讯bugly全量更新 compile 'com.tencent.bugly:crashreport_upgrade:latest.release'2、 在AndroidManfiest.xml中添加相应的权限
1. 权限配置
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE" />
<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.READ_LOGS" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
uses-permissionandroid:name="android.permission.REQUEST_INSTALL_PACKAGES" />
2. Activity配置
<activity android:name="com.tencent.bugly.beta.ui.BetaActivity" android:configChanges="keyboardHidden|orientation|screenSize|locale" android:theme="@android:style/Theme.Translucent" />3. 配置FileProvider ------如果你使用的第三方库也配置了同样的FileProvider, 可以通过继承FileProvider类来解决合并冲突的问题
(我因为设置了多版本打包,所以authorities配置成下面格式,动态获取applicationid)
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider>在res目录 新建xml文件夹 ,创建provider_paths.xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <!-- /storage/emulated/0/Download/${applicationId}/.beta/apk--> <external-path name="beta_external_path" path="Download/"/> <!--/storage/emulated/0/Android/data/${applicationId}/files/apk/--> <external-path name="beta_external_files_path" path="Android/data/"/> </paths>3、 添加混淆规则
##------------------- Begin: bugly版本更新 ---------- -dontwarn com.tencent.bugly.** -keep public class com.tencent.bugly.**{*;} ##-------------------- END: bugly版本更新----------4、在application类的onCreat方法中配置如下:
public static final String APP_ID = "43bXXXXXXXXXXX"; // TODO 替换成bugly上注册的appid
// bugly版本更新 /** * 只允许在MainActivity上显示更新弹窗,其他activity上不显示弹窗; * 不设置会默认所有activity都可以显示弹窗; */ Beta.canShowUpgradeActs.add(MainActivity.class); /** * true表示初始化时自动检查升级 * false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法 */ Beta.autoCheckUpgrade = true;//设置自动检查 /** * 点击过确认的弹窗在APP下次启动自动检查更新时会再次显示; */ Beta.showInterruptedStrategy = false; /** * 已经接入Bugly用户改用上面的初始化方法,不影响原有的crash上报功能; * init方法会自动检测更新,不需要再手动调用Beta.checkUpdate(),如需增加自动检查时机可以使用Beta.checkUpdate(false,false); * 参数1: applicationContext * 参数2:appId * 参数3:是否开启debug */ Bugly.init(getApplicationContext(), APP_ID, false);5、开始代码使用更新
Beta.checkUpgrade();//检查版本号
说明:想在哪个地方更新就写上这句代码(ps:我是MainActivity的onCreate方法中直接使用)。
详情参考Bugly官网。