編輯:關於Android編程
我們在開發中常常會注意到一些Crash,這正是很頭疼的,而且Crash會帶來很多意想不到的狀態,很惡心,所以今天,我們來著重研究一下Crash,同時,我們也將使用第三方SDK,也就是騰訊的Bugly來撲捉這些Crash,讓他無所遁形。
1.等待用戶反饋,這樣很被動 2.了解出錯原因,讓用戶提供日志和使用場景,不靠譜,攢人品吧 3.提示用戶反饋,這樣對用戶體驗有點糟糕作為開發人員,很容易就能碰到Crash,但是作為用戶,我相信也有很大部分人碰到過Crash,這些原因,也正是Android的平台差異化和適配所導致的,而且,你要是你安裝一個軟件就Crash,我想你會立馬把他卸載掉。同時心理嘲笑了一下開發人員,有些用戶還有可能會去商店給你差評之類的,這就不多說了,反正會直接影響到你APP的口碑和市場競爭能力,你要是一些用戶很多的APP的話,你還得考慮用戶留存和收入的問題了
而在以前,我們是怎麼處理Crash的呢?一般有三個補救措施吧,感覺,當然,還有其他,待補充:
而在以前,很多廠商基本都這樣搞過,歸根究底,還是現在的APP質量,仍然不敢恭維
我今天講的是騰訊的Bugly處理Crash的方式,主要還是因為他使用比較簡單吧,初始化也就一行代碼,而且可以監控和獲取日志,挺不錯的
Java Crash一般Crash也是分了兩類
Native Crashjava代碼觸發,Jvm虛擬機退出,系統彈框提醒用戶,這個我們可以看log查看報錯原因,Crash工具都能捕獲到。
C/C++代碼觸發,Linux進程退出,無系統提示,這就需要一些第三方工具去捕獲了<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjwvYmxvY2txdW90ZT4NCjxoMiBpZD0="三模擬crash的產生">三.模擬Crash的產生
其實我們可以非常簡單的實現一個java的Crash,比如空指針,很正常就能產生,我們這樣來寫MainActivity
public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button.setText("Android Crash"); } }
我都沒給這個button初始化就賦值,肯定會報空指針異常,效果如上圖,而在我們上圖中是提到的,我們可以使用log去收集錯誤
我們可以看到他的錯誤是空指針,而錯誤在MainActivity的16行
這樣我們的問題就一下子找到了
而如果集成了騰訊Bugly的話,他輸出的日志就比較詳細了,那具體是怎樣的輸出,我們現在就來集成一下把!
四.集成騰訊Bugly
Bugly官網:http://bugly.qq.com/要集成Bugly,肯定要去Bugly的官網
http://bugly.qq.com/androidfast當然,Bugly的集成還是相對來說比較簡單的,我們只要按照他的官方文檔來
首先要做的,就是下載SDK了(如果你添加依賴的話,就不需要下載)
下載之後,我們可以看到他裡面包含著四個文件
我們可以根據他們的接入指南來,因為我們是android studio開發,所以我把流程走一遍
在Module的build.gradle文件中添加依賴和屬性配置:
dependencies { compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新版本號,也可以指定明確的版本號,例如2.1.5 }
這裡要注意了,Bugly還提供了ndk動態庫,我們如果要看C的日志可以使用
如果你集成了這些的話,你在Module的build.gradle文件中添加依賴和屬性配置:
android { defaultConfig { ndk { // 設置支持的SO庫架構 abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' } } } dependencies { compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新版本號,也可以指定明確的版本號,例如2.1.5 compile 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新版本號,也可以指定明確的版本號,例如2.2.0 }
可以參考官方提供的這張圖
注意:自動集成時會自動包含Bugly SO庫,建議在Module的build.gradle文件中使用NDK的“abiFilter”配置,設置支持的SO庫架構。
如果在添加“abiFilter”之後Android Studio出現以下提示:NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
則在項目根目錄的gradle.properties文件中添加:
android.useDeprecatedNdk=true
接著你就可以添加他所需要的一些權限了
好,現在我們需要去注冊一個APP了,進入你的後陽台選擇注冊app
注冊成功之後就可以看到全貌了,並且可以看到appid了,我們需要這個id
現在我們拿到了APPID:900033301,那我們可以去初始化了,建議是在Application中,所以我新建一個Application,並在清單文件,Application的根節點添加name屬性
package com.lgl.androidcrash; import android.app.Application; import com.tencent.bugly.crashreport.CrashReport; /** * Application初始化 * Created by LGL on 2016/6/10. */ public class CrashApplication extends Application { //初始化 @Override public void onCreate() { super.onCreate(); //是否調試 CrashReport.initCrashReport(getApplicationContext(), "900033301", false); } }
到這裡,Bugly的配置基本上是OK的,我們可以引起一個bug,然後日志過濾一下
便可以看到
當然,你也可以去Bugly的後台查看
我們可以查看詳情
分析的很透徹,我們很容易就找到問題的所在了
在android項目的開發中,有時為了實現和用戶更好的交互,在通知欄這一小小的旮旯裡,我們通常需要將內容豐富起來,這個時候我們就需要去實現自定義的通知欄,例如下面360或
一、基本知識點其實要完成這個功能很簡單:1、MainActivitystartActivityForResult(intent, 100);//第二個是請求碼@Overr
在android開發中會經常遇到滑動沖突(比如ScrollView或是SliddingMenu與ListView的嵌套)的問題,需要我們深入的了解android事件響應
最近也是剛好項目用到,於是就動手寫了一個Android 圖片選擇器的庫。支持圖庫多選/單選/圖片裁剪/拍照/自定義圖片加載庫,極大程度的簡化使用。截圖優點1、通過實現Im