前言
今天是周一,離過(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界面,由于我已經(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,如下

配置示例(路徑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)行以下配置:
- 權(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" />
- 配置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)如下圖片:

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包,要注釋掉

第一個(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)如下界面:

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

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

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

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)如下:

記住,右邊的狀態(tài)與操作一定要是啟動(dòng)狀態(tài),否則不行。
大家可以看到我這里的版本號(hào)為2.0,然后返回到你的工程中,把你項(xiàng)目版本號(hào)改的低一點(diǎn),只要低于2.0即可。然后重新運(yùn)行你的項(xiàng)目,如果出現(xiàn),如圖:

如果彈出如上的框,即可說(shuō)明你的騰訊bugly集成成功,并且可以不依賴后臺(tái),就可以更新你的app啦!
OK!步驟如上,感覺(jué)集成騰訊bugly比友盟分享,支付寶,微信支付簡(jiǎn)單多了