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,这里不多介绍具体可参考文档很详细的
- Android使用Bugly实现APP版本更新
- Bugly实现APP热更新
- Android App 版本更新实现
- Android 应用更新使用Bugly
- Bugly实现app全量更新
- [Android笔记][Bugly]首次使用bugly收集app崩溃信息
- Bugly Android热更新使用笔记
- android app 版本更新
- Android app更新版本
- Android 热更新 bugly
- Android APP 使用Bugly进行APP质量跟踪
- 简单实现App版本更新
- Android app“版本更新”功能的前后端实现
- Android 轻松实现后台搭建+APP版本更新
- Android 轻松实现后台搭建+APP版本更新
- Android 轻松实现后台搭建+APP版本更新
- Android 轻松实现后台搭建+APP版本更新
- Android 轻松实现后台搭建+APP版本更新
- SpringBoot的三种启动方式
- java,js 编码解码
- 2017智能周报 | 12.03-12.09 | 无人驾驶载客测试、人脸及语音识别进入小区地铁、英伟达和高通芯片发布……
- linux下haproxy安装配置笔记
- 《jquery权威指南》学习笔记--第二章
- Android使用Bugly实现APP版本更新
- HttpClient调用接口传递文件参数
- Oracle EBS的组织架构
- WAN startdeamontowaitconn.bind1 10013 红蜘蛛软件,学生机不能受控制
- XCode仍然找不到<libxml/tree.h>的情况,
- 程序异常:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
- 冒泡排序java实现
- PCI串口晶振由1.8432MHz变为14.7456MHz调试
- 详解反向传播算法(下)