自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (6)
  • 收藏
  • 关注

原创 Google Play Console语言设置方法

4.点击 Personal Info,并往下拉到 Language。6.选择简体中文,并点击 右下角的 select。5.点击 Language,点击编辑按钮。7.此时界面自动刷新成中文。

2022-10-28 11:33:15 3879 1

原创 Android aab转换为通用的apk

admobileSdkTest/universal.apks 是输出的apks文件的位置,也是一样,默认mac会加 /Users/mckj 前缀,加一起就是 /Users/mckj/admobileSdkTest/universal.apks 位置。可以把文件拖到Android Studio 中,就可以打开 resources.arsc 文件,查看到资源信息。再双击 universal.rar,解压缩,其中的 universal.apk 文件就是我们想要的文件。mac文件夹如图所示,window同理。

2022-10-11 14:46:40 1810 1

原创 将 Google 登录集成到您的 Android 应用中

以集成了第三方谷歌、facebook SDK的依赖库所写的接入流程需要用到的地址:首先需要先登录谷歌账号,然后打开这个地址。

2022-08-29 17:13:42 1580

转载 Android 详细分析AppBarLayout的五种ScrollFlags

ScrollFlags共有五种常量值供AppBarLayout的Children View使用,在xml布局文件中通过设置,对应的值为:scroll,enterAlways,enterAlwaysCollapsed,snap,exitUntilCollapsed;下面我们通过官网介绍、XML代码和对应的效果图分别分析这五种值的使用(备注:代码中设置也一样,不再赘述):Child View 伴随着滚动事件而滚出或滚进屏幕。注意两点:第一点,如果使用了其他值,必定要使用这...

2022-06-15 09:56:05 913

转载 MotionLayout 动画从未如此简单!

MotionLayout 动画

2022-06-08 10:33:00 306

原创 算法(第四版)-算法练习(2)-(1.1.8-1.1.14)-kotlin

本系列博客的习题都来自《算法(第四版)》,如果有其他人也在看这本书,欢迎来评论区多多交流包含的知识点java的基本语法 进制转换 一维数组逆序输出 二维数组的转置(交换行与列)1.1.8 下列语句会打印出什么结果?给出解释。a.System.out.println('b');b.System.out.println('b' + 'c');c.System.out.println((char) ('a' + 4));...

2022-05-30 16:20:13 187

原创 算法(第四版)-算法练习(1)-(1.1.1-1.1.7)-kotlin

算法(第四版)-算法练习

2022-05-12 19:15:00 452

原创 Android 出海 Admob 踩坑

