Android使用Bugly实现APP版本更新

一、Bugly
首先我们来欣赏下Bugly的主页
Android使用Bugly实现APP版本更新_第1张图片
那么我们就愉悦的来接入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文件如下:


<paths xmlns:android="http://schemas.android.com/apk/res/android">
    
    <external-path name="beta_external_path" path="Download/"/>
    
    <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下自动下载,默认false
Beta.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,这里不多介绍具体可参考文档很详细的

你可能感兴趣的:(Android)