告別后臺(tái)檢查app更新,利用第三方檢查應(yīng)用更新(騰訊bugly版)

前言
今天是周一,離過(guò)年的腳步越來(lái)越近了,然而對(duì)于為了項(xiàng)目,為了app我們要沉下心來(lái)。正好最近公司做的app快要接近尾聲了,今天開(kāi)始打包測(cè)試了。
早上開(kāi)晨會(huì)時(shí)候,研發(fā)經(jīng)理說(shuō)app如果上線之后,可能要進(jìn)行版本迭代。我首先想的是不調(diào)用后臺(tái)進(jìn)行版本更新。正好,之前我在做項(xiàng)目時(shí)候,為了更好的定位到bug,項(xiàng)目集成了騰訊bugly。

正文
老司機(jī)請(qǐng)繞路。
大家都知道,騰訊bugly有3個(gè)模塊:異常上報(bào),運(yùn)營(yíng)模塊,應(yīng)用升級(jí)
我在開(kāi)發(fā)中,經(jīng)常要打包給測(cè)試部測(cè)試,當(dāng)然在測(cè)試過(guò)程避免不了應(yīng)用閃退,出現(xiàn)bug等狀況,為了快速捕捉bug,所以在項(xiàng)目中集成了騰訊bugly,能更好的提高改代碼效率。但是今天重點(diǎn)說(shuō)的是應(yīng)用升級(jí),感覺(jué)很簡(jiǎn)單吧。

騰訊bugly優(yōu)點(diǎn)
Bugly平臺(tái)省去了我們服務(wù)器維護(hù)apk包的過(guò)程,由bugly平臺(tái)來(lái)維護(hù),不需要我們服務(wù)器寫(xiě)任何代碼,我們?cè)趹?yīng)用更新模塊,點(diǎn)擊發(fā)布新應(yīng)用把最新的apk包傳上去即可

步驟

1.開(kāi)發(fā)前準(zhǔn)備

登錄騰訊bugly平臺(tái)(https://bugly.qq.com/v2/workbench/apps),我的注冊(cè)過(guò)所以直接登錄了,可以用自己的qq登錄

我的騰訊bugly截圖.png

這是我的騰訊bugly界面,由于我已經(jīng)創(chuàng)建過(guò)產(chǎn)品了,你們可能需要先創(chuàng)建產(chǎn)品,創(chuàng)建完整才可以。
當(dāng)你創(chuàng)建完整之后,產(chǎn)品界面就會(huì)出現(xiàn)你剛才創(chuàng)建的產(chǎn)品了,這里我不演示了。[圖片上傳中...(QQ截圖20180115115340.png-3e07af-1515988438819-0)]

2.代碼設(shè)置

代碼設(shè)置有手動(dòng)導(dǎo)入和自動(dòng)導(dǎo)入兩種方式,這里手動(dòng)導(dǎo)入不做說(shuō)明

在Android studio中配置gradle,如下


截圖.png

配置示例(路徑app/build.gradle)

 android {
       defaultConfig {
       ndk {
         //選擇要添加的對(duì)應(yīng)cpu類(lèi)型的.so庫(kù)。為了兼容cpu,查看官網(wǎng)SDK的libs多添加幾個(gè)
        abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
       }
    }
  }
  dependencies {
      //注釋掉原有bugly的倉(cāng)庫(kù)
      //compile 'com.tencent.bugly:crashreport:latest.release'//其中l(wèi)atest.release指代最新版本號(hào),也可以指定明確的版本號(hào),例如2.3.2
      compile 'com.tencent.bugly:crashreport_upgrade:latest.release'//其中l(wèi)atest.release指代最新版本號(hào),也可以指定明確的版本號(hào),例如1.2.0
      compile 'com.tencent.bugly:nativecrashreport:latest.release' //其中l(wèi)atest.release指代最新版本號(hào),也可以指定明確的版本號(hào),例如2.2.0
  }

后續(xù)更新升級(jí)SDK時(shí),只需變更配置腳本中的版本號(hào)即可。
注意: 升級(jí)SDK已經(jīng)集成crash上報(bào)功能,已經(jīng)集成Bugly的用戶需要注釋掉原來(lái)Bugly的jcenter庫(kù); 已經(jīng)配置過(guò)符號(hào)表的Bugly用戶保留原有符號(hào)表配置; Bugly SDK(2.1.5及以上版本)已經(jīng)將Java Crash和Native Crash捕獲功能分開(kāi),如果想使用NDK庫(kù),需要配置: compile 'com.tencent.bugly:nativecrashreport:latest.release'

參數(shù)配置
在AndroidMainfest.xml中進(jìn)行以下配置:

  1. 權(quán)限配置
 <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" />
  1. 配置FileProvider ( 如果想兼容Android N或者以上的設(shè)備必須要在AndroidManifest.xml文件中配置FileProvider來(lái)訪問(wèn)共享路徑的文件),代碼如下:
 <provider
         android:name="android.support.v4.content.FileProvider"
         android:authorities="${applicationId}.fileProvider" //applicationId為你項(xiàng)目的id
         android:exported="false"
         android:grantUriPermissions="true">
<meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

具體操作見(jiàn)如下圖片:


我的工程目錄.png

provider_paths代碼如下:

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

這里配置的兩個(gè)外部存儲(chǔ)路徑是升級(jí)SDK下載的文件可能存在的路徑,一定要按照上面格式配置,不然可能會(huì)出現(xiàn)錯(cuò)誤。

如果你想混淆代碼,在Proguard混淆文件中增加以下配置:

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

到這里,bugly還未完成,因?yàn)槲覀冞€需要sdk初始化
不過(guò)這里要注意,***如果你項(xiàng)目之前集成了騰訊bugly的crash包,要注釋掉


