![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 58
星辰旋风
安卓开发
展开
-
笔记 android悬浮窗的拖动实现踩坑
想要实现一个可拖动的悬浮窗,原理上非常简单:根据action_move时的event坐标偏移,去修改view的位置即可。但是实际实现上踩了个小坑。getRawX() 和 getX() 的区别。原创 2023-01-10 11:04:54 · 687 阅读 · 0 评论 -
android工程编译速度优化
android工程在越来越复杂后,编译速度会越来越慢,逐渐对开发效率带来很大的影响。本篇记录一些常见的编译速度优化的方式。一、 各种常见编译参数的配置和gradle、kotlin版本的更新网上关于这些编译参数的文档已经非常多了,我这里不想把这些参数再重复讲一遍,也没有这个必要。大部分对编译速度有帮助的编译参数,都随着gradle版本的升级,变成了默认值。所以只要把gradle版本升级到最新版本,基本上网上能看到的有用的编译参数都无需再去配置了。如果有使用kotlin,建议把kotlin相关版本,原创 2021-02-28 17:13:35 · 1918 阅读 · 0 评论 -
Flutter项目没有Logcat界面时打开Logcat的方法
我们在开发Flutter工程的时候,经常需要看日志时,发现没有Logcat视图,只能通过Debug视图中的Console Tab来看log。这个Console Tab比起Logcat来说,功能上差太多了,各种级别过滤、关键字过滤的功能都没有,截图、录屏这些工具不能用。想要打开Logcat视图,一般在第一次导入工程的时候,会提示检测到Android Framework,这时候按照提示点击导入,并设置Android Sdk即可。但是有时候并不是第一次导入的工程,莫名其妙Logcat视图就消失了,并且各原创 2020-06-05 13:59:48 · 6239 阅读 · 10 评论 -
通过ContentProvider的onCreate自动初始化Sdk
ContentProvider的onCreate的调用时机介于Application的attachBaseContext和onCreate之间。利用这个机制,可以在ContentProvider的onCreate中做某些初始化逻辑,这样写的sdk,就不需要app方主动调用初始化也可以完成自动初始化。 <provider android:name="com.xxx.xxx...原创 2019-12-14 15:49:22 · 1277 阅读 · 0 评论 -
Android Studio Debug 的 9 个小技巧
周末看 Android Dev Summit '19 的视频的时候,看到一章关于 Android Studio Debug 的介绍,有很多日常非常有用的小技巧,学习了这些小技巧能很大程度的降低我们 Debug 的成本,快速定位问题的本质,今天就向大家介绍一下 Android Studio Debug 的 9 个小技巧。没关注的小伙伴记得关注订阅????,如果觉得这些文章有点意思,记得分享转...转载 2019-11-26 01:32:20 · 480 阅读 · 0 评论 -
android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
转自点击打开链接在Android绘图开发中,Paint.setXfermode()和Canvas.saveLayer()是两个重要的方法了。很多网友都不是很明白,我也一直不明白,花了几天时间来研究了这两个方法,略有领悟,记录下来,归纳总结,也给新手一点帮助。 Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解 这篇文章给了我很大的帮助,大家看这篇文转载 2017-04-27 15:56:52 · 587 阅读 · 0 评论 -
最简洁的Handler、Looper、Message源码级原理分析
每一个Android开发者,基本都能把Handler、Looper、Message的原理说上一通,最基本的面试题答案“每个线程里可以创建一个Looper,Looper里维护一个消息队列,handler可以往这个消息队列发消息,Looper又不停的从消息队列里取出消息分发给对应的handler”。然而实际上很多开发者对这段话只是一知半解,在这篇博客里,我来用最简洁的语言,梳理一遍Handler、Loo原创 2017-09-26 13:57:26 · 320 阅读 · 0 评论 -
Android adb调试命令集合
转自:https://cwgoover.github.io/2016/10/09/android-adb-usage/见猎心喜,保存收藏,如有侵权,还请告知,立刻删除。一些实用的命令发送广播关闭USB$ adb shell am broadcast -a android.hardware.usb.action.USB_STATE --ez connect转载 2017-09-11 11:11:30 · 3268 阅读 · 0 评论 -
repo 切换manifest
repo init -b newManifest.xml repo sync -cdf --force-sync -j4原创 2017-04-20 15:30:24 · 5204 阅读 · 0 评论 -
android Input系统事件分发流程
最近被问到android Input系统事件分发流程,虽然有看过相关源码,但是只是匆匆一瞥,没什么印象,解释了半天自己都晕了,甚是尴尬。特地重新看了一遍,整理在博客上,加深一下印象。 网上对android的事件分发流程的讲解很多,我就不具体铺代码了,找了几张程序流程图,帮助理解。估计大家没耐心看这么多流程图,把总结放在前面:1 Kenel收到InputEvent放到Ev原创 2018-01-30 17:39:35 · 3191 阅读 · 5 评论 -
无源码调试android应用
1 Xposed 有一个插件 XInstaller 可以实现对任意进程进行调试2 将ro.debuggable值改为13 将应用反编译后,修改 AndroidManifest.xml 将 android:debuggable 设置为 true,再重新签名第一种方法最简单;第二种方法很麻烦,由于ro.debuggable是只读的,要修改好像是需要刷boot.img修改 init.prop,具体我没...原创 2018-02-22 18:19:35 · 478 阅读 · 0 评论 -
通过命令强制执行JobService
android开发中经常用JobService来做定时操作,但是这个定时任务又收到系统影响,系统为了耗电和网络等因素会将JobService的触发时间做一下优化。 但是这就苦了android开发者,写了一个JobService想看一下效果往往等半天也等不来一次触发,给代码调试带来很大困难。研究了好久,才发现adb里有命令可以强制触发JobService。命令如下:run [-f | ...原创 2018-03-16 18:47:30 · 3054 阅读 · 0 评论 -
android 最近任务多进程调度逻辑分析
android自从把最近任务改为一个activity后,最近任务的内部逻辑的复杂程度就在不停地快速增长着。android是支持多用户的,最近任务在每个用户空间都有一个单独运行的进程。而只有主用户空间的SystemUI进程才能收到PhoneWindowManager发过来的事件,比如showRecents,hideRecents等,所以副用户空间的systemui进程就需要主用户空间的systemui原创 2017-09-08 15:47:40 · 2225 阅读 · 0 评论 -
Android通过共享用户ID来实现多Activity进程共享
转载自:http://mypyg.iteye.com/blog/720406作者整理的太好了,记录下来,如有侵权,请联系我,我会立刻删除。1.同一Apk中的同一包中的Activity调用时进程状况验证 [1]创建Project: project name: FirstProject package:com.demo 默认Activity:MainA转载 2017-09-06 21:19:04 · 718 阅读 · 0 评论 -
Android 常用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir
官方定义:Invoke “. build/envsetup.sh” from your shell to add the following functions to your environment:– croot: Changes directory to the top of the tree.– m: Makes from the top of the tree.–转载 2017-08-23 15:31:23 · 737 阅读 · 0 评论 -
BlockCanary简介
Android Performance Monitor BlockCanary是一个Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复。取名为BlockCanary则是为了向LeakCanary致敬,顺便本库的UI部分是从Le转载 2017-08-18 17:28:03 · 8309 阅读 · 0 评论 -
android system trace 显示信息太少的解决方案
之前我都是通过ddms里面的可视化工具抓systrace,但是最近发现同事提供的信息我这里看不到,向同事请教后发现,同样是抓systrace,使用命令来抓比ddms里面抓要稳定靠谱的多,之前经常ddms抓systrace经常出现的半天没有反应的情况也没有了。记录一下抓systrace的命令:python ~/scorpio/external/chromium-trace/sys原创 2017-07-25 17:54:48 · 2518 阅读 · 0 评论 -
chrome看不了android systrace的解决办法
有时chrome打开systrace会白屏,这个时候输入chrome://tracing/然后选点击load选择trace文件就能正常读取了。原创 2017-07-25 16:01:48 · 7309 阅读 · 1 评论 -
安卓手机打开原生虚拟键的方法
请教了公司大神android手机打开原生安卓虚拟键的方法.xc@xc-OptiPlex-7040:~/MyWorkspace$ adb rebootxc@xc-OptiPlex-7040:~/MyWorkspace$ adb rootrestarting adbd as rootxc@xc-OptiPlex-7040:~/MyWorkspace$ adb remountremount suc原创 2016-07-18 15:58:46 · 4666 阅读 · 0 评论 -
自动把getevent转化为sendevent的工具(附java源码)
最近发现了evi这个工具,这个工具是android 测试用的,和我想要做的是同样的功能。不过有的手机上没有这个指令,所以想要类似功能的可以先尝试这个工具,如果不行的话可以尝试在手机里push一个evi,或者换用分割线一下的方法。用法很简单: 1 输入 adb shell evi record 后,做自己想要重复执行的操作。 2 输入 adb shell evi replay -t n ,即可重复执...原创 2016-09-28 17:56:07 · 1868 阅读 · 5 评论 -
Android性能优化基础
原文出处: http://hukai.me/android-performance-patterns/Android性能优化典范 - 第1季2015新年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App。课程专题不仅仅介绍了Android系统中有关性能问题的底层转载 2017-06-24 14:35:10 · 499 阅读 · 0 评论 -
看android源码的方式
作为一个android开发,快速查看android源码是非常重要的辅助手段,在这篇博客里列举一一些常用的看android源码的方式,有时候还需要几种方式混合使用。我在工作中一般是本地下载完整的源码,在androidStudio中导入源码中常用的项目,遇到需要查找的时候用本地搜索+在线OpenGrok一起查找。在线看android源码:1,http://andro原创 2017-06-19 14:52:18 · 755 阅读 · 0 评论 -
Log.isLoggable使用方式
使用Log.isLoggable可以方便的开关log,但是这个方法具体的用法很多人都不知道.谷歌注释如下:public static boolean isLoggable(String tag, int level)Checks to see whether or not a log for the specified t...原创 2018-04-26 16:32:49 · 2472 阅读 · 0 评论 -
app启动前debug的方法
在app刚启动时调试 我们知道使用Eclipse/AndroidStudio调试进程,都需要进程已经创建好的情况下,才能attach上去。但是有时候我们需要Debug进程启动的过程怎么办? 如果本身有app的源码,并且可以编译,那自然很方便,直接以debug方式编译安装就好了,Eclipse/AndroidStudio都可以一键完成,但是如果没有可编译的源码,或者...转载 2018-05-14 16:06:42 · 9068 阅读 · 0 评论 -
万能json to code 在线工具
万能json to code 在线工具支持各种语言最近找json to dart的时候发现的,试了其他工具,不好用,还有bug,这个就好多了。https://app.quicktype.io/原创 2019-07-15 00:46:57 · 1572 阅读 · 0 评论 -
android studio编译和命令行调用gradle编译的区别
android studio编译比命令行调用gradle编译快很多从Android Studio 2.3版本之后,通过Android Studio打包普遍比通过命令行调用gradle编译要快很多。这是因为Android Studio增加了一项功能。通过Android Studio打包是,检测到连接的手机android本部大于21,就会关闭传统multidex方案,而使用速度快得多的新版多dex打...原创 2019-06-17 20:53:38 · 3085 阅读 · 0 评论 -
遍历一个简单的android工程中gradle编译时的所有task,打印其依赖和输入输出
我们开发中如果涉及到gradle的开发,经常需要查看各个task的输入输出。我在这里创建了一个空的android项目,然后遍历了它的所有task,及其依赖和输入输出。遍历的代码非常简单:project.afterEvaluate(new Action<Project>() { @Override public void execute...原创 2019-05-04 18:10:28 · 4056 阅读 · 0 评论 -
Gradle进程调试方法
开发gradle插件和排查某些问题的时候,偶尔需要调试gradle进程。这时候可以用如下方法来开启调试。在原本的编译命令后加-Dorg.gradle.debug=true --no-daemon,-Dorg.gradle.debug=true表示gradle进程启动后等待调试器attach上才开始运行,--no-daemon表示是否开启daemon进程,不加这个参数默认是会开启daemon...原创 2019-05-04 15:27:17 · 2578 阅读 · 0 评论 -
AddTryCatch gradle plugin 编译期给代码加try catch的插件
AddTryCatch插件,可以通过简单的配置,在编译期向指定方法中加入try catch!因为是在编译期在字节码的层面上修改,所以不管是自己写的代码,还是引用的第三方库中的代码,都可以加入try catch。项目地址:https://github.com/xingchenxuanfeng/AddTryCatchPlugin----原创 2019-03-29 09:50:16 · 1630 阅读 · 0 评论 -
一步步实现AddTryCatch插件 —— Gradle Transform和ASM实践
在上一篇AddTryCatch gradle plugin 编译期给代码加try catch的插件中介绍了AddTryCatch插件的使用方法,这一篇来一步步实现一下AddTryCatch插件。参考这篇文章,可以快速开发一个gradle插件,包含了我很多的探索和踩坑,看完这篇文章直接就可以上手开发插件了。原创 2019-03-28 11:18:49 · 3010 阅读 · 8 评论 -
Firebase Crashlytics Sdk接入流程(Android)
Firebase Crashlytics Sdk接入流程考拉刚刚把crash统计平台迁移到了firebase上,在此记录一下接入Firebase Crashlytics Sdk的流程,以供大家参考。接入一个新的SDK,最重要的文档就是官方手册,Firebase Crashlytics的官方手册是这个Firebase Crashlytics 使用入门 &amp;amp;amp;amp;amp;amp;nbsp;|&amp;amp;amp;amp;amp;amp;nbsp;原创 2019-01-27 19:05:03 · 12879 阅读 · 19 评论 -
RecyclerView的canScrollVertically方法踩坑
这个canScrollVertically方法有两个坑 /** * Check if this view can be scrolled vertically in a certain direction. * * @param direction Negative to check scrolling up, positive to check scro...原创 2018-12-04 16:20:41 · 22099 阅读 · 8 评论 -
Kotlin 操作符:run、with、let、also、apply 的差异与选择
转自原文链接Kotlin 操作符:run、with、let、also、apply 的差异与选择Kotlin 操作符:run、with、let、also、apply 的差异与选择Kotlin 的一些操作符非常相似,我们有时会不确定使用哪种功能。在这里我将介绍一个简单的方法来清楚地区分他们的差异,最后以及如何选择使用。首先我们以下这个代码:class MyClass { ...转载 2018-11-22 21:13:56 · 650 阅读 · 0 评论 -
在java中抛出native crash的方法
最近要接入firebase crashlytics,一个crash分析平台,要测一下native crash能否正常统计上报,找了半天才找到一个可以简单的抛出native crash的方法。代码如下,用java调下面这个方法就可以抛出native crash。 public void crashNatively() { try { C...原创 2018-11-14 21:34:09 · 1781 阅读 · 0 评论 -
用adb shell 获取当前手机所有features
用adb shell 获取当前手机所有featuresadb shell pm list features在写测试脚本的时候会有用 这是从google的cts测试里找出来的,androidxref上可以搜索到 :androidxref 。cts测试真是集合了Google工程师奇技淫巧之大成,很多神奇的骚操作,都可以在这里面找到。在没有adb shell 命令集合官方文档前,ct...原创 2018-08-08 15:33:54 · 7680 阅读 · 0 评论 -
GPU呈现模式分析中颜色的意义
google官方解释中文版:链接google官方解释英文详细解释:链接下表介绍了使用运行 Android 6.0 及更高版本的设备时分析器输出中某个竖条的每个区段。竖条区段 渲染阶段 说明 交换缓冲区 表示 CPU 等待 GPU 完成其工作的时间。 如果此竖条升高,则表示应用在 GPU 上执行太多工作。 命令问题 表示 Android 的...转载 2018-07-23 10:58:53 · 8630 阅读 · 0 评论 -
ProGuard简介
本文出自:链接深入学习ProGuard之:ProGuard简介与android的应用什么是ProGuard在ProGuard的官网中,关于ProGuard的描述是这样的:ProGuard is a Java class file shrinker, optimizer, obfuscator, and preverifier.ProGuard是一个开源的Java类文件(只能...转载 2018-11-19 16:14:05 · 3714 阅读 · 0 评论 -
反编译framework源码的方法
反编译 工作中经常遇到很多第三方应用或Rom需要反编译看源码实现,对于第三方应用很简单拿到apk文件后直接用apktool解开就可以了。但是对于系统应用或framework模块部分就不行了,因为厂包肯定会打开odex,所以将apk或jar包pull到本地后会发现里面只有资源文件或META-INF等,里面没有classes.dex字节码文件。 但是我们知道编译的时候打开odex同时会在相...转载 2018-05-14 16:09:26 · 6671 阅读 · 0 评论 -
无需刷机,查看rom包内的文件
静态调试 有时候为了确认系统内某些文件是否存在、是否编译了odex、反编译apk、反编译oat等,查看一些静态信息的时候,一般我们都会找一个机器通过flash_all,再等开机后adb 进去查看。这样一来很浪费时间,其实我们完全可以将system.img mount到本地pc上查看。 1)下载对应的rom包。 2)本地解压后找到对应的system.img。 3)通过本地编译时提供的h...转载 2018-05-14 16:21:56 · 2697 阅读 · 0 评论 -
android中Drawable的mutate方法作用
public Drawable mutate() { return this;}原创 2017-04-27 15:22:18 · 3940 阅读 · 1 评论