ANDROID 開發(fā)中的一些小方法

本文鏈接:[https://www.freesion.com/article/4536437394/)

和你一起終身學(xué)習(xí),這里是程序員 Android

本篇文章主要介紹 Android 開發(fā)中的部分知識(shí)點(diǎn),通過閱讀本篇文章,您將收獲以下內(nèi)容:

一、查看CPU溫度
二、開機(jī)向?qū)д{(diào)試相關(guān)方法
三、查看APP啟動(dòng)時(shí)間
四、判斷 user,userdebug 版本的方法
五、修改截屏默認(rèn)存儲(chǔ)路徑
六、解析 kernel dump 方法
七、SPRD 默認(rèn)打開 Ylog 以及dumpsys enable方法
八、判斷是否正在 monkey 測(cè)試的方法
九、修改MTK log 模式的方法
十、MTK平臺(tái)只開Mobile log方法
十一、SPRD平臺(tái) 只開Android log方法
十二、SPRD平臺(tái)功耗 Log 注意事項(xiàng)
十三、獲取Top Activity 包名
十四、 修改Google 開機(jī)向?qū)g迎語
十五、修改狀態(tài)欄 時(shí)間顯示秒
十六、判斷多用戶方法

一、查看CPU 溫度

  • 1.使用ADB 查看CPU溫度(debug版本)

查看CPU命令如下:

adb shell cat /sys/class/thermal/thermal_zone*/temp
  • 2.查看CPU 返回內(nèi)容對(duì)應(yīng)分類信息
adb shell cat /sys/class/thermal/thermal_zone*/type

[圖片上傳失敗...(image-1175d1-1693361440858)]

CPU 溫度查看命令方法

由此查看的 CPU 溫度包含小數(shù)點(diǎn)后三位,小數(shù)點(diǎn)省去,此方法適用于MTK 平臺(tái)。

  • 3.MTK log 中查看CPU 溫度

kernel log中 搜索關(guān)鍵字 T_AP 查看CPU 溫度。

[圖片上傳失敗...(image-5ccc32-1693361440858)]

kernel log中 搜索 T_AP查看CPU 溫度

二、 開機(jī)向?qū)д{(diào)試相關(guān)方法

1.DEBUG 版本跳過開機(jī)向?qū)Х桨?/h2>
  • 1.點(diǎn)擊四次快捷操作
    連續(xù)點(diǎn)擊屏幕四角(左上-->右上-->右下-->左下),既可跳過開機(jī)向?qū)А?/p>

  • 2.adb 命令disable 開機(jī)向?qū)?/p>

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 重啟 開機(jī)向?qū)Х桨?/h2>

跳過開機(jī)向?qū)?后 又想重新走開機(jī)向?qū)?,可以嘗試以下命令。

  • 1.將開機(jī)向?qū)?完成后設(shè)置的值復(fù)位

命令如下:

adb shell settings put secure user_setup_complete 0adb shell settings put global device_provisioned 0
  • 2.設(shè)置開機(jī)向?qū)Э捎?,并啟?dòng)

過完開機(jī)向?qū)Ш螅瑫?huì)設(shè)置開機(jī)向?qū)?code>apk不可用。
此時(shí)我們應(yīng)該設(shè)置開機(jī)向?qū)?code>enble狀態(tài)。

adb shell pm enable com.google.android.setupwizard/.SetupWizardActivityadb shell am start -n com.google.android.setupwizard/.SetupWizardActivity

3. 開機(jī)向?qū)?LOG 調(diào)試

打開開機(jī)向?qū)д{(diào)試Log方式如下:

adb shell setprop log.tag.SetupWizard VERBOSE

4. 代碼中跳過開機(jī)向?qū)У姆椒?/h2>

在代碼中跳過開機(jī)向?qū)У姆椒ㄈ缦拢?/p>

        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啟動(dòng)時(shí)間

1.使用ADB 命令抓LOG 查看

adb logcat | findstr Displayed
或者直接抓取 adb Log, 然后搜索關(guān)鍵字 Displayed

[圖片上傳失敗...(image-d0a9e8-1693361440858)]

APP 冷啟動(dòng)時(shí)間統(tǒng)計(jì)

[圖片上傳失敗...(image-85e49c-1693361440858)]

adb Log 中搜索關(guān)鍵字Display

2.查看多次 APP 冷啟動(dòng)的方法

