如果我們想要待分析的App盡可能接近真實情況璧瞬,那么必須要在非Debug的App中能啟用systrace功能;因為相同情況下Debug的App性能比非Debuggable的差嗤朴,你無法確保在debuggable版本上分析出來的結(jié)論能準(zhǔn)確推廣到非debuggable的版本上娱仔。
分析systrace源碼之后 沐飘,發(fā)現(xiàn)這個條件只是個障眼法而已;我們可以手動開啟App的自定義Label的Trace功能牲迫,方法也很簡單耐朴,調(diào)用一個函數(shù)即可;但是這個函數(shù)是SDK @hide的盹憎,我們需要反射調(diào)用:
Class<?> trace = Class.forName("android.os.Trace");
Method setAppTracingAllowed = trace.getDeclaredMethod("setAppTracingAllowed", boolean.class);
setAppTracingAllowed.invoke(null, true);
把這段代碼放在Application的attachBaseContext
中筛峭,這樣就可以手動開啟App自定義Label的Trace功能,在非debuggable的版本中也適用陪每!
來源:https://zhuanlan.zhihu.com/p/27331842