年終小盤點:這十八個Android開發必備知識點,你都知道嗎?
本篇文章主要介紹 Android 開發中的部分知識點,透過閱讀本篇文章,您將收穫以下內容:
一、檢視CPU溫度
二、開機嚮導除錯相關方法
三、檢視APP啟動時間
四、判斷 user,userdebug 版本的方法
五、修改截圖預設儲存路徑
六、解析 kernel dump 方法
七、SPRD 預設開啟 Ylog 以及dumpsys enable方法
八、判斷是否正在 monkey 測試的方法
九、修改MTK log 模式的方法
十、MTK平臺只開Mobile log方法
十一、SPRD平臺 只開Android log方法
十二、SPRD平臺功耗 Log 注意事項
十三、獲取Top Activity 包名
十四、 修改Google 開機嚮導歡迎語
十五、修改狀態列 時間顯示秒
十六、判斷多使用者方法
十七、低RAM(1G)下的模糊效果去除
十八、螢幕四周圓角方案
一、檢視CPU 溫度
- 1.使用ADB 檢視CPU溫度(debug版本)
檢視CPU命令如下:
adb shell cat /sys/class/thermal/thermal_zone*/temp
- 2.檢視CPU 返回內容對應分類資訊
adb shell cat /sys/class/thermal/thermal_zone*/type
CPU 溫度檢視命令方法
由此檢視的 CPU 溫度包含小數點後三位,小數點省去,此方法適用於MTK 平臺。
- 3.MTK log 中檢視CPU 溫度
kernel log中 搜尋關鍵字 T_AP 檢視CPU 溫度。
二、 開機嚮導除錯相關方法
1.debug 版本跳過開機嚮導方案
-
1.點選四次快捷操作
連續點選螢幕四角(左上-->右上-->右下-->左下),既可跳過開機嚮導。 -
2.adb 命令disable 開機嚮導
adb shell settings put secure user_setup_complete 1adb shell settings put global device_provisioned 1adb shell pm disable com.google.android.setupwizard/.SetupWizardActivity
2.debug 重啟 開機嚮導方案
跳過開機嚮導 後 又想重新走開機嚮導,可以嘗試以下命令。
- 1.將開機嚮導 完成後設定的值復位
命令如下:
adb shell settings put secure user_setup_complete 0adb shell settings put global device_provisioned 0
- 2.設定開機嚮導可用,並啟動
過完開機嚮導後,會設定開機嚮導
apk
不可用。
此時我們應該設定開機嚮導為
enble
狀態。
adb shell pm enable com.google.android.setupwizard/.SetupWizardActivityadb shell am start -n com.google.android.setupwizard/.SetupWizardActivity
3. 開機嚮導 log 除錯
開啟開機嚮導除錯
Log
方式如下:
adb shell setprop log.tag.SetupWizard VERBOSE
4. 程式碼中跳過開機嚮導的方法
在程式碼中跳過開機嚮導的方法如下:
private void SkipSetupwizard(){ ActivityManager activityAanager = (ActivityManager) mContext .getSystemService(Context.ACTIVITY_SERVICE); ComponentName cn = activityAanager.getRunningTasks(1).get(0).topActivity; String pName = cn.getPackageName(); if("com.google.android.setupwizard".equals(pName)) { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1); activityAanager.forceStopPackage("com.google.android.setupwizard"); Log.i("wjwj","----------skip com.google.android.setupwizard--------"); } }
三、檢視APP啟動時間
1.使用adb 命令抓log 檢視
adb logcat | findstr Displayed
或者直接抓取 adb Log, 然後搜尋關鍵字 Displayed
APP 冷啟動時間統計
adb Log 中搜尋關鍵字Display
2.檢視多次 app 冷啟動的方法
測試 10次 Chrome 冷啟動的方法如下:
adb shell am start -S -R10 -W com.android.chrome/com.google.android.apps.chrome.Main
測試結果如下:
C:\Users\Administrator>adb shell am start -S -R10 -W com.android.chrome/com.google.android.apps.chrome.MainStopping: com.android.chromeStarting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.chrome/com.google.android.apps.chrome.Main }Status: okActivity: com.android.chrome/org.chromium.chrome.browser.firstrun.FirstRunActivityTotalTime: 1514WaitTime: 1525CompleteStopping: com.android.chromeStarting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.android.chrome/com.google.android.apps.chrome.Main }Status: okActivity: com.android.chrome/org.chromium.chrome.browser.firstrun.FirstRunActivityTotalTime: 534WaitTime: 549Complete
四、判斷 user ,userdebug 版本的方法
private static final boolean USER_BUILD = android.os.Build.IS_USER;
檢視 Build.java 發現,這些是對外部apk 隱藏的方法,只有系統平臺 簽名的應用才可以使用。
/** {@hide} */ public static final boolean IS_ENG = "eng".equals(TYPE); /** {@hide} */ public static final boolean IS_USERDEBUG = "userdebug".equals(TYPE); /** {@hide} */ public static final boolean IS_USER = "user".equals(TYPE);
五、修改截圖預設儲存路徑
/frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
// import com.mediatek.storage.StorageManagerEx; String defaultWritePath = StorageManagerEx.getDefaultPath()+File.separator+"Pictures"; mScreenshotDir = new File(defaultWritePath, SCREENSHOTS_DIR_NAME);
六、解析 kernel dump 方法
1.將所有的systemdump 檔案追加到一個檔案中
首先我們需要抓到dumpsys log,然後將所有的systemcore* 檔案 追加到一個檔案中。
cat systemcore* > all
將sysdump 所有檔案 追加到一個檔案中
2. 使用對應版本的vmlinux 解析dump檔案
使用 crash_arm 命令對 dump 檔案進行解析
-
32位系統使用如下:
./crash_arm vmlinux all -m phys_base=0x80000000
-
64位系統使用如下命令:
./crash_arm64 vmlinux all -m phys_offset=0x80000000
3.解析成功後進行除錯
成功解析dump後解析log方法
log > log.txt
使用 log 命令 讀取log 到指定檔案
七、SPRD 預設開啟 Ylog 以及dumpsys enable方法
修改
device\sprd\xxxx\common\rootdir\root\init.common.rc
在
on post-fs-data
中新增如下內容:
on post-fs-data ..... setprop persist.ylog.enabled 1//增加這一句用於開啟ylog setprop debug.sysdump.enabled true //增加這一句用於開啟sysdump setprop persist.sys.eng.reset 1 //再增加這一句 start ylog
八、判斷是否正在 monkey 測試的方法
public boolean isMonkeyRunning() { return ActivityManager.isUserAMonkey(); }
九、修改MTK log 模式的方法
修改以下路徑下配置的屬性值既可
alps\device\mediatek\common\mtklog
將
false
改為
true
就可以開啟對應的log
mtklog_path = internal_sdcom.mediatek.log.mobile.enabled = falsecom.mediatek.log.mobile.maxsize = 500com.mediatek.log.mobile.totalmaxsize = 1000com.mediatek.log.modem.enabled = falsecom.mediatek.log.modem.maxsize = 2000com.mediatek.log.net.enabled = falsecom.mediatek.log.net.maxsize = 600com.mediatek.log.gps.enabled = false
十、MTK平臺 只開Mobile log方法
輸入暗碼
*#*#3646633#*#*
,進入
MTK Logger
介面,右上角開啟
Logger Setting
,手動關閉除
Moblie Log
之外的開關。
關閉方法請看下圖:
mtk 平臺開啟 Mobile log 參考圖
十一、SPRD平臺 只開Android log方法
輸入暗碼
*#*#83781#*#*
,進入
SPRD Logger
介面,右上角開啟
Settings
, 點選
Custom scene
,關閉除
Android log
之外的開關,關閉方法請看下圖。
SPRD 平臺開啟 Android log 參考圖
十二、SPRD 平臺功耗 Log 注意事項
-
只開 Android Log(
參考十一、SPRD平臺 只開Android log方法
) -
進入
DEBUG&Log
介面,system info
->Power Log
; -
開啟
PowerGuru log
和wakelock log
; -
重啟裝置。
-
使用下面命令,復位一下
battery history
adb shell dumpsys batterystats --enable full-wake-historyadb shell dumpsys batterystats --reset
- 測試完成後,使用下面命令,抓取
bugreport
adb rootadb bugreport > bugreport.zip
- 最後將
andorid log
和bugreport.zip
都提供出來。
十三、獲取Top Activity 包名
獲取Activity Top的方法如下:
//import android.app.ActivityManager;//import android.app.ActivityManager.RunningTaskInfo;//import android.content.ComponentName;//import java.util.List;// 獲取top Activity apk public String getTopActivityPackageName(Context context) { String topActivityPackage = null; ActivityManager activityManager = (ActivityManager) (context .getSystemService(android.content.Context.ACTIVITY_SERVICE)); List<RunningTaskInfo> runningTaskInfos = activityManager .getRunningTasks(1); if (runningTaskInfos != null) { ComponentName f = runningTaskInfos.get(0).topActivity; topActivityPackage = f.getPackageName(); //Slog.e("wangjie", "------topActivityPackage---------"+topActivityPackage); } return topActivityPackage; }
十四、 修改Google 開機嚮導歡迎語
孟加拉語開機嚮導歡迎語不對,客戶要求去掉開機嚮導介面歡迎語方法。
idh.code/frameworks/base/core/java/android/widget/TextView.java
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {... ... public void setTextLocale(@NonNull Locale locale) {+ // add for Bangla language+ if (getContext().getClass().getName().equals("com.google.android.setupwizard.user.WelcomeActivity") &&+ locale.getLanguage().equals("bn") && locale.getCountry().equals("BD"))+ {+ Log.i(LOG_TAG, "find text:" + getText());+ if (!getText().equals("") && !getText().toString().contains("("))+ Log.i(LOG_TAG, "set text:" + getText());+ setText("");+ }+ // add for Bangla language mLocalesChanged = true; mTextPaint.setTextLocale(locale); ... ... }... ...}
十五、修改狀態列 時間顯示秒
展訊平臺修改狀態列 時間顯示秒方法如下
adb shell pm enable com.android.systemui/com.android.systemui.tuner.TunerActivityadb shell am start -n com.android.systemui/com.android.systemui.tuner.TunerActivity
進入設定--系統--介面介面調諧器--狀態列--時間--顯示時分秒。
十六、判斷多使用者方法
判斷多使用者方法如下:
// import android.os.UserHandle;if(UserHandle.myUserId() != UserHandle.USER_OWNER){ // 給管理員使用者 進行操作}
十七、低RAM(1G)下的模糊效果去除
Android GO 版本下,為了相容系統效能,犧牲部分UI體驗,比如 最近任務列表模糊,Settings 介面載入由模糊到清晰,Launcher 圖示載入由模糊到清晰,但是這個很影響使用者體驗,個人認為不太好,去掉模糊效果的方案如下:
1.需要修改的檔案如下:
frameworks/base/services/core/java/com/android/server/wm/AppWindowContainerController.java frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
- 1.AppWindowContainerController 修改方法
在AppWindowContainerController.java 類中,請註釋掉scheduleAddStartingWindow方法實現。
public class AppWindowContainerController extends WindowContainerController<AppWindowToken, AppWindowContainerListener> {... ...// 註釋掉該方法 void scheduleAddStartingWindow() { // Note: we really want to do sendMessageAtFrontOfQueue() because we // want to process the message ASAP, before any other queued // messages. /*** if (!mService.mAnimationHandler.hasCallbacks(mAddStartingWindow)) { mContainer.startingAdding = true; if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Enqueueing ADD_STARTING"); mService.mAnimationHandler.postAtFrontOfQueue(mAddStartingWindow); } ***/ }... ...}
- 2.TaskSnapshotController 修改方法
將系統手動設定為非低記憶體裝置,比如將isLowRamDevice =false狀態。
class TaskSnapshotController {... ...// 將系統手動設定為非低記憶體裝置 final boolean isLowRamDevice = false; //final boolean isLowRamDevice = ActivityManager.isLowRamDeviceStatic();... ...
- 3.TaskSnapshotPersister 修改方法
在TaskSnapshotPersister 類中,將DISABLE_FULL_SIZED_BITMAPS狀態設定為false。
class TaskSnapshotPersister {... ...// 將DISABLE_FULL_SIZED_BITMAPS狀態設定為false。 static final boolean DISABLE_FULL_SIZED_BITMAPS = false;//static final boolean DISABLE_FULL_SIZED_BITMAPS = ActivityManager.isLowRamDeviceStatic();... ...}
十八、螢幕四周圓角方案
SPRD螢幕四周圓角方案需要修改***.dtsi 檔案。
以sc7731e.dtsi 為例,需要修改的檔案路徑為
kernel4.4/arch/arm/boot/dts/sc7731e.dtsi
,其中
15
表示圓角的弧度,預設直角90度
修改方法如下:
soc: soc { ap-ahb { dispc0: dispc@20800000 { ... ... sprd,ip = "dpu-lite-r1p0"; sprd,soc = "pike2"; // 15 表示圓角的弧度 sprd,corner-radius = <15>; /* output port */ port { dispc0_out: endpoint@0 { remote-endpoint = <&dsi0_in>; }; }; };... ...}
最後
第一次看文章的朋友可以關注我和我的專欄,會不定期釋出大廠面試題、Android架構技術知識點及解析等內容,還有學習PDF+原始碼筆記+面試文件+進階影片分享
更多精彩學習內容就在 Android架構師學習資料大全
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2672365/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 面試官帶你學Android——面試中Handler 這些必備知識點你都知道嗎?面試Android
- 這 20 多個高併發程式設計必備的知識點,你都會嗎?程式設計
- 關於JVM,你必須知道的這些知識點JVM
- 這些必會的計算機網路知識點你都掌握了嗎計算機網路
- 這三個關於Python包匯入的知識點你知道嗎Python
- 這三個關於Python包匯入的知識點你知道嗎?Python
- css必備知識點CSS
- 必備知識點 模版
- 必備知識點 路由路由
- 前端必備知識點—SVG前端SVG
- 必備知識點 檢視
- 關於Mysql事務,你必須知道的幾個知識點!MySql
- Hybrid App 應用開發中 5 個必備知識點複習APP
- Vue開發者必會的基礎知識盤點Vue
- linux嵌入式程式設計開發必備知識,這些你都要知道Linux程式設計
- Nacos必知必會:這些知識點你一定要掌握!
- 盤點 Java 開發 2020 年發生的幾件大事,你必須得知道!Java
- 必備知識點 模型層ORM模型ORM
- Redis 面試必備知識點Redis面試
- 軟體工程師必須知道20個知識點你瞭解多少?軟體工程工程師
- 微服務開發,這10個點你要知道微服務
- Python入門必須知道的11個知識點Python
- 初學Python必須知道的11個知識點!Python
- 學習筆記:Android這四個你不可不知的知識點,你都瞭解多少?筆記Android
- Netty中的這些知識點,你需要知道!Netty
- Android —— 自定義View中,你應該知道的知識點AndroidView
- 初識python你應該知道的6個知識點!Python
- 這些喜聞樂見的Java面試知識點,你都掌握了嗎?Java面試
- Android 之 Notification 必須掌握知識點Android
- 你所不知道的js的小知識點(1)JS
- 你知道嗎?一個好的ERP系統需要具備這些特點
- 初識python必知的6個知識點Python
- 好程式設計師大資料技術盤點 你都知道嗎程式設計師大資料
- 這幾個好用的Python開源框架,你都知道嗎?Python框架
- 千萬淘寶店運營必備知識,你必須知道!
- 華為雲GaussDB(DWS)記憶體知識點,你知道嗎?記憶體
- Python入門必備知識點總結Python
- 關於Flutter 您必須知道的知識點!!!Flutter