同福

使用腾讯的Bugly实现APP应用的版本更新和升级的功能

介绍

介绍

福哥要给tfhomeapp增加版本更新和应用升级功能,本来想自己手揉一个,后来查询网上很多人都是用的bugly这个企鹅国提供的三方工具实现的,最后福哥决定也加入企鹅国的阵营。

下面福哥就把接入bugly的方法整理出来,大家可以学习一下。

登录官网

bugly的官网地址是

https://bugly.qq.com/

看见qq.com就知道是企鹅国的东西了,既然是企鹅国的应该相对比较靠谱了。

116affef93cd56aa.jpg注意:域名一定是bugly.qq.com才是正确的官网地址!

实名认证

这里面就是要做一下手机号的验证操作。

ea899e3f81ac42af.jpg

创建产品

填写产品基本信息

因为福哥做的是Android版本的软件,所以选择“Android”和“软件”,剩下还有软件的描述和软件的图标,全都弄好了就可以点击保存了。

24c4886dff743f59.jpg

创建成功了

创建成功了,下面给出了三个服务的链接,福哥要做的是版本更新和应用升级,自然选择“版本升级”了

fc8551d1e23f9e52.jpg

安装SDK包

导入sdk

在APP项目的依赖里面添加如下库包,点击“Sync Now”加载bugly库包。库包的版本最好使用福哥给的版本,其他版本不保证可以正常使用。

implementation 'com.tencent.bugly:crashreport_upgrade:1.4.5'
implementation 'com.tencent.bugly:nativecrashreport:3.7.500'

设置ndk

在android.defaultConfig里(就是versionCode同级位置)增加如下设置

ndk {
    abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}

配置

权限

设置如下权限

<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" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

Activity

在Application下面加入升级框的Activity节点设置

<activity
    android:name="com.tencent.bugly.beta.ui.BetaActivity"
    android:configChanges="keyboardHidden|orientation|screenSize|locale"
    android:theme="@android:style/Theme.Translucent" />

FileProvider

在Application下面增加FileProvider的设置。

<provider
    android:name="androidx.core.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设置,就采用继承方式设置。

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

provider_paths

在资源res目录下建立xml子目录,在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代码被混淆,需要在proguard-rules.pro文件里面增加如下设置。

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

初始化

根据官方文档的说法,在Application里增加一句话就可以了。

进入产品列表

鼠标放到右上角的头像,点击菜单里的“我的产品”进入产品列表页面。

3e32d85f7b2f0965.jpg

进入产品设置

鼠标放到指定的产品的“操作”一栏可以看到一些链接,点击“设置”链接进入产品设置页面。

c64fa9e865abd566.jpg

初始化配置

在产品信息栏里可以看到App ID和App Key信息,使用这个App ID组织以下代码放到启动Activity的onCreate方法里面,福哥就放到MainPage主页面了。

Bugly.init(getApplicationContext(), "7806c297c6", false);

e9d3dcf02f2d1eb4.jpg

测试

进入应用版本管理

在产品的设置界面,点击“应用升级”按钮进入应用的版本管理界面。

df0d5b2827fb90f0.jpg

上传新版本

点击“发布新升级”上传安装包。

f2df3e9175882d6e.jpg将新版本安装包上传到bugly服务器上

f95aa3f677d354ff.jpg

设置升级策略

上传后会自动弹出升级策略,这里面主要就是三个地方需要改一下:1)策略名称;2)提示框标题;3)提示框说明。

5fec00dae1c1b54b.jpg

启动策略

点击策略操作栏里的“启动”按钮启动这个升级策略,用户启动APP后就会收到升级提示了。

12b5b5c84ec6ba79.jpg

常见问题

福哥整理了一系列的问题,避免大家再次踩坑,请仔细看下面的列表。

  • 导入的包的版本是有兼容问题的,最好使用教程里写的版本。

  • 旧版本的语法Bugly.init,而新版本的语法是CrashReport.init,教程里用的是旧版本,新版本福哥没有调试出来过。

  • 升级检查只看versionCode,一定要确保发布的新版本的versionCode比当前用户安装的数字更大。

  • 做过签名的apk安装包无法覆盖未做个签名的apk安装包,反过来也不行。这个一定要注意,因为通过Android Studio安装到手机上的是没有做个签名的APP程序。

总结

今天福哥花了一天的时间折腾这个Bugly的APP应用的版本更新和升级的功能,大家如果有同样的需求可以参考教程操作,基本上不会有问题的。