測(cè)試 10次 Chrome 冷啟動(dòng)的方法如下:
adb shell am start -S -R10 -W com.android.chrome/com.google.android.apps.chrome.Main

測(cè)試結(jié)果如下:

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 發(fā)現(xiàn),這些是對(duì)外部apk 隱藏的方法,只有系統(tǒng)平臺(tái) 簽名的應(yīng)用才可以使用。

    /** {@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);

五、修改截屏默認(rèn)存儲(chǔ)路徑

/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 文件追加到一個(gè)文件中

首先我們需要抓到dumpsys log,然后將所有的systemcore* 文件 追加到一個(gè)文件中。

cat systemcore* > all

[圖片上傳失敗...(image-4f4336-1693361440858)]

將sysdump 所有文件 追加到一個(gè)文件中

2. 使用對(duì)應(yīng)版本的VMLINUX 解析DUMP文件

使用 crash_arm 命令對(duì) dump 文件進(jìn)行解析

  • 32位系統(tǒng)使用如下:
    ./crash_arm vmlinux all -m phys_base=0x80000000

  • 64位系統(tǒng)使用如下命令:
    ./crash_arm64 vmlinux all -m phys_offset=0x80000000

3.解析成功后進(jìn)行調(diào)試

成功解析dump后解析log方法
log > log.txt

[圖片上傳失敗...(image-ccaf37-1693361440858)]

使用 log 命令 讀取log 到指定文件

七、SPRD 默認(rèn)打開 YLOG 以及DUMPSYS ENABLE方法

修改 device\sprd\xxxx\common\rootdir\root\init.common.rc
on post-fs-data 中添加如下內(nèi)容:

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 測(cè)試的方法

    public boolean isMonkeyRunning() {        return ActivityManager.isUserAMonkey();    }

九、修改MTK LOG 模式的方法

修改以下路徑下配置的屬性值既可alps\device\mediatek\common\mtklog
false 改為true就可以打開對(duì)應(yīng)的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平臺(tái) 只開MOBILE LOG方法

輸入暗碼 *#*#3646633#*#*,進(jìn)入MTK Logger 界面,右上角打開Logger Setting,手動(dòng)關(guān)閉除Moblie Log之外的開關(guān)。

關(guān)閉方法請(qǐng)看下圖:

[圖片上傳失敗...(image-9b4251-1693361440858)]

mtk 平臺(tái)開啟 Mobile log 參考圖

十一、SPRD平臺(tái) 只開ANDROID LOG方法

輸入暗碼 *#*#83781#*#*,進(jìn)入SPRD Logger 界面,右上角打開Settings, 點(diǎn)擊Custom scene,關(guān)閉除Android log之外的開關(guān),關(guān)閉方法請(qǐng)看下圖。

[圖片上傳失敗...(image-88cbb4-1693361440858)]

SPRD 平臺(tái)開啟 Android log 參考圖

十二、SPRD 平臺(tái)功耗 LOG 注意事項(xiàng)

  1. 只開 Android Log(參考十一、SPRD平臺(tái) 只開Android log方法

  2. 進(jìn)入DEBUG&Log界面,system info-> Power Log;

  3. 打開PowerGuru logwakelock log

  4. 重啟設(shè)備。

  5. 使用下面命令,復(fù)位一下battery history

adb shell dumpsys batterystats --enable full-wake-historyadb shell dumpsys batterystats --reset
  1. 測(cè)試完成后,使用下面命令,抓取bugreport
adb rootadb bugreport > bugreport.zip
  1. 最后將andorid logbugreport.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 開機(jī)向?qū)g迎語

孟加拉語開機(jī)向?qū)g迎語不對(duì),客戶要求去掉開機(jī)向?qū)Ы缑鏆g迎語方法。

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);         ... ...          }... ...}

十五、修改狀態(tài)欄 時(shí)間顯示秒

展訊平臺(tái)修改狀態(tài)欄 時(shí)間顯示秒方法如下

adb shell pm enable com.android.systemui/com.android.systemui.tuner.TunerActivityadb shell am start -n com.android.systemui/com.android.systemui.tuner.TunerActivity

進(jìn)入設(shè)置--系統(tǒng)--界面界面調(diào)諧器--狀態(tài)欄--時(shí)間--顯示時(shí)分秒。

十六、判斷多用戶方法

判斷多用戶方法如下:

// import android.os.UserHandle;if(UserHandle.myUserId() != UserHandle.USER_OWNER){   // 給管理員用戶 進(jìn)行操作}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容