這是我的工程初始化bugly所用的.png

第一個(gè)CrashReport是之前初始化捕獲異常的包,我們這里注釋掉,初始化應(yīng)用升級(jí)的包

 Bugly.init(this, "注冊(cè)時(shí)申請(qǐng)的APPID",  false);

參數(shù)解析:
參數(shù)1:上下文對(duì)象
參數(shù)2:注冊(cè)時(shí)申請(qǐng)的APPID
參數(shù)3:是否開(kāi)啟debug模式,true表示打開(kāi)debug模式,false表示關(guān)閉調(diào)試模式

然后還要設(shè)置如下:

  /**
     * true表示app啟動(dòng)自動(dòng)初始化升級(jí)模塊;
     * false不自動(dòng)初始化
     */
    Beta.autoInit = true;

    /**
     * true表示初始化時(shí)自動(dòng)檢查升級(jí)
     * false表示不會(huì)自動(dòng)檢查升級(jí),需要手動(dòng)調(diào)用Beta.checkUpgrade()方法
     */
    Beta.autoCheckUpgrade = true;

    /**
     * 設(shè)置升級(jí)周期為60s(默認(rèn)檢查周期為0s),60s內(nèi)SDK不重復(fù)向后臺(tái)請(qǐng)求策略
     */
    Beta.initDelay = 1 * 1000;

    /**
     * 設(shè)置通知欄大圖標(biāo),largeIconId為項(xiàng)目中的圖片資源;
     */
    Beta.largeIconId = R.mipmap.logo;

    /**
     * 設(shè)置狀態(tài)欄小圖標(biāo),smallIconId為項(xiàng)目中的圖片資源id;
     */
    Beta.smallIconId = R.mipmap.logo;

    /**
     * 設(shè)置更新彈窗默認(rèn)展示的banner,defaultBannerId為項(xiàng)目中的圖片資源Id;
     * 當(dāng)后臺(tái)配置的banner拉取失敗時(shí)顯示此banner,默認(rèn)不設(shè)置則展示“l(fā)oading“;
     */
    Beta.defaultBannerId = R.mipmap.logo;

    /**
     * 設(shè)置sd卡的Download為更新資源保存目錄;
     * 后續(xù)更新資源會(huì)保存在此目錄,需要在manifest中添加WRITE_EXTERNAL_STORAGE權(quán)限;
     */
    Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

    /**
     * 點(diǎn)擊過(guò)確認(rèn)的彈窗在APP下次啟動(dòng)自動(dòng)檢查更新時(shí)會(huì)再次顯示;
     */
    Beta.showInterruptedStrategy = true;

    /**
     * 設(shè)置是否顯示消息通知
     */
    Beta.enableNotification = true;

    /**
     * 使用默認(rèn)彈窗
     */
    Beta.canShowApkInfo = true;
    /**
     * 關(guān)閉或開(kāi)啟熱更新能力,默認(rèn)開(kāi)啟
     */
    Beta.enableHotfix = false;

    /**
     * 只允許在MainActivity上顯示更新彈窗,其他activity上不顯示彈窗;
     * 不設(shè)置會(huì)默認(rèn)所有activity都可以顯示彈窗;
     */
    // 不在登錄activity上顯示彈窗
    Beta.canNotShowUpgradeActs.add(MainActivity.class);

到這里我們初始化騰訊bugly完成。接下來(lái)上傳apk到騰訊bugly平臺(tái)了。
然后再返回到騰訊bugly平臺(tái)這時(shí)候,點(diǎn)擊你創(chuàng)建的產(chǎn)品一欄,出現(xiàn)如下界面:

詳情.png

你會(huì)看到有三個(gè)模塊。我們只關(guān)注應(yīng)用升級(jí),點(diǎn)擊應(yīng)用升級(jí)
截圖

點(diǎn)擊發(fā)布新升級(jí)

截圖.png

你可以把你自己應(yīng)用的apk上傳上去,等上傳完整后,會(huì)彈出如下界面:

截圖.png

1.策略名稱(chēng):最好寫(xiě)應(yīng)用的版本號(hào),是在平臺(tái)區(qū)分應(yīng)用更新版本的

2.升級(jí)方式:推薦升級(jí)(界面實(shí)現(xiàn)下次再說(shuō),立即更新兩個(gè)按鈕) 強(qiáng)制升級(jí)(只顯示立即更新按鈕)

3.高級(jí)配置:設(shè)置一些發(fā)送升級(jí)信息的條件以及次數(shù)間隔等

4.彈窗樣式,選什么樣式就是啥樣子不過(guò)可以自定義樣式代碼里寫(xiě)樣式就可以

5.更新時(shí)必須填寫(xiě)的,版本名字如圖的位置

6.更新說(shuō)明,必填

填寫(xiě)完信息后,點(diǎn)擊修改策略后出現(xiàn)如下:

截圖.png

記住,右邊的狀態(tài)與操作一定要是啟動(dòng)狀態(tài),否則不行。

大家可以看到我這里的版本號(hào)為2.0,然后返回到你的工程中,把你項(xiàng)目版本號(hào)改的低一點(diǎn),只要低于2.0即可。然后重新運(yùn)行你的項(xiàng)目,如果出現(xiàn),如圖:


截圖.png

如果彈出如上的框,即可說(shuō)明你的騰訊bugly集成成功,并且可以不依賴后臺(tái),就可以更新你的app啦!

OK!步驟如上,感覺(jué)集成騰訊bugly比友盟分享,支付寶,微信支付簡(jiǎn)單多了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容