這篇文章主要介紹“Android開發必備知識點有哪些”,在日常操作中,相信很多人在Android開發必備知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android開發必備知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
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.點擊四次快捷操作
連續點擊屏幕四角(左上-->右上-->右下-->左下),既可跳過開機向導。
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
跳過開機向導 后 又想重新走開機向導,可以嘗試以下命令。
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
打開開機向導調試Log
方式如下:
adb shell setprop log.tag.SetupWizard VERBOSE
在代碼中跳過開機向導的方法如下:
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--------"); } }
adb logcat | findstr Displayed
或者直接抓取 adb Log, 然后搜索關鍵字 Displayed
APP 冷啟動時間統計
adb Log 中搜索關鍵字Display
測試 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
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);
首先我們需要抓到dumpsys log,然后將所有的systemcore* 文件 追加到一個文件中。
cat systemcore* > all
將sysdump 所有文件 追加到一個文件中
使用 crash_arm 命令對 dump 文件進行解析
32位系統使用如下:./crash_arm vmlinux all -m phys_base=0x80000000
64位系統使用如下命令:./crash_arm64 vmlinux all -m phys_offset=0x80000000
成功解析dump后解析log方法log > log.txt
使用 log 命令 讀取log 到指定文件
修改 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
public boolean isMonkeyRunning() { return ActivityManager.isUserAMonkey(); }
修改以下路徑下配置的屬性值既可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
輸入暗碼 *#*#3646633#*#*
,進入MTK Logger
界面,右上角打開Logger Setting
,手動關閉除Moblie Log
之外的開關。
關閉方法請看下圖:
mtk 平臺開啟 Mobile log 參考圖
輸入暗碼 *#*#83781#*#*
,進入SPRD Logger
界面,右上角打開Settings
, 點擊Custom scene
,關閉除Android log
之外的開關,關閉方法請看下圖。
SPRD 平臺開啟 Android 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
都提供出來。
獲取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; }
孟加拉語開機向導歡迎語不對,客戶要求去掉開機向導界面歡迎語方法。
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){ // 給管理員用戶 進行操作}
Android GO 版本下,為了兼容系統性能,犧牲部分UI體驗,比如 最近任務列表模糊,Settings 界面加載由模糊到清晰,Launcher 圖標加載由模糊到清晰,但是這個很影響用戶體驗,個人認為不太好,去掉模糊效果的方案如下:
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開發必備知識點有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。