1. 集成 Admob 后, 使用测试的 Key,可以正常看到广告,切换回自己的正式key, 发现一直无法展示Ad,提示错误:{ "Code": 3, "Message": "Publisher data not found. <https:\/\/support.google.com\/admob\/answer\/9905175#9>", "Domain": "com.google.android.gms.ads", "Cause": "null", "Respon

2022-04-06 11:39:52 3186 1

原创 AsyncListDiffer、DiffUtil.DiffResult 流程源码解析

使用RecyclerView时,如果使用 AsyncListDiffer 用于分页加载的话,是合适的,因为在你通过 addAll的方式添加分页数据后,根据 DiffUtil.DiffResult 的差异算法,之前的数据如果没有发生变化,areContentsTheSame 方法如果返回true,则不会调用 Adapter. notifyItemRangeChanged 方法去重新绑定数据。但是当你不用于分页数据,而仅仅用于正常的列表数据,并且你希望可以根据 DiffUtil.Diff...

2022-01-10 16:23:54 1939

原创 Android Gradle Plugin插件开发----介绍

以下内容基于本人所学而编写的,如与网上相关介绍内容不相同,概不负责android 插件化开发,这个词我们在网上经常可以看到,同时看到的还有组件化开发。在这里我们只讨论插件化开发的相关内容。1.插件的作用以我所学的插件知识,我简单概括下插件的作用,即插件可以用于哪些地方。1.接入第三方SDK时进行统一配置参数。场景:有多个APP,都接入了友盟推送SDK 不使用插件时:如果友盟推送SDK进行了升级,此时需...

2021-09-29 17:07:28 786

原创 Android Studio断点调试时行号对应不上问题解决

有时候我们debug 的时候会发现程序真正断点的位置和我们打断点的位置不对应,例如:工程compileSdkVersion为28,但程序运行在29的设备上时。 但是当你把compileSdkVersion 修改为29以后,运行在29的设备上时,还是会发现真正断点的位置和我们打断点的位置不对应。 问题产生的原因是因为我们使用了真机调试,国内的手机android系统基本上都是定制过了,源码很可能被改过了所以行号发生了变化。...

2021-08-20 10:29:07 957

原创 ASM7 使用指南------第1章引言

(如有侵权请联系作者删除)1.1动机程序分析、程序生成和程序转换都是非常有用的技术,可在许多应用环境下使用:□程序分析,既可能只是简单的语法分析(syntaxic parsing),也可能是完整的语义分析(sematic analysis),可用于查找应用程序中的潜在bug、检测未被用到的代码、对代码实施逆向工程,等等。□程序生成,在编译器中使用。这些编译器不仅包括传统编译器,还包括用于分布式程序设计的stub编译器或s...

2021-07-26 18:04:04 613

原创 git : 记录一次fork远程分支并且merge合并冲突黄色警告问题

问题描述我们在用git开发是经常遇到冲突的情况,一般发生在协同开发时,一个文件被两个人同时改掉了,这是我们在pull代码时要解决冲突,并重新add然后commit最后push.这个博客记录的是另一种发生冲突的情况如何解决问题起因是在github上fork了别人的库,有一段时间没有fork更新了,算起来差不多1年时间。昨天用android studio添加了别人的库的远程仓库,准备直接fetch别人的库,然后merge到自己fork的库的分支上。之所以不用github提供的更新fork代码的.

2021-02-03 09:58:04 2110

转载 RecyclerView源码分析(四)--动画流程

看完本文你大概需要 8.3分 的毅力相关系列文章RecyclerView源码分析(一)--整体设计RecyclerView源码分析(二)--测量流程RecyclerView源码分析(三)--布局流程上一篇文章讲了RecyclerView的布局流程,发现里面大多数内容都是和动画相关的。那么这边文章就先讲RecyclerView中,数据改变发出通知到播放动画的一系列流程。RecyclerView的动画流程对于RecyclerView的动画流程,是一个非常的长的流程,那么我们先把大的东西分

2020-11-30 09:16:23 244

转载 RecyclerView源码分析(三)--布局流程

在上一篇文章中分析了RecyclerView的Measure过程。在Measure过程中的自动化Measure中,应用过布局流程的,得到Child的边界值,但是当时我们略过了,那么今天接着分析RecyclerView的布局过程。PS:源码版本为androidx1.0.0版本,如果下面与你的源码有出入,请核实版本是否相同。RecyclerView的Layout过程首先贴一下源码,不同版本的RecyclerView源码会不同,如果你也打开了源码,请确定源码版本是否一致。 protec

2020-11-23 17:44:21 211

转载 RecyclerView源码分析(二)--测量流程

RecyclerView是一个ViewGroup,那么也就是一个View。那么View的绘制过程是measure到layout到draw的一个顺序。然而一个ViewGroup的目的是盛放其它View的,那么最主要的还是其measure和layout过程。那么我们今天就来看看RecyclerView的measure过程。PS:源码版本为androidx1.0.0版本,如果下面与你的源码有出入,请核实版本是否相同。RecyclerView的Measure过程如果你这个时候也打开了源码,你应该会发

2020-11-23 17:07:27 341

转载 RecyclerView源码分析(一)--整体设计

扯淡的导语好像自从RecyclerView这个控件一出现,对这个控件使用方法的文章就层出不穷。我是一只都在使用这个控件,但是从来没有过深入的研究它。对于这样一个人人吹捧的控件,怎能不去研究一下。本想找找现成的分析源码的文章,结果并没有如愿。以前都是指望老罗,现在要亲自动手了。我是一个坚持写干货的人,这一段你就当没看到。RecyclerView这个控件出来已经有一段时间了,如果看这篇文章的你,还没有使用过这个控件。那请先去学习怎样使用。不然看也白看。这里奉上一些关于介绍RecyclerView使用.

2020-11-23 16:42:59 182

原创 ViewPager源码解析

想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。PagerAdapter 介绍 ViwePager 缓存策略 ViewPager 布局处理 ViewPager 事件处理 相关内容PagerAdapter 介绍ViewPager使用非常简单,看下面代码片段viewPager.setAdapter(new Adapter());private class Adapter extends PagerAdapter {.

2020-11-23 16:37:57 1019

原创 Android系统源码分析--Activity的finish过程

上一篇我们分析了Activity的启动流程,由于代码量很大,还是没有分析的很详细,但是基本流程都出来了,更详细的东西还是要去看源码。这一章来分析Activity的finish过程,分析一下finish的过程到底做了哪些处理,最后对Activity的整个启动过程以及finish过程绘制流程图,以方便我们记忆。finish代码分析// /frameworks/base/core/java/android/app/Activity.java /** * Call this .

2020-10-10 14:15:06 1976 1

原创 ViewRootImpl与View和WindowManager

在https://blog.csdn.net/a2923790861/article/details/108400833中,我们讲到了无论是Activity、PopupWindow、Dialog,它们最后都是调用windowManager.addView(decorView),进而调用了ViewRootImpl.setView方法来完成布局展示,那么这个ViewRootImpl到底是什么。ViewRootImpl看到ViewRootImpl想到可能会有ViewRoot类,但是看了源码才知道,Vi..

2020-09-27 16:49:27 326

原创 Activity、PopupWindow、Dialog布局加载屏幕源码分析

Activity的setContentView首先查看Activity的setContentView的方法: public void setContentView(@LayoutRes int layoutResID) { //getWindow()获取activity内部对象mWindow(PhoneWindow类型)并调用它的setContentView方法 getWindow().setContentView(layoutResID); .

2020-09-25 15:02:26 264

原创 Android Touch事件派发过程详解

Android事件投递(主要以触摸事件为主)的工作流程分为4个部分,如图所示:(1) 采集即对“硬件源”所产生的原始信息进行收集的过程。它需要Linux内核驱动的支持,Android系统则是通过/dev/input/下的节点来访问当前发生的事件。(2) 前期处理上一步采集到的信息为“原始数据”,这其中一部分内容对应程序而言并不是“必须”的,而且格式上也相对烦琐,所以需要先经过前期的提炼和转化。(3)WMS分配WindowManagerService是窗口的大主管,同时也是Inpu...

2020-09-04 18:28:37 960

转载 源码解析——LiveData & Lifecycles 完整体系详解

LiveData 作为 Jetpack 的一部分,扛着 “告知界面视图发生数据变化” 的责任,常与 Lifecycles 联合使用用于数据层驱动视图层作出变化的手段。随着项目迭代,我们的项目 MVP 架构中 rxjava 驱动更新视图演化成 MVVM 架构中 rxjava + LiveData + Lifecycles 组合,rxjava 仅仅作为数据源产生-处理的手段,最后输出到 LiveData 由其根据 Lifecycles 的生命感知作出对 UI 调整。 当然,rxjava + LiveData .

2020-08-14 17:11:23 414

转载 系统源码解析——Handler

解析背景常见于异步线程持有主线程handler对象,借助于handler发送message回调其 dispatchMessage 方法完成异步通讯 。 再者,Android 源码中大量使用handler用于 UI 线程间/线程内通讯。比如 Messener,ViewRootImpl 等等。最近在整理以前源码笔记, 就把整个源码过程都分享下 。源码解析涉及核心类Looper 类, 负责在messageQueue中读取message并调用对应 target (...

2020-08-14 15:36:39 220

原创 android xml中设置空白占位符

平时在开发遇到的问题,找到解决办法后,特此记录一下要实现下图的效果文字是左右两端对齐的,并且中间是空白解决方法是使用空白占位符&#32; == 普通的英文半角空格&#160; == &nbsp; == &#xA0; == no-break space (普通的英文半角空格但不换行)&#12288; == 中文全角空格 (一个中文宽度)&#8194; == &ensp; == en空格 (半个中文宽度)&#8...

2020-08-05 16:59:41 876

原创 android TabLayout+ViewPager滑动ViewPager、选中Tab源码追踪

TabLayout+ViewPager+Fragment的用法public class TabLayoutActivity extends AppCompatActivity implements{ TabLayout tabLayout; ViewPager viewPager; List<Fragment> fragments = new ArrayList<>(); List<String> titles = new

2020-07-30 10:30:01 518

原创 Recycleview之setAdapter源码分析

public void setAdapter(@Nullable Adapter adapter) { // bail out if layout is frozen // 如果布局被冻结的话,重新激活布局 setLayoutFrozen(false); //真正设置适配器的方法. setAdapterInternal(adapter, false, true); //设置数据集将要完全改变 ...

2020-07-23 15:53:46 875

转载 Android View体系之Touch事件传递源码解析(8.0)

技术背景从 View 体系中认识 Touch 事件传递,暂时留一条线索:" View 最原始的事件从哪里来? ”从 WindowCallbacKWrapper开始的。那么,我们开始吧!tip:阅读源码前,建议读懂Android View体系之基础常识及技巧。千里之行,始于Activity从window层开始下发事件后,Activity开始处理事件,会调用ViewGroup#dispatchTouchEvent Activity.java ...

2020-06-24 10:22:15 591

转载 源码解析 之 xml布局是如何生成view

这篇文章主要解决一个疑惑 “layout目录下XML文件是如何转化为View对象”。源码阅读不应该是味如嚼蜡,带着问题去刨根问底可能会发现不同的世界。整篇文章较长,总共分为5个小结,如果你能完整地阅读完这5节并仔细琢磨其细节,相信必定会有很大收获。如有错误之处,望指出XML to View之日常 读懂LayoutInflater并不难 寻找XML解析入口是关键 递归解析子节点 反射标签View初现你的任何问题,都可以在源码中得到答案,只是你愿不愿意而已。XML to Vieww之日

2020-06-24 10:11:53 697

转载 OpenGL ES 2.0 知识串讲 (10) ——OpenGL ES 详解IV(纹理优化)

出处:电子设备中的画家|王烁 于 2017 年 7 月 19 日发表,原文链接(http://geekfaner.com/shineengine/blog11_OpenGLESv2_10.html)上节回顾上一节学习了如何从一张原始图片中,获取生成纹理所需要的信息,然后根据这些信息,通过OpenGL ES API在GPU内存中生成了一张纹理,并且还介绍了纹理属性,知道了如何通过纹理坐...

2020-01-16 17:26:48 710

转载 OpenGL ES 2.0 知识串讲 (9) ——OpenGL ES 详解III(纹理)

出处:电子设备中的画家|王烁 于 2017 年 7 月 16 日发表,原文链接(http://geekfaner.com/shineengine/blog10_OpenGLESv2_9.html)上节回顾上面一节课,我们学习了一个OpenGL ES程序必须具备的一些API,从准备shader,到传入绘制信息,到最后的执行绘制命令。然而在上节课结束的时候,我们也提到了OpenGL ES...

2020-01-16 17:25:59 812

转载 OpenGL ES 2.0 知识串讲 (8) ——OpenGL ES 详解II(传入绘制信息)

出处:电子设备中的画家|王烁 于 2017 年 7 月 13 日发表,原文链接(http://geekfaner.com/shineengine/blog9_OpenGLESv2_8.html)上节回顾上一节讲述了如何通过 OpenGL ES 给 GPU 关联一套可以使用的 shader,这 一套 shader 是被放在一个 program 中当作一个整体供 GPU 使用的。那么 G...

2020-01-15 11:52:52 857

转载 OpenGL ES 2.0 知识串讲 (7) ——OpenGL ES 详解I(绑定 Shader)

出处:电子设备中的画家|王烁 于 2017 年 7 月 12 日发表,原文链接(http://geekfaner.com/shineengine/blog8_OpenGLESv2_7.html)上节回顾在之前的六节中,讲解了 EGL、GLSL 与 OpenGL ES 三个专业术语的概念以及它们的关系,串讲了整个绘制流程;之后分别讲解了 EGL 主要 API 的用处,以及 GLSL 的...

2020-01-15 11:51:51 620

转载 OpenGL ES 2.0 知识串讲 (6)——GLSL 语法(IV)

出处:电子设备中的画家|王烁 于 2017 年 7 月 11 日发表,原文链接(http://geekfaner.com/shineengine/blog7_OpenGLESv2_6.html)上节回顾上面两节,主要讲解了 GLSL 中变量和函数的定义语法和使用语法,现在我们可以在 shader 中自定义一些我们所需要用到的变量和函数。但是在 shader 中, 还存在着一些内置的变...

2020-01-11 17:07:21 1194

转载 OpenGL ES 2.0 知识串讲 (5)——GLSL 语法(III)

出处:电子设备中的画家|王烁 于 2017 年 7 月 11 日发表,原文链接(http://geekfaner.com/shineengine/blog6_OpenGLESv2_5.html)上节回顾上一节了解了 GLSL 中的变量类型,有一些类型是原本所熟知的,而有些类型是 GLSL 特有的。在上一节结尾的时候也提到了变量的范围,其中讲到两个 shader 所在的空间是独立的,但...

2020-01-11 15:12:04 665

转载 OpenGL ES 2.0 知识串讲 (4)——GLSL 语法(II)

出处:电子设备中的画家|王烁 于 2017 年 7 月 10 日发表,原文链接(http://geekfaner.com/shineengine/blog5_OpenGLESv2_4.html)上节回顾上一节,我们讲解了 Shader 的功能,并从预处理和注释开始,讲解 GLSL 的语法知识。想要学习和使用一门语言,必须先学习这门语言的语法,语法中除了上一节说到的预处理、注释,还有更...

2020-01-11 15:11:13 712

转载 OpenGL ES 2.0 知识串讲 (3)——Shader的功能&GLSL语法(I)

出处:电子设备中的画家|王烁 于 2017 年 7 月 10 日发表,原文链接(http://geekfaner.com/shineengine/blog4_OpenGLESv2_3.html)上节回顾在第一节中,我们介绍过 OpenGL ES 与 GLSL 的主要功能,就是往绘制 buffer 上绘制图片。其中虽然 GLSL 制作的 shader 是穿插在 OpenGL ES 中使...

2020-01-11 15:08:19 670

转载 OpenGL ES 2.0 知识串讲(2)――EGL详解

出处:电子设备中的画家|王烁 于 2017 年 7 月 9 日发表,原文链接(http://geekfaner.com/shineengine/blog3_OpenGLESv2_2.html)上节回顾上一节我们初步学习了 OpenGL ES、EGL、GLSL 的相关概念,了解了它们的功能,以及它们之间的关联。我们知道了 EGL 是绘制 API(比如 OpenGL ES)与 底层平台窗...

2020-01-11 15:07:15 1011

转载 OpenGL ES 2.0 知识串讲(1)――OpenGL ES 2.0 概括

出处:电子设备中的画家|王烁 于 2017 年 7 月 9 日发表,原文链接(http://geekfaner.com/shineengine/blog2_OpenGLESv2_1.html)写在前面的话电脑是做什么用的?电脑又被称为计算机,那么最重要的工作就是计算。看过三体的同学都知道, 电脑中有无数纳米级别的计算单元,通过 0 和 1 的转换,完成加减乘除的操作。是什么使...

2020-01-11 15:05:40 971

原创 Android开发,清屏后如何使canvas画布背景色透明。

有时候我们有这样一个需求,在按住View时在View上绘制一些东西,比如图案之类的,然后在手指松开时将绘制的东西清除掉这时候就有两种方法可以清屏1.clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));canvas.drawPaint(clearPaint);clearPaint.setXfer...

2018-11-09 11:31:07 3669

Android动态加载jar/dex,基于android studio+android开发艺术其他demo

Android动态加载jar/dex+android开发艺术其他demo,基于android studio,示例代码,需要的可看

2018-06-01

jdk1.8.0.172

用于android studio升级到3.1以后代码打包出错升级java的jdk,即可成功打包!

2018-06-01

MVP+Dagger2.5注入构造方法

MVP+Dagger2.5注入构造方法,Dagger2.5是一个依赖注入的框架。 依赖注入是一种面向对象的编程模式,它的出现是为了降低耦合性,所谓耦合就是类之间依赖关系,所谓降低耦合就是降低类和类之间依赖关系。

2018-04-08

仿云音乐黑胶唱片,以及在线歌词搜索等功能

仿云音乐黑胶唱片,以及在线歌词搜索等功能 跟之前上传的相比,多了: 1.歌词显示(实现歌词滚动功能) 2.来电监听 3.控制音量 4.在线歌词搜索,下载功能 5.修复了当手机锁屏,解锁后歌词进度等信息还是之前一首歌的bug 6.修复了返回主界面时播放状态显示不正确,进入播放详情页显示不正确 7.修复了未播放状态下点击主界面底部菜单进入播放详情页时点击播放按钮无效bug 注:在android5.1模拟器上出现bug,无法播放,其他版本暂未发现问题 还有当在线歌词有问题时程序会报错

2018-02-22

仿云音乐黑胶唱片,以及播放音乐基本功能

仿云音乐黑胶唱片,以及播放音乐基本功能,实现了基本的播放下一首上一首,拖动经度条等功能

2018-02-14

智慧北京android项目代码

智慧北京项目代码,自己写的,附带json文件!!!!!

2018-01-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除