自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

茅屋

安得广厦千万间,大僻天下寒士俱欢颜

  • 博客(108)
  • 资源 (8)
  • 收藏
  • 关注

原创 在路上

感叹2018年1月24号 22:09突然发现自己发博客的频率在逐渐的降低,找个让自己安心的理由,可能是这一年换了一个新的环境,工作压力比较大,没有太多的时间去整理一篇博客。但总归,这不是一个好的现象,应该警醒。博客是一个好的东西,能够记录自己的成长,自己的经历,能够查漏补缺,完善自己知识的深度。2017的一年,对我来说是最忙碌的一年,接触了很多新的知识,特别是Linux层面,常用的

2016-08-23 23:33:26 1241 2

原创 ./android/build-cache 下缓存分析

在jar -> dex这一步时,提供缓存,用以提高编译速度。,以gradle版本不同存于不同目录下。

2023-03-24 17:19:14 269

原创 Kotlin协程不可用(java.lang.IllegalStateException: Module with the Main dispatcher is missing)另一种可能原因

流程后产生的jar包文件内部数量超过65535,会导致。上文章的末尾有相关解决方式。Kotlin内部协程的实现,其核心源码中通过。中有相关注释描述,其核心是在。中的jar包进行裁剪,仅保留。文件,因此协程不可用。

2022-10-21 10:10:40 886

原创 JNI的三种引用

