年终小盘点:这十八个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)下的模糊效果去除
十八、屏幕四周圆角方案

想看以往学习内容的朋友
可以看我的GitHub:https://github.com/Meng997998/AndroidJX

一、查看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 注意事项

  1. 只开?Android Log(参考十一、SPRD平台 只开Android log方法
  2. 进入DEBUG&Log界面,system info->?Power Log;
  3. 打开PowerGuru logwakelock log
  4. 重启设备。
  5. 使用下面命令,复位一下battery history
adb shell dumpsys batterystats --enable full-wake-historyadb shell dumpsys batterystats --reset
  1. 测试完成后,使用下面命令,抓取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 开机向导欢迎语

孟加拉语开机向导欢迎语不对,客户要求去掉开机向导界面欢迎语方法。

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: [email protected] {                ... ...                sprd,ip = "dpu-lite-r1p0";                sprd,soc = "pike2";                                // 15 表示圆角的弧度                sprd,corner-radius = <15>;                /* output port */                port {                    dispc0_out: [email protected] {                        remote-endpoint = <&dsi0_in>;                    };                };            };... ...}

最后

######第一次看文章的朋友可以关注我和我的专栏,会不定期发布大厂面试题、Android架构技术知识点及解析等内容,还有学习PDF+源码笔记+面试文档+进阶视频分享

更多精彩学习内容就在 Android架构师学习资料大全

原文地址:https://blog.51cto.com/14606040/2465104

时间: 2024-10-23 13:52:57

年终小盘点:这十八个Android开发必备知识点,你都知道吗?的相关文章

十八、Android引导界面

一.所需素材 很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import an

Android 开发必备

Android 开发必备 http://www.androiddevtools.cn/ 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. http://wear.techbrood.com Android developer 最新国内镜像:http://wear.techbrood.com,包含Android最新文档以及Android Wear,Android TV,Android Auto各个子领域方面

RecyclerView的使用(Android开发必备,替换掉ListView)

RecyclerView的使用(Android开发必备,替换掉ListView) 当有人看了你写的代码,说你现在还在使用ListView?是不是感觉快跟不上时代了啊!不错,今天就带给大家一个ListView的最新升级控件RecyclerView,Android 5.0推出的新控件,不过它在support-v7包,可以往下兼容,当你学会了RecyclerView之后,发现了它的强大,你就会替换到ListView和GridView了.    RecyclerView简介:          Recy

走进小作坊(十八)----活法

    前些日子一篇文章中对国子监评价极高,乐帝与朋友相约周末游玩,前一日遍搜国子监可玩之地,不成想搜出汪曾祺的一篇散文<国子监>,文中提到:     然而辟雍殿确实是个美丽的.独特的建筑.北京有名的建筑,除了天安门.天坛祈年殿那个蓝色的圆顶.九梁十八柱的故宫角楼,应该数到这顶四方的大花轿.     看到如此评价,乐帝更要一探究竟.国子监与雍和宫.地坛公园都相距不远,国子监与孔庙相依而建.孔庙中并排四列碑亭,多是乾隆皇帝所立,与朋友谈及乾隆与雍正帝活法的差异,增添了一份抱负与机遇的复杂感情.

Android学习指南之三十八:Android手势操作编程[转]

手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢? 手势操作原理 首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象. 3. 通过GestureDetector(手势识别器)转发次MotionEvent对

八年Android开发,从码农到架构师分享我的技术成长之路

前言 移动研发火热不停,越来越多人开始学习android开发.但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容.市面上也多是谈论知识图谱,缺少体系和成长节奏感,特此编写一份android研发进阶之路,希望能对大家有所帮助. 这篇文章里,我们只谈技术,不谈软技能. 在这里我把攻城狮分成初级.中级.高级和资深四个阶段,分别对研发设计能力.工具使用.系统原理和架构等作出要求. 初级 我对初级研发攻城狮的定义是掌握基础的android知识,能够独立完成

【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试

1.Hello, Kotlin Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 1.1 Kotlin的身世 写了许久Java,有没有发现其实你写了太多冗余的代码? 后来你体验了一下Python,有没有觉得不写分号的感觉真是超级爽? 你虽然勤勤恳恳,可到头来却被NullPointerException折磨的死去活来,难道就没有受够这种日子么? 直到有一天你发现自己已经写了好几十万行代

Android开发必备的21个免费资源和工具

转载自: http://blog.csdn.net/shimiso/article/details/6788375 Android移动开发平台现在不是一个“火”字能形容的,今年Android平台在市场占有率上相比去年取得的886%增长!如果我只看增长率,iPhone据统计才有61%的增长.而创造了山寨概念的联发科也在近期宣布将进军Android.这些事实可以给你关于两个平台流行度的印像,但是事实上,这些数据告诉了智能机开发员的谁才是真正的赢家.在时下,智能机越来越流行,因此成为一个快速增长的An

Android开发必备技能——修改debug签名

前言 从事Android开发的小伙伴们,想必都会遇到这样的问题.当你的应用中需要集成百度地图.极光推送等第三方平台时,会去申请一个叫做AppKey的东西.与此同时,你得提供下应用签名信息的MD5或SHA1.然后就悲催的发现,只有用指定的签名文件打包时,该功能才能正常使用.如果你用的是开发工具的debug keystore签名信息,直接run一下就好,如果你用的是APP发布时候的keystore,每次测试时都得export 一个apk.心中一万只草泥马在奔腾的有木有? 楼主之前的小伎俩就是,去申请