Android使用Bugly实现APP版本更新 £神魔★判官ぃ 2022-06-03 07:41 750阅读 0赞 **一、Bugly** 首先我们来欣赏下Bugly的主页 ![这里写图片描述][SouthEast] 那么我们就愉悦的来接入Bugly **二、导入** 关于Bugly的导入[官方文档][Link 1]写的很详细,这里我们再来一次 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][NDK]导入so库 2.手动导入 (1).[下载SDK][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][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下自动下载,默认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,这里不多介绍具体可参考[文档][Link 2]很详细的 [SouthEast]: /images/20220603/b4808eb9d8a44b60a20a25bd7d436d25.png [Link 1]: https://bugly.qq.com/docs/user-guide/instruction-manual-android-upgrade/?v=20171123163535 [NDK]: https://bugly.qq.com/docs/release-notes/release-android-ndk/ [SDK]: https://bugly.qq.com/docs/release-notes/release-android-beta/ [Beta]: https://github.com/vell001/BetaSDKDemo [Link 2]: https://bugly.qq.com/docs/user-guide/advance-features-android-beta/?v=20170912151050
还没有评论,来说两句吧...