局部引用通过NewLocalRef和各种JNI接口创建(FindClass、NewObject、GetObjectClass和NewCharArray等)。会阻止GC回收所引用的对象。函数返回后,局部引用所引用的对象(如果Java层没有对返回的局部引用使用)会被JVM自动释放,或调用DeleteLocalRef释放。(*env)->DeleteLocalRef(env,local_ref)jclass cls_string = (*env)->FindClass(env, "java/la

2022-03-21 11:50:52 777

原创 Android Q 基站刷新接口源码分析 & 适配双卡手机基站刷新逻辑

一、获取基站信息的两个关键方法// 获取所有的基站信息列表// 在targetSDK < Q时,主动请求基站信息刷新并返回,// >Q 需要调用下面的方法请求刷新public List<CellInfo> getAllCellInfo() // Android Q 新增,请求基站刷新public void requestCellInfoUpdate( @NonNull @CallbackExecutor Executor executor, @N

2021-11-15 16:35:18 4597

原创 Spark编程基础总结

初始化Spark// 创建spark配置val conf = new SparkConf().setAppName(appName).setMaster(master)// SparkContext上下文对象new SparkContext(conf)RDDSSpark 核心的概念是 Resilient Distributed Dataset (RDD):一个可并行操作的有容错机制的数据集合。有 2 种方式创建 RDDs:第一种是在你的驱动程序中并行化一个已经存在的集合;另外一种

2021-09-13 20:50:51 903

原创 Android Gnss信息获取 & 绘制卫星图

Android GNSS基本信息获取Android 中GNSS为GPS定位中包含的原始定位信息,主要包含三个接口(api >= 24),提供不同信息:// GNSS处理后信息,包含一些常用信息LocationManager.registerGnssStatusCallback()==> GNSSStatus// GNSS测量原始信息,主要包括卫星时间相关,载波频率,信噪比等,更全面的信息LocationManager.registerGnssMea...

2021-04-14 14:22:18 4884 1

原创 Android Nmea信息梳理

Android中NMEA信息遵循NMEA-0183协议。NEAM-0183报文解析GPGGA(定位信息)$GPGGA,HHMMSS.SS,DDMM.MMMM,S,DDDMM.MMMM,S,N,QQ,PP.P,SAAAAA.AA,M,±XXXX.XX,M,SSS,AAAA*CC例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,M,19.7,M,0000*1F字段0:$GPGGA,语句ID,表明该语句为Global Positio

2021-04-12 14:34:39 1256

原创 Android 10基站信息变化适配

在android上基站信息的获取可以通过方法:mTelephonyManager.getAllCellInfo()但在android10上,该方法有所变动。Beginning with Android Q, if this API results in a change of the cached CellInfo, that change will be reported via onCellInfoChanged().Apps targeting Android Q or higher wi

2020-12-31 16:47:11 2167 2

原创 Android jni 集成 Address Sanitizer

Address Sanitizer该工具是google开源,用于对c++中的代码进行质量检测。具体介绍:https://developer.android.google.cn/ndk/guides/asan?hl=zh_cn按照官方的文档集成,会遇到一些问题,比如对应so找不到等。所以踩了一些坑。记录一下。集成整体思路如下:对于debug版本,集成Address Sanitizer,便于在开发期间发现问题。对于release版本,不进行集成,并避免对应的一些so添加到release中去。将对

2020-05-27 10:59:43 1138

原创 Android 如何在jni层使用Looper

概述假设现在有这样一个需求:在c++层进行定时任务,然后任务回调到主线程运行。对于在java层通过handler.postDelay()就可以实现。而在c层呢?两种思路:通过jni反调java层的handler方法做处理。在jni层获取到对应c++主线程的looper,然后进行处理第一种方式实现上很简单。第二种方式google提供了jni层对应的库,地址https://develop...

2020-04-28 18:13:56 2015 2

原创 Android jni 线程同步

概述android中可以通过jni调用native的方法,那么如果在java中存在多个线程调用native的方法,它的展现形式是如何呢?先说结论:native的默认执行与java调用的线程保持一致,即处于同一个线程中。其次,如果多个线程调用native方法,也存在线程不安全的情况,需要解决。问题示例c++层提供两个native方法,分别是add和getint i = 0;exte...

2020-04-19 13:58:02 756

原创 多线程 - CountDownLatch总结

问题当主线程的任务执行,需要依赖多个子线程运行结束后才能往下执行时如何解决,比如文件分段下载,同时开启多个子线程进行文件的分段下载,当下载完成之后,再进行组装。有一种解决方式,便是在子线程下载完成之后,都进行子线程的回调并判断是否所有子线程都已经执行完毕。而CountDownLatch便是java在1.5提供的解决如上问题的工具类阿里的ARouter的拦截器相关,就是用该工具类概述Co...

2020-04-04 21:49:36 373

原创 HandlerThread总结

概述在android中,如果子线程想主线程发消息,可以通过handler。而主线程想往子线程发消息,需要子线程调用Loop.prepare() & Loop.loop()。这是由于handler的使用依赖Loop,而在主线程中,默认已经进行了Loop的初始化工作,并保存到了主线程里,子线程并没有。有一种简单的方式,便是通过HandlerThread,他内部维护了一个消息队列,并在子线程...

2020-04-04 21:24:57 238

原创 Android传感器简单总结

后续不断完善概述Android 平台支持三大类传感器:动态传感器这类传感器测量三个轴向上的加速力和旋转力。这个类别中包含加速度计、重力传感器、陀螺仪和旋转矢量传感器。环境传感器这类传感器测量各种环境参数,如环境气温、气压、照度和湿度。这个类别中包含气压计、光度计和温度计。位置传感器这类传感器测量设备的物理位置。这个类别中包含屏幕方向传感器和磁力计。具体类型...

2020-03-29 10:26:25 809

原创 Activity 启动流程

一下分析基于从Launcher点击图标打开一个app进行分析对于该流程,总共分为三个进程,分别是Launcher进程,AMS进程和app进程,以下会根据该进程流程进行分析。Launcher进程,用户点击LauncherActivity该页面是桌面的页面,其对应的图标回调如下: @Override protected void onListItemClick(ListView l,...

2020-02-08 16:54:44 360

原创 解决Gradle下载慢的问题

gradle在更新版本时,下载的会非常的慢,往往半个多小时还不能下载成功。现在gradle提供了加速的下载点。只需要修改工程目录的gradle目录下的gradle-wrapper.properties的下载链接。从services.gradle.org修改为downloads.gradle-dn.com。即原内容distributionBase=GRADLE_USER_HOMEdistr...

2019-10-14 11:50:40 1468

原创 Android 单元测试实战(3)—— 基于Cobertra&sonarqube的单元测试覆盖率统计

Jacoco在聊到单元测试覆盖率的时候,基本上都会使用jacoco做覆盖率检测,但通过集成发现与Powermock有兼容性问题。对于Powermock上使用@PrepareForTest的类,都无法检测覆盖率。导致覆盖率几乎为0。Powermock的开发者也表明是由于底层实现逻辑上,与jacoco冲突导致的。计划未来去解决该问题。jacoco提供了一种静态的代码覆盖率检测,但搞了很久,使用...

2019-09-23 11:23:24 765

原创 Android 单元测试实战(2)—— 基于Powermock的常用方法指南

上一篇中,基于调研和分析,决定使用Powermock完成单元测试的编写。关于Powermock的使用方式,网上有很多的文章进行解释,下面仅仅介绍一些在Android上的常用姿势。随着时间推移,该文章会不断完善。Mock vs SpyPowermock提供了mock和spy两种方式,对于Activity的私有方法的调用验证通常需要做方法模拟。mock和spy都可以实现,mock是默认对有方法...

2019-09-23 11:07:59 1779 1

原创 Android 单元测试实战(1)—— 调研与选型

Android 单元测试实战(1)—— 调研与选型单元测试搞了一段时间,发现网上很多关于单元测试的文章都是讲了概念,讲了框架的使用,但对于一个实际的项目的操作,因为项目的复杂性,框架的稳定性等,确往往无法进行。本篇博客从实际出发,基于实际的项目总结而出。本系列文章不会涉及到单元测试的概念,以及它的各种现实意义。仅从实现入手,关于它的优劣不做分析。单元测试系列会分为三篇博客:Andro...

2019-09-19 11:43:04 466

原创 ARouter源码分析(四)—— 缓存与优化

Arouter源码分析系列建议从最初开始阅读,全部文章请访问https://github.com/AlexMahao/ARouter本篇博客意在记录ARouter中的一些优秀策略。辅助类加载机制ARouter在实现基本功能时,使用apt在指定包名下生成了一些辅助类。辅助类的查询逻辑如下。if (ARouter.debuggable() || PackageUtils.isNewVers...

2019-04-25 15:37:19 1351

原创 ARouter源码分析(三)—— Provider源码分析

Arouter源码分析系列建议从最初开始阅读,全部文章请访问https://github.com/AlexMahao/ARouter在之前分析拦截器时,发现拦截器的基础服务InterceptorService是通过Providers的方式构造实例对象的。于是以下进行Providers的分析。首先看一下InterceptorService的相关声明类。public interface In...

2019-04-25 14:27:28 769

原创 ARouter源码分析(二)—— 拦截器源码分析

Arouter源码分析系列文章,请访问https://github.com/AlexMahao/ARouter在分析路由跳转时,最终的跳转会判断是否是绿色通道,如果不是,将会走拦截器相关的逻辑。 // 如果不是绿色通多,拦截器做拦截 if (!postcard.isGreenChannel()) { // It must be run in async thread, ...

2019-04-25 11:56:05 349

原创 ARouter源码分析(一)—— 路由跳转分析

相关工程githubhttps://github.com/AlexMahao/ARouter逻辑分析Arouter的路由跳转整体可分为三个步骤:编译时期利用Processor生成路由清单文件。运行时期加载路由清单文件。跳转时期根据标识符查询路由清单,完成路由地址跳转。编译时期 arouter-compilerRouteProcessor是处理路由清单生成的类。其初始化方法如下...

2019-04-24 14:52:21 419

原创 App Crash崩溃捕获

App Crash崩溃捕获参考 https://github.com/android-notes/Cockroach原理简述利用Thread.setDefaultUncaughtExceptionHandler()设置崩溃捕获。利用Handler & Looper构造新的消息队列,重启应用。Looper循环Handler机制就是在一个死循环内部不断取走阻塞队列头部的Me...

2019-04-16 10:55:40 590

原创 SimpleTouch:以稍微(zui)简单的方式解决Android事件分发流程

该库已经开源到github,地址https://github.com/AlexMahao/SimpleTouch目标一个用于监听android事件分发流程的库,两行代码即可在运行时期监听事件的分发流程。在编写一些复杂的布局时,常常由于事件分发到底是哪个view处理产生困扰,做法通常需要经过以下步骤:自定义一个View,重写disaptchTouchEvent等方法。添加log...

2018-12-03 10:22:51 383 1

原创 support-v7是如何将TextView替换为AppCompatTextView的?

日常在使用AppCompatActivity的时候,发现对于在xml中编写的布局最终都会变成Compat...等控件,那么是如何实现这种全局的控件替换的呢,这是此次分析的如要问题。AppCompatActivity的setContentView()首先,我们猜想,会不会是AppCompatActivity重写了setContentView()做了一层封装呢,基于这种猜想,看一下它里面的实现方法...

2018-11-28 16:30:22 1935

原创 重构——代码坏味道&重组函数.md

代码的坏味道Duplicated Code ( 重复代码 )如果你在一个以上的地点看到相同的程序结构,那么设法将它们合而唯一,程序会变得更好最单纯的Duplicated Code 是同一个类的两个函数含有相同的表达式另一种常见的情况分就是两个互为兄弟的子类内含相同的表达式。Long Method ( 过长函数 )每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函...

2018-09-25 16:06:07 513

原创 Android自动化测试之XPath相关总结.md

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。XPath简介XPath 是一个 W3C 标准 , XPath 于 1999 年 11 月 16 日 成为 W3C 标准。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。XPath节点在 ...

2018-09-20 14:24:29 2492

原创 MultiDex加载流程分析

MultiDex加载流程分析 只介绍主要流程,multiDex源码已经上传到https://github.com/AlexSmille/google-android-support-source-analyze,包含了BaseDexClassloader等一些android源码。1.判断当前是否需要动态加载类在5.0以上,会自动加载一个apk中所有的classesX.dex,...

2018-07-05 16:51:58 1281

原创 Android P非公开sdk适配指南

Android P非公开sdk适配指南 因为博客中提到的地址需要通过代理才能访问,所以将对应地址下的内容已打包,有需要者可以下载https://download.csdn.net/download/lisdye2/10513405非公开sdk说明在P上,谷歌提出调用非公开sdk限制的说明,但为了各大应用便于逐渐迁移,推出了三个主要的名单。浅灰名单(light greyl...

2018-07-02 11:29:47 3385 8

原创 Flutter 概览

Flutter概览什么是flutterFlutter 是一套跨平台的开发框架,适用于Android,ios,fuchsia(google计划的操作系统),能够实现一套代码编译成不同平台的app。Flutter相较于RN的区别在于Flutter是基于skia的直接渲染,和平台无关。而RN是对不同平台的控件的向上抽象封装,不可避免的会有适配性等各种问题。Flutter Widget...

2018-06-26 11:55:21 2341

原创 adb相关命令

adb相关命令devices 查看相关设备logcat 查看日志adb logcat -s FastJsonRequest :显示指定标记的logadb logcat -c : 清楚日志的缓存adb logcat | grep WIFI 管道过滤,每行包含指定信息时打印adb logcat | grep -i WIFI 过滤时忽略大小写adb logcat | grep "E...

2018-06-08 11:57:59 384

原创 git 相关命令

git 相关命令addadd 将相关文件添加到暂存去git add xxxgit add .commitcommit:将代码提交到本地仓库git commit -m "提交描述"git commit --amend 补充上次提交pullpull: 将远程的某个分支和本地仓库的某个分支进行合并git pull &lt;远程主机名&gt...

2018-06-08 11:57:07 249

原创 Android 官方架构 --- Lifecycle分析

Android 官方架构 — Lifecycle分析Lifecycle 是android 官方推出的官方架构中的其中之一,他是生命周期感知的,即他能够监听Activity和Fragment的生命周期,并且回调相应的方法,同时他能够实时的获取当前Activity和fragment的状态。Lifecycle已经发布了release版,所以其中的一些默认支持已经包含到了support-v7:26...

2018-06-08 11:55:00 2158

原创 CentOS 配置 Tomcat

安装jdk1.下载jdk1.8下载tar.gz包下载文件传输脚本lrzszyum -y install lrzsz切换到指定命令并上传文件cd usr/local 输入rz命令解压jdk包tar zxvf jdk-8u66-linux-x64.tar.gz设置jdk环境变量打开配置文件vi /etc/profile在最后...

2018-06-03 21:36:26 643

原创 Java中Lambda表达式和Groovy闭包的相关解析

Lambda名词释义Lambda表达式表示匿名函数,和匿名类对比,及不需要声明函数的方法名和返回值,用表达式的形式完成函数的参数和相关逻辑。Lambda表达式应用于Groovy和Kotlin中,作为实现函数式编程的关键(函数式编程是指一个函数能够作为另一个函数的入参)。而在JDK8中支持了对Lambda表达式的应用。基本使用java中对lambda表达式的声明不像Kotlin等

2018-01-24 22:00:43 5068

原创 记一次linux上部署android环境相关命令

服务器链接ssh [email protected] :  链接远程服务器,@前表示用户名,@后表示服务器ip地址,之后会弹出输入密码相关选项。scp xx.apk [email protected]:/home/android/ :传输文件,第一个参数为源文件,后跟服务器地址路径,服务器地址和目录以:隔开挂载磁盘df -h:查看磁盘挂则和使用情况root@localhos

2018-01-02 17:21:11 460

原创 Android Behavior之相关解析

如果不了解Android嵌套滚动,最好看一下我之前的文章 Android 嵌套滑动——NestedScrolling完全解析,当然不了解对本篇文章的阅读也不会有太大的阻塞。第一个简单的自定义Behavior在Android 5.0 的时候推出了CoordinatorLayout控件,该控件从翻译上来说称之为 协调性布局,我的理解是,对于他下面的子控件的布局,大小,滚动等等一系列的东西,由每一个子控

2017-10-25 17:28:40 3062

原创 Android 嵌套滑动——NestedScrolling完全解析

基本的事件分发流程对于一次从父布局到自布局的触摸事件流程分发,关键便是在三个方法上的流程处理dispatchTouchEvent(),onInterceptTouchEvent(),onTouchEvent()。由于和NestScroll相关,所以不细致分析到View层面上的事件分发。对于事件分发的触摸大致可分为按下(DOWN),移动(MOVE),抬起(UP)。按照这三个事件,流程分析如下:按下(

2017-10-25 17:21:33 2069

GpsSkyView.java

基于GNSS信息绘制卫星分布

2021-04-14

sanitizer.zip

Address sanitizer相关so,用于jni的c++代码质量检测,包括arm下的so文件以及对应下的wrap.sh文件

2020-05-27

non-sdk-list-and-veridex-2018-07-02

Android P 非公开sdk适配资源,包含了灰名单和黑名单,同时包含检查应用调用非公开sdk的工具类

2018-07-02

Apache commons jar 包

Android 文件上传服务端所需jar包

2016-08-16

ant-contrib-1.0b3.jar

Ant 打包时,如果使用if等条件语句,需要导入的jar包。

2016-08-02

okhttp3.3.1与okio-1.8.0

okhttp3.3.1与okio-1.8.0的jar包

2016-06-29

apktool_2_1_1

android 编译和反编译工具 apktool

2016-06-17

Ultra-pull-to-refresh 三方库

该工具类库是从Ultra-pull-to-refresh中抽取出来的相关代码,实现的类库。该类库为Ecplise版本,直接导入到Ecplise中并依赖即可

2016-05-18

空空如也

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

TA关注的人

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