拒当电瓶车小白鼠 發表於 2019-11-28 18:36:00

Android 开发中的一些小方法

<div id="js_content">
<p>和你一起终身学习,这里是程序员 Android</p>
<p>本篇文章主要介绍&nbsp;<code>Android</code>&nbsp;开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:</p>
<blockquote>
<p>一、查看CPU温度<br>二、开机向导调试相关方法<br>三、查看APP启动时间<br>四、判断 user,userdebug 版本的方法<br>五、修改截屏默认存储路径<br>六、解析 kernel dump 方法<br>七、SPRD 默认打开 Ylog 以及dumpsys enable方法<br>八、判断是否正在 monkey 测试的方法<br>九、修改MTK log 模式的方法<br>十、MTK平台只开Mobile log方法<br>十一、SPRD平台 只开Android log方法<br>十二、SPRD平台功耗 Log 注意事项<br>十三、获取Top Activity 包名<br>十四、 修改Google 开机向导欢迎语<br>十五、修改状态栏 时间显示秒<br>十六、判断多用户方法</p>
</blockquote>
<h1>一、查看CPU 温度</h1>
<ul><li><p>1.使用ADB 查看CPU温度(debug版本)</p></li></ul>
<p>查看CPU命令如下:</p>
<pre class="has"><code class="language-go"><code>adb shell cat /sys/class/thermal/thermal_zone*/temp<br></code></code></pre>
<ul><li><p>2.查看CPU 返回内容对应分类信息</p></li></ul>
<pre class="has"><code class="language-go"><code>adb shell cat /sys/class/thermal/thermal_zone*/type<br></code></code></pre>
<p style="text-align: center"><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYdFBpY1VNRnE5bzl1TU5QVUdzZHE2bEpkenZ3OThjaWN5UWljc01ad09xMGljaWNpYzhBQldsdGxWOWdnLzY0MD93eF9mbXQ9b3RoZXI?x-oss-process=image/format,png"></p>
<p style="text-align: center">CPU 温度查看命令方法</p>
<p>由此查看的 CPU 温度包含小数点后三位,小数点省去,此方法适用于MTK 平台。</p>
<ul><li><p>3.MTK log 中查看CPU 温度</p></li></ul>
<p>kernel log中 搜索关键字&nbsp;T_AP&nbsp;查看CPU 温度。</p>
<p><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYR3NQc1pTaHZxZU85STVhbWdleGxDWGlicFF4QVMxakZ4bXdHNk1zdmhSOHF5RjRvU2lhWExmV3cvNjQwP3d4X2ZtdD1vdGhlcg?x-oss-process=image/format,png"></p>
<p>kernel log中 搜索 T_AP查看CPU 温度</p>
<h1>二、 开机向导调试相关方法</h1>
<h2>1.debug 版本跳过开机向导方案</h2>
<ul><li><p>1.点击四次快捷操作<br>连续点击屏幕四角(左上--&gt;右上--&gt;右下--&gt;左下),既可跳过开机向导。</p></li><li><p>2.adb 命令disable 开机向导<br></p></li></ul>
<pre class="has"><code class="language-go"><code>adb shell settings put secure user_setup_complete 1<br>adb shell settings put global device_provisioned 1<br>adb shell pm disable com.google.android.setupwizard/.SetupWizardActivity<br></code></code></pre>
<h2>2.debug 重启 开机向导方案</h2>
<p>跳过开机向导 后 又想重新走开机向导,可以尝试以下命令。</p>
<ul><li><p>1.将开机向导 完成后设置的值复位</p></li></ul>
<p>命令如下:</p>
<pre class="has"><code class="language-go"><code>adb shell settings put secure user_setup_complete 0<br>adb shell settings put global device_provisioned 0<br></code></code></pre>
<ul><li><p>2.设置开机向导可用,并启动<br></p></li></ul>
<p>过完开机向导后,会设置开机向导<code>apk</code>不可用。<br>此时我们应该设置开机向导为<code>enble</code>状态。</p>
<pre class="has"><code class="language-go"><code>adb shell pm enable com.google.android.setupwizard/.SetupWizardActivity<br>adb shell am start -n com.google.android.setupwizard/.SetupWizardActivity<br></code></code></pre>
<h2>3. 开机向导 log 调试</h2>
<p>打开开机向导调试<code>Log</code>方式如下:</p>
<pre class="has"><code class="language-go"><code>adb shell setprop log.tag.SetupWizard VERBOSE<br></code></code></pre>
<h2>4. 代码中跳过开机向导的方法</h2>
<p>在代码中跳过开机向导的方法如下:</p>
<pre class="has"><code class="language-go"><code>      privatevoidSkipSetupwizard(){<br>            ActivityManager activityAanager = (ActivityManager) mContext<br>                .getSystemService(Context.ACTIVITY_SERVICE);<br>            ComponentName cn = activityAanager.getRunningTasks(1).get(0).topActivity;<br>            String pName = cn.getPackageName();<br>            if("com.google.android.setupwizard".equals(pName))<br>            {<br>                Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);<br>                Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);<br>                activityAanager.forceStopPackage("com.google.android.setupwizard");<br>                Log.i("wjwj","----------skip com.google.android.setupwizard--------");<br>            }       <br>      }<br></code></code></pre>
<h1>三、查看APP启动时间</h1>
<h2>1.使用adb 命令抓log 查看</h2>
<p><code>adb logcat | findstr Displayed</code><br>或者直接抓取 adb Log, 然后搜索关键字&nbsp;Displayed</p>
<p style="text-align: center"><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYa3dOaWJLNVBJblhFelVDR21Oa2pQdXFmSEtuNno5Y1BwV1BXNnFpYnZyTTBNMTBkSEJaM2FoYlEvNjQwP3d4X2ZtdD1vdGhlcg?x-oss-process=image/format,png"></p>
<p style="text-align: center">APP 冷启动时间统计</p>
<p style="text-align: center"><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYenlqN0dzamNHeno3YXlYYTI5cE9SWkt6bGo3UEg5bnFHUUJXVjlpYm1CQVNEdTVNSTdLRmtMUS82NDA_d3hfZm10PW90aGVy?x-oss-process=image/format,png"></p>
<p style="text-align: center">adb Log 中搜索关键字Display</p>
<h2>2.查看多次 app 冷启动的方法</h2>
<p>测试 10次 Chrome 冷启动的方法如下:<br><code>adb shell am start -S -R10 -W com.android.chrome/com.google.android.apps.chrome.Main</code></p>
<p>测试结果如下:</p>
<pre class="has"><code class="language-go"><code>C:\Users\Administrator&gt;adb shell am start -S -R10 -W com.android.chrome/com.google.android.apps.chrome.Main<br>Stopping: com.android.chrome<br>Starting: Intent { act=android.intent.action.MAIN cat= cmp=com.android.chrome/com.google.android.apps.chrome.Main }<br>Status: ok<br>Activity: com.android.chrome/org.chromium.chrome.browser.firstrun.FirstRunActivity<br>TotalTime: 1514<br>WaitTime: 1525<br>Complete<br>Stopping: com.android.chrome<br>Starting: Intent { act=android.intent.action.MAIN cat= flg=0x10000000 cmp=com.android.chrome/com.google.android.apps.chrome.Main }<br>Status: ok<br>Activity: com.android.chrome/org.chromium.chrome.browser.firstrun.FirstRunActivity<br>TotalTime: 534<br>WaitTime: 549<br>Complete<br></code></code></pre>
<h1>四、判断 user ,userdebug 版本的方法</h1>
<pre class="has"><code class="language-go"><code>private static final boolean USER_BUILD = android.os.Build.IS_USER;<br></code></code></pre>
<p>查看 Build.java 发现,这些是对外部apk 隐藏的方法,只有系统平台 签名的应用才可以使用。</p>
<pre class="has"><code class="language-go"><code>    /** {@hide} */<br>    public static final boolean IS_ENG = "eng".equals(TYPE);<br>    /** {@hide} */<br>    public static final boolean IS_USERDEBUG = "userdebug".equals(TYPE);<br>    /** {@hide} */<br>    public static final boolean IS_USER = "user".equals(TYPE);<br><br></code></code></pre>
<h1>五、修改截屏默认存储路径</h1>
<p><code>/frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java</code></p>
<pre class="has"><code class="language-go"><code>       // import com.mediatek.storage.StorageManagerEx;<br>       String defaultWritePath = StorageManagerEx.getDefaultPath()+File.separator+"Pictures";<br>      mScreenshotDir = new File(defaultWritePath, SCREENSHOTS_DIR_NAME);<br></code></code></pre>
<h1>六、解析 kernel dump 方法</h1>
<h2>1.将所有的systemdump 文件追加到一个文件中</h2>
<p>首先我们需要抓到dumpsys log,然后将所有的systemcore* 文件 追加到一个文件中。</p>
<pre class="has"><code class="language-go"><code>cat systemcore* &gt; all<br></code></code></pre>
<p><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYQ1FtVnlKaWM2Q0RhcDRqaWNmOWtDc250NDhTZGNXTTdkNmRnQ2lhN3NzalVNaWJWaWNaa1RQUXl6ZXcvNjQwP3d4X2ZtdD1vdGhlcg?x-oss-process=image/format,png"></p>
<p>将sysdump 所有文件 追加到一个文件中</p>
<h2>2. 使用对应版本的vmlinux 解析dump文件</h2>
<p>使用 crash_arm 命令对 dump 文件进行解析</p>
<ul><li><p>32位系统使用如下:<br><code>./crash_arm vmlinux all -m phys_base=0x80000000</code></p></li><li><p>64位系统使用如下命令:<br><code>./crash_arm64 vmlinux all -m phys_offset=0x80000000</code></p></li></ul>
<h2>3.解析成功后进行调试</h2>
<p>成功解析dump后解析log方法<br><code>log &gt; log.txt</code></p>
<p><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYOFBpYm9helphcTFMUlRZemR1OUFkZGRCRVltR1J1bjBVVDBkdGljVmVGM1dNSWhodWdPSno4elEvNjQwP3d4X2ZtdD1vdGhlcg?x-oss-process=image/format,png"></p>
<p>使用 log 命令 读取log 到指定文件</p>
<h1>七、SPRD 默认打开 Ylog 以及dumpsys enable方法</h1>
<p>修改&nbsp;<code>device\sprd\xxxx\common\rootdir\root\init.common.rc</code><br>在<code>on post-fs-data</code>&nbsp;中添加如下内容:</p>
<pre class="has"><code class="language-go"><code>on post-fs-data<br>   .....<br>       setprop persist.ylog.enabled 1//增加这一句用于打开ylog<br>       setpropdebug.sysdump.enabledtrue //增加这一句用于打开sysdump<br>       setprop   persist.sys.eng.reset 1 //再增加这一句<br>       start ylog<br></code></code></pre>
<h1>八、判断是否正在 monkey 测试的方法</h1>
<pre class="has"><code class="language-go"><code>    public boolean isMonkeyRunning() {<br>      return ActivityManager.isUserAMonkey();<br>    }<br></code></code></pre>
<h1>九、修改MTK log 模式的方法</h1>
<p>修改以下路径下配置的属性值既可<code>alps\device\mediatek\common\mtklog</code><br>将<code>false</code>&nbsp;改为<code>true</code>就可以打开对应的log</p>
<pre class="has"><code class="language-go"><code>mtklog_path = internal_sd<br>com.mediatek.log.mobile.enabled = false<br>com.mediatek.log.mobile.maxsize = 500<br>com.mediatek.log.mobile.totalmaxsize = 1000<br>com.mediatek.log.modem.enabled = false<br>com.mediatek.log.modem.maxsize = 2000<br>com.mediatek.log.net.enabled = false<br>com.mediatek.log.net.maxsize = 600<br>com.mediatek.log.gps.enabled = false<br></code></code></pre>
<h1>十、MTK平台 只开Mobile log方法</h1>
<p>输入暗码&nbsp;<code>*#*#3646633#*#*</code>,进入<code>MTK Logger</code>&nbsp;界面,右上角打开<code>Logger Setting</code>,手动关闭除<code>Moblie Log</code>之外的开关。</p>
<p>关闭方法请看下图:</p>
<p style="text-align: center"><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYWmd0cWtSSlNrSGIycm90Zm5KclhVbWpRVmxvQ3VuYndMUlZWcUp3THZkMFJuZUowTWtIck1nLzY0MD93eF9mbXQ9b3RoZXI?x-oss-process=image/format,png"></p>
<p style="text-align: center">mtk 平台开启 Mobile log 参考图</p>
<h1>十一、SPRD平台 只开Android log方法</h1>
<p>输入暗码&nbsp;<code>*#*#83781#*#*</code>,进入<code>SPRD Logger</code>&nbsp;界面,右上角打开<code>Settings</code>, 点击<code>Custom scene</code>,关闭除<code>Android log</code>之外的开关,关闭方法请看下图。</p>
<p style="text-align: center"><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhvZXY1TlRxZlJGeUJGNjcySjU5emtYY1lKZDZCMnM0NFZqajlNYmEzRU1PZGpLaWNDeDlzRDJGOGJXRVlHaWNoVHFnMUdTUUN6M3hXc2cvNjQwP3d4X2ZtdD1vdGhlcg?x-oss-process=image/format,png"></p>
<p style="text-align: center">SPRD 平台开启 Android log 参考图</p>
<h1>十二、SPRD 平台功耗 Log 注意事项</h1>
<ol><li><p>只开&nbsp;Android Log(<code>参考十一、SPRD平台 只开Android log方法</code>)</p></li><li><p>进入<code>DEBUG&amp;Log</code>界面,<code>system info</code>-&gt;&nbsp;<code>Power Log</code>;</p></li><li><p>打开<code>PowerGuru log</code>和<code>wakelock log</code>;</p></li><li><p>重启设备。</p></li><li><p>使用下面命令,复位一下<code>battery history</code></p></li></ol>
<pre class="has"><code class="language-go"><code>adb shell dumpsys batterystats --enable full-wake-history<br>adb shell dumpsys batterystats --reset<br></code></code></pre>
<ol><li><p>测试完成后,使用下面命令,抓取<code>bugreport</code></p></li></ol>
<pre class="has"><code class="language-go"><code>adb root<br>adb bugreport &gt; bugreport.zip<br></code></code></pre>
<ol><li><p>最后将<code>andorid log</code>和<code>bugreport.zip</code>&nbsp;都提供出来。</p></li></ol>
<h1>十三、获取Top Activity 包名</h1>
<p>获取Activity Top的方法如下:</p>
<pre class="has"><code class="language-go"><code>//import android.app.ActivityManager;<br>//import android.app.ActivityManager.RunningTaskInfo;<br>//import android.content.ComponentName;<br>//import java.util.List;<br>// 获取top Activity apk<br>      public String getTopActivityPackageName(Context context) {<br>            String topActivityPackage = null;<br>            ActivityManager activityManager = (ActivityManager) (context<br>                  .getSystemService(android.content.Context.ACTIVITY_SERVICE));<br>            List&lt;RunningTaskInfo&gt; runningTaskInfos = activityManager<br>                  .getRunningTasks(1);<br>            if (runningTaskInfos != null) {<br>                ComponentName f = runningTaskInfos.get(0).topActivity;<br>                topActivityPackage = f.getPackageName();<br>               //Slog.e("wangjie", "------topActivityPackage---------"+topActivityPackage);<br>            }<br>            return topActivityPackage;<br>      }<br></code></code></pre>
<h1>十四、 修改Google 开机向导欢迎语</h1>
<p>孟加拉语开机向导欢迎语不对,客户要求去掉开机向导界面欢迎语方法。</p>
<p><code>idh.code/frameworks/base/core/java/android/widget/TextView.java</code></p>
<pre class="has"><code class="language-go"><code><br>public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {<br>... ...<br><br>   public void setTextLocale(@NonNull Locale locale) {<br>+      // add forBangla language<br>+      if (getContext().getClass().getName().equals("com.google.android.setupwizard.user.WelcomeActivity") &amp;&amp;<br>+                locale.getLanguage().equals("bn") &amp;&amp; locale.getCountry().equals("BD"))<br>+      {<br>+            Log.i(LOG_TAG, "find text:" + getText());<br>+            if (!getText().equals("") &amp;&amp; !getText().toString().contains("("))<br>+            Log.i(LOG_TAG, "set text:" + getText());<br>+            setText("");<br>+      }<br>+      // add forBangla language<br>         mLocalesChanged = true;<br>         mTextPaint.setTextLocale(locale);<br>         ... ...   <br>   }<br>... ...<br>}<br></code></code></pre>
<h1>十五、修改状态栏 时间显示秒</h1>
<p>展讯平台修改状态栏 时间显示秒方法如下</p>
<pre class="has"><code class="language-go"><code>adb shell pm enable com.android.systemui/com.android.systemui.tuner.TunerActivity<br><br>adb shell am start -n com.android.systemui/com.android.systemui.tuner.TunerActivity<br></code></code></pre>
<p>进入设置--系统--界面界面调谐器--状态栏--时间--显示时分秒。</p>
<h1>十六、判断多用户方法</h1>
<p>判断多用户方法如下:</p>
<pre class="has"><code class="language-go"><code>// import android.os.UserHandle;<br>if(UserHandle.myUserId() != UserHandle.USER_OWNER){<br>   // 给管理员用户 进行操作<br>}</code></code></pre>
<p><strong>友情推荐</strong><br></p>
<p>Android开发干货分享<br></p>
<p>至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!</p>
<p style="text-align: center"><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9LTjFGdTVkenc4ck5hdHJKSGg3UGlhOFByNUlpY1ptd2lhRG9pYVRjSWlhandjaWI2bzlJa2UzbFlMVFNXaWNhZGU2QUVMd1FVMTFqbGxWUWJyQk1XRjZGanJiTWcvNjQwP3d4X2ZtdD1wbmc?x-oss-process=image/format,png"></p>
<p style="text-align: right"><em>分享到朋友圈吧,方便您使用时快速查找!</em></p>
</div><br><br>
来源:https://www.cnblogs.com/programandriod/p/13868589.html
頁: [1]
查看完整版本: Android 开发中的一些小方法