自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 使用breakpad收集native奔溃日志及dump解析

使用breakpad收集native奔溃日志及dump解析本文是学习使用breakpad的一个总结,在这过程中看了很多博客,但是相对有用的有以下几篇:Android使用Google Breakpad进行崩溃日志管理breakpad的正确编译和常规用法Google Breakpad 学习笔记环境:win10 linux 子系统,ubuntu 20,android-ndk-r20一、源码编译先到github下载google/breakpad的源码,在ubuntu下编译。总共遇到了三个问题(实

2021-11-15 00:01:37 3511 1

原创 Android Camera NV21图像裁剪

/** * 任意裁剪YUV420SP格式,这种存储格式决定了 left, top, clipW, clipH 必须是偶数。 * 如果传进来的不是偶数,函数内部会处理成偶数,left、top会向右下或者左上偏移一个像素 * 显示的图像颜色不对,不是绿就是蓝。 * 裁剪的原理: * 1. NV21(YUV420SP)的存储格式:先逐行存储Y,再交叉存储VU,Y的大小是width*height,VU的大小是 width*height/2; * 2. 裁剪时,可以想象原始数据byte[] src是一个二

2020-08-08 12:07:54 1888 9

原创 动手写一个Android运行时权限申请帮助工具

目录概述运行时权限申请流程如何实现如何使用项目地址感谢概述Android系统不断更新,对隐私安全方面的控制越来越强。因为隐私安全条款不断更新,有时候会因为运行时权限专门发一个app补丁版本。原生申请运行时权限相对来说较为麻烦,而且都是模板代码,如果直接使用,则需要重复大量的模板代码。所以,有必要为运行时权限申请写一个方便工具。github中不乏现成的优秀的运行时权限项目,如:AndPermission,还有一些甚至使用了AOP来实现的。那么为什么还要重复造轮子?不是开玩笑,主要是因为闲的,时间允许

2020-07-25 16:39:45 207

原创 浅谈Android SDK开发

概述最近接到一个需求,把现在开发的app,包装成一个SDK,对外提供接口,让第三方应用集成我们app的能力。简单描述一下项目的现状,一个壳工程module:app_shell,项目主要代码在app module,其它还有简称为:lib1,lib2,lib3,lib4,lib5,五个module,其中,app依赖lib1-lib5,lib1-lib5部分相互之间也有依赖。前前后后投入来大概五个工作日的时间,勉强实现封装app及其依赖的模块为一个aar。为什么要这么久?难道不是改app的build.grad

2020-07-16 00:41:58 1821

原创 Flutter开发环境搭建

Flutter学习笔记: 开发环境搭建针对所有平台:windows、mac、linux,假定已经安装了git,并且已经添加到环境变量Windows 环境搭建1.使用国内镜像在用户环境变量下添加两个变量(和path同一级,新建两个变量即可):PUB_HOSTED_URL=https://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn(目前不使用国内镜像是可以的,可以不配置)2.获取Flutter

2020-06-10 23:13:55 216

翻译 AspectJ 编程指南

title: AspectJTM 编程指南created: ‘2020-05-19T07:52:07.055Z’modified: ‘2020-05-19T10:27:10.370Z’AspectJTM 编程指南AspectJ 团队Copyright © 1998-2001 Xerox Corporation, 2002-2003 Palo Alto Research Center, Incorporated. All rights reserved.摘要:本编程指南描述了Aspect语言,.

2020-06-07 22:16:16 501 1

原创 Android屏幕适配方案: AutoDensity&smallest-width

目录前言一、屏幕适配的重要概念1.1 屏幕尺寸、屏幕分辨率、屏幕像素密度1.2 px、dp、dip、dpi1.3 mdpi、hdpi、xdpi、xxdpi1.4 values-sw[xyz]dp二、smallest-width适配方案三、AutoDensity适配方案四、最佳做法五、参考前言一个Android开发工程师,在其入门后遇到的第一个考验估计就是屏幕适配。按照谷歌的适配规则,使用wrap_content、match_parent、dp等,当UI工程师换一个设备验收时,提出各种问题。这时候,估计很

2020-06-07 14:38:43 1161 2

原创 Android WorkFlow 助你轻松构建复杂流程

概述有时候会遇到这样一种需求,

2020-05-17 23:07:59 796

原创 一行代码实现Android App指引

目录概述指引需求分析入门级指引升级版指引指引需求的抽象指引的技术实现指引的要素:Shape封装指引步骤:GuideInfo绘制指引要素:GuideView管理指引:GuideManager承载GuideView的载体:GuideDialog接入项目关键技术点定位高亮区域绘制高亮的View区域高亮区域点击事件优缺点项目地址总结概述前几周app改版,在修改老代码的过程中发现了一个指引,让我想起很久以前项目里指引实现是在布局文件中添加布局,并在代码中插入很多非业务的代码,这样写感觉不好。指引本只是一个不太重要

2020-05-16 13:54:34 2293 4

原创 HashMap源码分析

概述HashMap实现了Map<K, V>接口,通过键-值(key-value)的方式存取数据。内部的数据结构是数组+链表(或者Tree),插入时通过key的hash值,映射((n - 1) & hash,其中n为数组的长度)到数组中的位置,如果hash值重复,则在链表的末端插入(当一个链表中的数据大于等于8个时,就将链表转变为Tree),而当数组达到一定值时,会resize...

2020-02-06 11:32:34 331 2

原创 一个Socket通信案例

概述到了新的公司,开始新的工作已两个月有余,从一个坑跳到了另一个坑,就直接说说现在遇到的问题吧。公司的产品客户端需要通过socket和C++后台交互,既然是socket,也就这么一个流程:通过配置文件,解析服务器的地址和端口;打开socket通道,建立和服务器的长链接;和服务器通信;应用退出,关闭连接。问题在这里,和服务器通信,拿到一个完整的消息后,通过解析指令的参数,进行不同的处理,我接手的代...

2020-01-30 14:00:19 687

原创 一次CPU使用率100%引发的思考

一次CPU使用率100%引发的思考最近要发一个版本,临了测试在挂机的时候发现一个CPU占用高,导致App卡死的bug。经过这次bug真切感受到写代码完成功能容易,一旦代码量上去了,出问题的时候如何定位就是个难题。为了尽可能少地避免这种上线后出现问题,出现问题后及时修复,掌握必要的问题分析工具和严谨的日志记录是一个程序员的基本素养。本次事件对app开发的启示和使用的工具方法等:必须有一个...

2019-12-15 23:49:22 454

原创 记一次Android UI适配填坑经过

记一次Android UI适配填坑经过概述Android的多屏幕适配算是一个老生常谈的话题,也是一个Android应用开发工程师的必备技能。Android设备五花八门,屏幕小到手表,大到几十上百英寸的TV,相同分辨率,不同屏幕尺寸,相同屏幕尺寸,不同分辨率,还有各大厂商的不同系统固件…一个app,要做这么多适配工作,真是太难了。言归正传,最近加入了一个没有自带屏幕的android设备项目组,...

2019-12-01 22:25:02 405

原创 从观察者模式的角度分析 Lifecycle-aware components

前言使用RxJava2有一段时间了,由于没有认真去研究过,一直停留在简单的使用阶段,更准确地说是在Retrofit中配合RxJava2CallAdapter使用RxJava2的强大能力。心血来潮(迫切需要),想了解下RxJava2可能导致的Activity内存泄漏问题。先是看了一下RxLifeCycle,浏览了不少博客,其中有一篇说到,RxLifeCycle的作者已经不推荐使用这个项目了,而推荐...

2019-09-01 09:20:19 376

原创 Ubuntu 16.04/18.04/20.04 LTS Android 7.1 RK3399编译环境

Ubuntu 16.04 LTS 编译 Android 7.1编译环境系统: Ubuntu 16.0.4,U盘安装即可(不要双系统或者单独安装)gcc/g++: 5.4.0 (系统自带,不用自己安装)python: 2.7.12 (系统自带,不用自己安装)GUN make: 4.1 (系统自带,不用自己安装)OpenJDK 8: sudo apt-get install openj...

2019-08-31 18:26:10 1883

原创 Android自定义View-矩形圆角进度条

参考Android Canvas 绘制 剪切 clip 与 几何变换Android Canvas绘图详解(图文)

2019-08-13 23:16:21 1604 1

原创 Android自定义View——电池

最近的工作中有一个需求,需要显示电量,产品说前面的开发已经做了,就在另一个项目里,复制过来就好了。行,那就复制呗,结果一看,真是惊呆了,用的是一个layer-list的drawable,里面就11种状态,从0到100%。如果要显示11%呢,怎么办?好吧,这种坑已经见怪不怪了,相对于其它坑,这算不上问题,填坑吧。

2019-08-06 23:58:40 823

原创 如何优雅地使用GreenDao

前言数据库是Android开发中的重要部分,通常我们不会使用SDK中的Sqlite API,而是使用第三方的ORM框架,如 GreenDao。在实际的开发中,发现一件比较有意思的事(体现了无组织无纪律):同一个小组里面的几个同事,每个同事都有自己的使用方法,有的同事比较狂放不羁,不在乎细节,写一个包含Database和DaoSession对象的单例模式,满世界调用getDaoSession(),...

2019-01-12 21:04:45 270

原创 一个Android Log框架

一个易用、高性能、可扩展的 Android Log概述Log 需求欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowc...

2019-01-03 22:45:30 842

原创 Jenkins 持续集成之使用批处理替换文件中的目标字符串

Jenkins 持续集成之使用批处理替换文件中的目标字符串一、背景在 Android 项目开发中使用 Jenkins 持续集成,将可以解耦的 module 作为一个独立项目,然后在 Jenkins 上自动打包,推送到 maven 私服,最后主工程通过 gradle 将 aar 包添加到项目中。一般情况下,当 module 的版本发生改变时,只需要修改build.gradle 中的 versio...

2018-09-27 22:12:02 3893

原创 七牛云存储之文件上传(Android)

七牛云存储之文件上传项目中要用到七牛云存储,用于存储用户的文件数据,于是,看了一下七牛的文档(Android SDK 和 Java SDK),写了一个 demo 。本文记录一下 android 端上传文件到七牛服务器的步骤,并对七牛云存储使用的一些问题作出了一些思考。demo 实现了单个文件上传,多个文件上传,多个文件排队上传。详情请参考七牛官方文档。一,注册七牛账号,并创建存储空间注册...

2018-09-26 20:12:06 4379 3

原创 搭建Maven(Nexus)私服—实现模块化开发

搭建Maven(Nexus)私服概述在开发过程中,需要集成Unity的资源,有190M。由于Unity修改比较频繁,git仓库越来越大,很快就达到了2G,由于还有很多其它module,每次构建都要很长的时间。为了减少clone的下载时间,提高构建速度,尝试将Unity资源打包为一个aar资源上传到maven私服,然后通过依赖引入到主工程,其它独立的module也可以这样操作。这样做的优点有一,...

2018-09-25 16:05:49 427

原创 那些会上瘾的Kotlin语法

那些会上瘾的Kotlin语法Kotlin有毒,用过就上瘾……略有夸张,其实就用来写了个记录POI和轨迹的demo而已,不过感觉语法确实很简洁。在此总(板)结(书)一下Kotlin与Java的不一样,或者说比Java更简洁、优雅的语法和特性。1.字符串模板相比于Java的字符串拼接,Kotlin的字符串模板更紧凑:fun main(args:Array&lt;String&gt;...

2018-03-01 01:21:37 348

原创 Android流畅度优化

Android流畅度优化流畅度对于任何产品来说其重要性不言而喻,相对于iPhone,Android手机的一个诟病就是卡…为了在后续的开发中避免卡顿问题,细读了腾讯TMQ专行测试团队出品的《移动App性能评测与优化》,本文内容是阅读此书的笔记。评判流畅度的标准FPSFPS:Frames per second,计算方法(来自当我们讨论流畅度的时候,我们究竟在说什么?)

2018-01-28 13:00:11 767

原创 OOP->设计原则->设计模式->架构模式

这次,想码一下软件开发的内功心法:面向对象的基本特征,类关系,设计原则,设计模式,架构的概念。一、面向对象面向对象有四个基本特征:抽象,封装,继承,多态1. 抽象忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口)。抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分

2018-01-07 12:59:46 1996

原创 Android 内存问题与优化避免

比起前几年,现在的 Android 设备拥有更大的内存。但是,即使现在可以使用更多的内存,也是有一个上限的,具体大小和各个厂商的设置有关。如果内存使用不当,还是会影响到APP的性能。内存问题主要有两类,一是内存溢出,二是内存泄漏。解决内存问题,主要靠借助工具检测分析,然后做代码优化。一、Android 应用开发中的内存问题1.1 单个进程可用内存限制目前的 Android 设备,动辄4G、6G甚至8

2017-11-21 23:44:48 423

原创 Android 的异步消息处理机制

Android 的异步消息处理机制线程是CPU独立运行和独立调度的基本单位,在 Android 中主线程,又叫UI线程,这是一个特殊的线程,任何耗时的操作最好不要在UI线程中执行,因为这有可能造成 ANR(详情请参考Android ANR 原因分析与检测)。so,耗时任务只能在其它线程搞事,完成后再通知 UI 线程更新界面。这就需要理解Android的异步消息处理。关于 Android 的异步消息处

2017-11-12 19:18:22 230

原创 使用Gradle构建Android应用

使用Gradle构建Android应用最近重读 Gradle for Android 一书,发现以前囫囵吞枣式的阅读只了解到点皮毛。重读一次,收获颇丰,想着结合实践,做做笔记。本文从统一配置依赖管理,高级配置,多模块构建,创建构建变体,运行测试,构建过程,创建任务和插件,Jenkins持续集成设置,这几个方面总结gradle是如何配置,构建,测试 Android项目的。一、统一配置依赖管理使用And

2017-11-06 23:53:34 359

原创 Git 常用命令与分支管理模型总结

Git 常用命令与分支管理模型总结Git Reference Git 分支模型本文目的是列出常用的git命令,并简单总结一下Git分支管理模型:分支管理 查看创建分支提交 合并多个commit选择合并某个commit解决冲突 文本文件冲突zip文件冲突版本回退 回退到某个commit回退到某个操作查看日志log分支管理模型 master 分支develop 分支f

2017-10-15 23:24:34 364

原创 Android ANR 原因分析与检测

ANR,即应用程序不响应(Application Not Responding)。在主线程中进行某些耗时操作,超过一定时间,系统就会弹出ANR对话框。此时可以选择等待,让程序跑完,也可以选择关闭应用程序。 一、 ANR 原因分析只有当应用程序的UI线程响应超时才会引起ANR,超时产生的原因一般有两种:当前事件没有机会得到处理,例如UI线程正在响应另一个事件,当

2017-09-27 00:02:27 1783

原创 Android Crash日志收集

概述在Android应用的开发过程中,总会遇到应用程序Crash。在编码阶段,设备连接到PC,可以在Android Studio的Logcat中可以查看Crash的信息。但是很明显,靠这种方式收集Crash日志修改bug,实在是太不靠谱,一旦APP发布测试甚至生产环境,如果没有一个Crash日志的反馈,那么将会是一个噩梦,所以本文的目的:实现自定义的UncaughtExceptionHandler

2017-09-21 21:27:10 2921 1

原创 Kotlin 基本语法

概述本文对这几天学习Kotlin作一个简单总结,大概包括Kotlin的基本数据类型,集合类型,控制流,基本语法,类与对象。Kotlin是 JetBrains 开发的基于JVM的一门新语言,它是一门全栈语言,用于开发服务端,Android,JavaScript。今年Google将Kotlin选作Android的官方开发语言,作为一个Android应用开发者很有必要学习一下这门官方语言。简单学习了几天后

2017-09-18 00:09:19 465

原创 Jenkins持续集成环境部署

Jenkins持续集成环境安装概述Jenkins用来做啥?持续集成,软件的自动构建,测试,发布,实现自动化和流程化,提高效率,便于管理。为什么要用Jenkins?机器能完成的事,就不要开发人员去手动操作,第一,提高效率,第二,减少手工误操作,将开发人员从繁琐、无聊的构建、发布工作中解放出来,专注于业务和编码的设计实现。本文的目标是在CentOS 7系统上安装部署Jenkins,实现Androi

2017-09-10 10:05:54 966

空空如也

空空如也

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

TA关注的人

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