Android使用Bugly实现APP版本更新

来源:互联网 发布:java小程序 编辑:程序博客网 时间:2024/05/21 03:28

一、Bugly
首先我们来欣赏下Bugly的主页
这里写图片描述
那么我们就愉悦的来接入Bugly
二、导入
关于Bugly的导入官方文档写的很详细,这里我们再来一次
1、自动导入(推荐)
(1)gradle配置(路径app/build.gradle):

  android {        defaultConfig {          ndk {            //设置支持的SO库架构            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'          }        }      }      dependencies {          //注释掉原有bugly的仓库          //compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.releasez指代最新版本号,也可以指定明确的版本号,例如2.3.2          compile 'com.tencent.bugly:crashreport_upgrade:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0          compile 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.2.0      }

如果你原有项目libs下有着’armeabi’、’x86’、’armeabi-v7a’可以手动下载NDK导入so库

2.手动导入
(1).下载SDK
将解压文件下的bugly_crashreport_upgrade-1.2.0.jar(这里以upgrade-1.2.0.jar为例,导入最新的jar即可)导入到自己项目下的libs目录下,然后app下的Gradle进行配置

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile(name: 'bugly_crashreport_upgrade-1.2.0', ext: 'aar')    
}android {    repositories {        flatDir {            dirs 'libs'        }}

(2)下载NDK
将对应的’armeabi’、’x86’、’armeabi-v7a’等so文件放在自己项目下

注意: 已经接入Bugly SDK的用户需要先删除原Bugly SDK的jar包; android4.1以上的工程必须把jar包放在libs目录下,否则会出现NoClassDefFoundError错误;

三、参数配置
1.权限配置

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

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

注意:如果您想兼容Android N或者以上的设备,必须要在AndroidManifest.xml文件中配置FileProvider来访问共享路径的文件。

 <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>

如果你使用的第三方库也配置了同样的FileProvider, 可以通过继承FileProvider类来解决合并冲突的问题,示例如下:

<provider    android:name=".utils.BuglyFileProvider"    android:authorities="${applicationId}.fileProvider"    android:exported="false"    android:grantUriPermissions="true"    tools:replace="name,authorities,exported,grantUriPermissions">    <meta-data        android:name="android.support.FILE_PROVIDER_PATHS"        android:resource="@xml/provider_paths"        tools:replace="name,resource"/></provider>

这里要注意一下,FileProvider类是在support-v4包中的,检查你的工程是否引入该类库。

在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>

这里配置的两个外部存储路径是升级SDK下载的文件可能存在的路径,一定要按照上面格式配置,不然可能会出现错误。

注:1.3.1及以上版本,可以不用进行以上配置,aar已经在AndroidManifest配置了,并且包含了对应的资源文件。

4.混淆配置

-dontwarn com.tencent.bugly.**-keep public class com.tencent.bugly.**{*;}-keep class android.support.**{*;}

四、测试验证

1.SDK初始化

注意:如果您之前使用过Bugly SDK,请将以下这句注释掉。

 CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false); 

统一初始化方法:

Bugly.init(getApplicationContext(), "注册时申请的APPID", false);

参数解析:

参数1:上下文对象
参数2:注册时申请的APPID
参数3:是否开启debug模式,true表示打开debug模式,false表示关闭调试模式

提示:已经接入Bugly用户改用上面的初始化方法,不影响原有的crash上报功能; init方法会自动检测更新,不需要再手动调用Beta.checkUpgrade(), 如需增加自动检查时机可以使用Beta.checkUpgrade(false,false);参数1:isManual 用户手动点击检查,非用户点击操作请传false参数2:isSilence 是否显示弹窗等交互,[true:没有弹窗和toast] [false:有弹窗或toast]

2.发布新版本

进入内测分发页面选择注册的APP,点击发布新版本,上传要升级的APP的版本(上传APP的versioncode必须不低于外发版本的versiocode,否则用户检测不到更新)

五、高级配置
以上几步已经可以提供更新功能,下面我们来看下他的其他设置

1.Beta

Beta类作为Bugly的初始化扩展,通过Beta类可以修改升级的检测时机,界面元素以及自定义升级行为

Bugly.init(this, APP_ID, false);//初始化统一接口 Beta.autoInit = true;//自动初始化开关,true表示app启动自动初始化升级模块; false不会自动初始化; 开发者如果担心sdk初始化影响app启动速度,可以设置为false,在后面某个时刻手动调用Beta.init(getApplicationContext(),false); Beta.autoCheckUpgrade = true;//true表示初始化时自动检查升级; false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法; Beta.upgradeCheckPeriod = 60 * 1000;//设置升级检查周期为60s(默认检查周期为0s),60s内SDK不重复向后台请求策略); Beta.initDelay = 1 * 1000;//设置启动延时为1s(默认延时3s),APP启动1s后初始化SDK,避免影响APP启动速度; Beta.largeIconId = R.drawable.ic_launcher;//设置通知栏大图标,largeIconId为项目中的图片资源; Beta.smallIconId = R.drawable.ic_launcher;//设置状态栏小图标 Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);//设置sd卡的Download为更新资源存储目录Beta.canShowUpgradeActs.add(MainActivity.class);//添加可显示弹窗的Activity,例如,只允许在MainActivity上显示更新弹窗,其他activity上不显示弹窗; 如果不设置默认所有activity都可以显示弹窗。Beta.autoDownloadOnWifi = true;//设置Wifi下自动下载,默认falseBeta.enableHotfix = true;//升级SDK默认是开启热更新能力的,如果你不需要使用热更新,可以将这个接口设置为false

2.更新功能主要API

 /**    * 手动检查更新(用于设置页面中检测更新按钮的点击事件)    */    public static synchronized void checkUpgrade()    /**    * 获取本地已有升级策略(非实时,可用于界面红点展示)    *    * @return    */    public static synchronized UpgradeInfo getUpgradeInfo()    /**    * @param isManual  用户手动点击检查,非用户点击操作请传false    * @param isSilence 是否显示弹窗等交互,[true:没有弹窗和toast] [false:有弹窗或toast]    */    public static synchronized void checkUpgrade(boolean isManual, boolean isSilence)

注意:在调用getUpgradeInfo()方法时如果当前APP版本号小于或等于Bugly上传的APP版本号会返回null,否则才会返回UpgradeInfo

3.当然Bugly也可以自定义UI,比如固定控件ID、自定义activity,这里不多介绍具体可参考文档很详细的

原创粉丝点击