- 博客(138)
- 资源 (104)
- 问答 (3)
- 收藏
- 关注
原创 【Android】系统源码下载及编译和android studio导入
BUILD 指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境,例如 aosp_arm64-eng 中的 aosp(Android Open Source Project) 代表 Android 开源项目,arm 表示系统是运行在 arm 架构的处理器上的,arm64 则是指 64 位 arm 架构处理器。删除后,则可以直接跳转到源码文件。参与编译的线程并不是越多越好,通常是根据你机器 cup 的核心来确定,公式为:core * 2,即当前 cpu 的核心的 2 倍。
2023-09-17 17:44:26
1445
原创 WSL 的安装、报错解决、使用技巧
WSL 的安装、报错解决、使用技巧需要Windows10或以上系统版本。如果你的操作系统是Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11,并且你从来没有安装过WSL,你可以使用命令行简单的安装安装 WSL,使用管理员权限打开power shell运行命令完成安装, 详细教程。
2023-08-28 17:51:04
2286
原创 使用 shadow 打jar包把添加依赖
在app的build.gradlebuildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.github.johnrengelman:shadow:7.1.2" }}在module下build.gradle处添加apply plugin: "com.git...
2022-05-17 10:52:34
2127
原创 android studio java-library 打包jar中没有主清单属性
android studio java-library 打包jar中没有主清单属性
2022-05-13 11:58:25
1123
1
原创 如何查看apk包里的targetSdkVersion
1、找到sdk下aapt文件 ,在build-tools/sdk版本/aapt文件2 输入命令 aapt dump badging /Users/xxx/Documents/demo.apk
2021-07-20 11:03:30
1736
转载 java注解的实现原理
今天将从以下4个方面来系统的学习一下java注解什么是注解注解的用途注解使用演示注解的实现原理1.什么是注解注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解一般常用的注解可以分为三类:一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarni
2021-06-08 11:53:23
3174
原创 TextView超出限定长度显示省略号
<TextView android:layout_height="45dp" android:layout_width="wrap_content" android:text="何问起 hovertree.com" android:textSize="15sp" android:singleLine="true" android:layout_margin..
2021-04-15 10:08:09
768
原创 你写的单例模式,能防止反序列化和反射吗?
前言说起单例模式,相信大家都不会陌生。因为相比其他设计模式,实现一个单例模式是比较简单的。单例模式的意思就是一个类只有一个实例。获取类的实例,我们往往采用new关键字,但是要保证一个类只能有一个实例,所以不能让使用这个类的开发人员利用new关键字来创建实例。也就是不能让外部调用类的构造方法,所以很容易想到类的构造方法私有,这样开发人员就不能在类之外通过new的方法创建该类的对象了。由于外部不能通过new关键字来创建单例类的对象了,所以单例类本身必须提供一个静态方法,使得外部可以通过类名 + 方法名的方
2021-02-01 10:18:14
422
原创 在小米手机上调节亮度出现失常问题
小米的新版系统(大于MIUI9),取到的当前亮度值是远大于255的,应该是小米修改了系统亮度的最大值(不知道小米是出于什么原因修改的)。所以最大值要根据系统版本动态获取。public static final int MAX_BRIGHTNESS_VALUE = 230; //设置的最大亮度值 /** * 判断是否开启了自动亮度调节 * * @param context * @return */ public static boolean I
2020-12-15 17:30:43
2157
原创 注解
1 注解的概念1.1 注解的官方定义首先看看官方对注解的描述:**An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated. Annotations have no direct effect on the operation of the code they annot
2020-11-18 15:58:59
203
原创 Linux/Ubuntu系统下反编译apk
Linux/Ubuntu系统下反编译apkenjarify 反编译apk,jadx 查看jar源码,apktool查看资源文件一、enjarify 反编译apk$ git clone https://github.com/google/enjarify.git$ cd enjarify$ ./enjarify.sh yourapp.apk二、jadx 查看jar源码1.build jadx$ git clone https://github.com/skylot/jadx.git$ cd
2020-09-25 10:25:19
1970
1
原创 android获取crash信息
public class ApiCrashHandler implements Thread.UncaughtExceptionHandler { private final Logger mLog = LoggerFactory.getLogger(ApiCrashHandler.class.getSimpleName()); private static ApiCrashHandler mCrashHandler; private Context mContext; p
2020-08-13 15:02:21
347
原创 addWindowToListlnOrdeLocked()的执行过程
addWindowToListln〇rdeLocked()的执行过程该 函 数 是 在 addWindow()中 被 调 用 的 , 其 作 用 是 将 新 建 的 WindowState对 象 添 加 到 mWindows列 表中 。 表 面 上 看 , 该 函 数 的 执 行 过 程 有 点 复 杂 , 但 其 执 行 的 目 的 就 是 当 添 加 新 建 的 窗 口 后 , mWindows列表 能 够 保 持 其 内 在 顺 序 上 的 固 有 规 则 , 因 此 , 如 果 按 照 这 种
2020-07-30 23:59:55
943
原创 删除窗口的时机
删除窗口的时机Android中 的 窗 口 和 Windows操 作 系 统 中 的 窗 口 管 理 有 一 个 明 显 差 别 ,就 是 窗 口 的 右 上 角 没 有 关 闭按 钮 , 即 用 户 不 能 直 接 关 闭 窗 口 。从 SD K 的 角 度 来 看 , SDK希 望 程 序 员 不 要 直 接 去 操 作 窗 口 , SD K 已 经 对 窗 口 进 行 了 各 种 封 装 ,Activity,菜 单 、 对 话 框 等 , 这 些 控 件 的 背 后 都 对 应 一 个 窗 口
2020-07-30 23:25:27
501
原创 assignLayersLockedO 的执行过程
assignLayersLocked() 的执行过程mWindows中 窗 口 的 排 列 顺 序 反 映 了 窗 口 应 该 被 层 叠 顺 序 , 而 assignLayersLocked()函 数 的 作 用 正 是根 据 mWindows自 身 的 顺 序 给 窗 口 的 mLayer进 行 赋 值 。 private final void assignLayersLocked() { int N = mWindows.size(); int curBaseLa
2020-07-30 22:14:28
361
原创 导 致 V iew 树重新遍历的总体诱因
导 致 V iew 树重新遍历的总体诱因下面介绍各种能引起View树重新遍历的操作,这些操作总的来讲可以分为三类。一类是导致视图大小发生变化;第 二 类是导致ViewGroup重新为子视图分配位置;第三类是视图显示情况发生变化需要 重 绘 。这 三 类 情 况 最 后 都 直 接 或 间 接 调 用 到 三 个 函 数 ,分 别 为 invalidateO、 requestLayoutO及requestFocus(),而这三个函数最终都会调用到ViewRoot中 的schueduleTraversa
2020-07-29 23:34:24
284
原创 V ie w 内默认消息派发过程
V ie w 内默认消息派发过程public boolean dispatchTouchEvent(MotionEvent event) { /** * 一 调 用 onFilterTouchEventForSecurity()处理窗口处于模糊显示状态下的消息。所谓的模糊显示是 * 指 ,应用程序可以设置当前窗口为模糊状态,此时窗口内部的所有视图将显示为模糊效果。这样做的目 * 的 是 为 了 隐 藏 窗 口 中 的 内 容 , 对 于
2020-07-29 23:31:17
242
原创 measure内部设计思路
host.measure()会 调 用 到View类 的 measure()函数,该函数然后回调onMeasure()。在一般情况下,host对象是一个ViewGroup实例,该ViewGroup会重载onMeasure(),当然如果host没有重载onMeasure(),则会执行View类中默认的onMeasureO。在一般情况下,程序员需要在重载的onMeaSure()函数中逐一对 所 包 含 的 子 视 图 执 行 measureO操 作 , 为 了 简 化 程 序 设 计 , ViewGrou
2020-07-29 22:35:47
203
原创 根视图内部(Activity)消息派发过程
首先来看mView.dispatchTouchEvent()的派发过程。该函数是在ViewRoot中调用的, mView的类型可能有两种情况,对于应用窗口而言, mView是一个PhoneWindow中的DecorView类型;对于非应用窗口而言, mView是一般的ViewGroup类型。在 DecorView中,首先判断是否存在Callback对象,它和按键消息派发时的Callback对象一样,就 是 Activity类 。 如 果 没 有 Callback对 象 , 则 直 接 调 用 Dee
2020-07-29 22:31:00
204
原创 触摸消息总体派发过程
** 和按键派发类似,当消息获取模块通过pipe将消息传递到客户端, InputQueue中的next()函数内部调 用 nativePollOnce()函数中会读取该消息。如果有消息,则 回 调ViewRoot内部的mlnputHandler对象的 dispatchMotion()函数,该函数仅仅是发起一个DISPATCH_POINTER异步消息,消息的处理函数是deliverPointerEvent()。执行完该函数后,调 用 finishInputEvent()向消息获取模块发送一个回执,以便
2020-07-29 22:13:15
213
原创 绘制滚动条
/** * <p>Request the drawing of the horizontal and the vertical scrollbar. The * scrollbars are painted only if they have been awakened first.</p> * * @param canvas the canvas on which to draw the scrollbars * * @
2020-07-29 17:40:43
530
原创 ViewGroup 类中 drawChild()过程
dmwChildO的核心过程是为子视图分配合适的Canvas剪切区,剪切区的大小取决于child的布局大小,剪切区的位置取决于child的内部滚动值及hild内部的当前动画。该函数内部的主体流程如图13-42所示,分为八大步。 protected boolean drawChild(Canvas canvas, View child, long drawingTime) { boolean more = false; final int cl = child.mLe
2020-07-28 22:54:46
658
2
原创 ViewGroup类 中 绘 制 子 视 图dispatchDraw()内部流程
/** * dispatchDraw()的作用是绘制父视图中包含的子视图,该函数的本质作用是给不同的子视图分配合 * 适 的 画 布 (Canvas),至于子视图如何绘制,则又递归到View类 的 draw()函数中。应用程序一般不需要 * 重 载 dispatchDrawO函数,而只需要在onLayout()中为子视图分配合适的大小, dispatchDraw()将根据前 * 面分配的大小调整Canvas的内部剪切区,并作为绘制子视图的画布。所有的ViewGro..
2020-07-28 22:41:04
1292
原创 View类中draw()函数内部流程
View类中draw()函数内部流程/**该函数的内部流程正如源码中的注释所讲.分为5步**/ public void draw(Canvas canvas) { if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.HierarchyTraceType.DRAW); } final int privateFlags = mPri
2020-07-28 22:26:19
321
原创 ViewRoot的draw()分析
/** * ViewRoot中的draw()函数主要处理一些根视图中的特有属性,并且处理完毕后同样要调用View类 * 中 的draw()进行具体的绘制。 * Surface按照底层的驱动模式可以分为两种,一种是使用图形加速支持的Surface,俗称显卡,另一 * 种是使用CPU及内存模拟的Surface。因此,根视图中将针对不同的Surface采用不同的方式从该Surface * 中获取一个Canvas对象,并 将 该Canvas对象派发到整个视图...
2020-07-26 23:27:10
432
原创 View绘制元素
在介绍视图绘制之前,先来了解一下一个视图中都包含哪些需要绘制的元素,比如一个TextView,除了具体的文字外,还需要绘制文字的背景等。那么,视图中都包含哪些绘制元素呢?总的来讲,绘制元素包含四个,分别如下:View背景。每个视图都有一个背景,比 如 LinearLayout、 TextView,背景可以是一个颜色值,也可以是一幅图片,甚至可以是任何Drawable对象,比如一个Shader、一 个DrawableState等 。应用程序可以使用 setBackgroundColor()、 se
2020-07-26 23:25:07
181
原创 LinearLayout的onLayout()分析
/** * onLayout()函 数 中 首 先 根 据 mOrientation变 量 判 断 是 水 平 还 是 垂 直 ,如 果 是 垂 直 , 则调用 * layoutVertical()开始进行 layout 操作。 */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (mOrientation == VERTI.
2020-07-26 21:42:22
377
原创 布 局 (layout ) 过程
布 局 (layout ) 过程 public final void layout(int l, int t, int r, int b) { /** * 在 layout()函数中,首先调用setFrame()函数给当前视图设置参数中指定的位置,然后回调onLayoutO * 函数。 ViewGroup类中重载了 onLayout()函数,并且将其函数类型设置成了一个abstract类型,因此, * 所 有 的ViewGroup实例必
2020-07-26 21:29:20
564
原创 LinearLayout 中的 onMeasure()
LinearLayout 中的 onMeasure() /** * LinearLayout中 的onMeasure()函数内部,首先判断该LinearLayout是水 * 平的还是垂直的,并分别调用measureHorizontal()和 measureVertical(),下面仅分析垂直方向的measure * 过程。 */ @Override protected void onMeasure(int widthMeasureSpec, int
2020-07-26 21:17:02
343
原创 measure()源码分析
/*** host.measure()会 调 用 到View类 的 measure()函数,该函数然后回调onMeasure()。在一般情况下,* host对象是一个ViewGroup实例,该ViewGroup会重载onMeasure(),当然如果host没有重载onMeasure(),* 则会执行View类中默认的onMeasure()。在一般情况下,程序员需要在重载的onMeaSure()函数中逐一* 对 所 包 含 的 子 视 图 执 行 measureO操 作 , 为 了 简 化 程 序 设
2020-07-26 20:08:32
833
转载 android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)
多渠道打包和资源混淆的作用这里我就不再阐述了。网上有很多。本篇博客我们来介绍一下如何实现多渠道打包之前先进行资源混淆,这样一来我们打出来的包都是已经进行过资源混淆的了。如果你还有其他的需求,也可以按照这个方法实现。多渠道打包(Walle)这里多渠道打包我使用的是美团的Walle,具体的使用方式Github上已经介绍的很详细了。这里我先来实现一下多渠道打包首先按照说明集成一下walle和签名配置配置build.gradle在位于项目的根目录 build.gradle 文件中添加Walle Gr
2020-07-20 09:26:21
819
原创 performTraversals()
/** * performTraversals()函数正是系统内进行View树遍历工作的核心函数,该函数内部逻辑稍有复杂, * 一个函数代码长度约600行。虽然该函数的代码很长,但其主体逻辑却是很清晰的,其执行过程可简单 * 概括为根据之前所有设置好的状态,判断是否需要重新计算视图大小 measure)、是否需要重新安置视 * 图 的 位 置 layout),以及是否需要重绘 draw)视图, */ private void performTra..
2020-07-10 16:18:51
847
原创 requestLayout( )
该函数的执行过程比较简单,因为当View树进行重新布局时,总是重新给所有的视图进行布局,因为,最简单的想法就是只要设置一个标识就好了。* 首先给mPrivateFlags添 加 FORCE_LAYOUT标识,然后调用mParent的 requestLayoutO函数。对于 * 一个具体的View对象而言,其父视图要么是一个ViewGroup实例,要么是一个ViewRoot实例,而前 * 者并没有对该函数重载。也就是说,ViewGroup会按照基类 View )中的该函数进行处理,如果
2020-07-10 12:52:31
576
原创 invalidate()
该函数的作用是请求View树进行重绘,当应用程序需要重绘某个视图时,可以调用该函数。绘 制流程中,首先绘制最底层的根视图,然后再绘制其包含的子视图。子视图或者是一个VeiwGroup,或者是一个View,如果是ViewGroup的话,则继续再绘制ViewGroup内部的子视图,绘制过程一般并不会对所有视图进行重绘,而仅绘制那些“需要重绘” 的视图。那么,什么是“需要绘制”的视图呢?View类内部变量mPrivateFlags中包含了一个标志位DRAWN,当该视图需要绘制时,就给mPrivateFl
2020-07-10 12:42:52
993
原创 requestFocus(int direction, Rect preFocusRec)
和 invalidateO的调用有点相似,requestFocusO也是不能独自完成的,当一个视图想要获取焦点时,必须请求它的父视图完成该操作,为什么呢?因为父视图知道当前哪个视图正在拥有焦点,如果要进行焦点切换,则必须先告诉原先的视图放弃焦点,而这些操作所需要的信息是在父视图中保存的,所以requestFocus()也必须由父视图完成。该函数有如下三个不同的版本。• requestFocusO:无参数,它被转换成 requestFocus(View.FOCUS__DOWN)。• request
2020-07-10 10:09:26
1488
原创 android2.3源码下载编译过程
@官方的文档地址:http://source.android.com/source/download.html@系统要求:1 ubuntu 10.04或以上版本 2 64位系统(查看系统命令: uname -m 如果出现i386 i686 i586则是32位 如果出现amd64 则是64位系统 ) 3 jdk1.6 或更高版本 1安装下载源码所需要的工具1.1 sudo apt-get install git-core curl 这条命令...
2020-07-06 18:41:38
231
原创 requestLayout方法和invalidate 方法比较
requestLayout方法和invalidate方法自定义View的时候难免会和这2个方法打交道,在之前的文章中我们已经介绍了invalidate方法,今天我们来对比下requestLayout方法和invalidate方法有什么不同之处等不及的先给个结论:requestLayout方法会导致View的onMeasure、onLayout、onDraw方法被调用;invalidate方法则只会导致View的onDraw方法被调用requestLayout方法源码分析//View.class@
2020-06-30 21:48:34
723
liuchangdepython.zip
2019-07-16
MVPArms.zip
2019-07-16
zxing-master.zip
2019-07-16
Java并发编程实战2019.zip
2019-06-14
Android进阶之光 刘望舒(当当正版).pdf
2018-07-11
android studio 3.2
2018-06-07
gradle-2.10-all
2018-03-13
Java 并发编程实战(完整带书签)
2018-01-27
Android C++高级编程:使用NDK_Onur Cinar,于红.zip
2018-01-08
Android ScrollView向上滑动控件顶部悬浮效果实现
2017-01-09
连接手机错误,会有下面的弹窗出现,有什么解决方法
2018-01-17
android 百度地图怎限制比例尺
2017-12-20
android studio ,打开原来可以运行的项目,然后就报这个错了
2017-11-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人