薛瑄的博客

不论是技术还是生活,你遇到的每个困难,都是一次提升自己的机会。努力解决好每个困难,你将成为更优秀的自己
私信 关注
薛瑄
码龄8年

高级Android 工程师

  • 2,865,452
    被访问量
  • 254
    原创文章
  • 843
    作者排名
  • 14,180
    粉丝数量
  • 于 2012-10-04 加入CSDN
获得成就
  • 博客专家认证
  • 获得1,024次点赞
  • 内容获得416次评论
  • 获得1,161次收藏
荣誉勋章
兴趣领域
  • #人工智能
    #语音识别
TA的专栏
  • 源码系列
    19篇
  • Android
    95篇
  • Android Studio编译或构建错误汇总
    13篇
  • Android WiFi 开发
    6篇
  • Linux
    9篇
  • 软件工程
    13篇
  • kotlin
    2篇
  • Java
    36篇
  • Binder
    3篇
  • Android View
    6篇
  • Android WiFi
    6篇
  • Glide
    22篇
  • ZXing
    1篇
  • RxJava
    8篇
  • Retrofit和OkHttp
    4篇
  • Data Binding
    1篇
  • Dagger 2
    2篇
  • JSON
    2篇
  • lambda
    2篇
  • Android性能优化之内存篇
    6篇
  • Android性能优化之渲染篇
    1篇
  • 算法
    8篇
  • NDK
    10篇
  • Git
    11篇
  • Android Studio
    14篇
  • ADB
    7篇
  • Gradle
    11篇
  • Maven
    2篇
  • Android Studio编译构建错误
    30篇
  • Android SDK 相关
    2篇
  • Spring Boot
    4篇
  • Spring Cloud
    3篇
  • mybatis
    3篇
  • Spring-Maven 编译构建错误
    3篇
  • RSA
    2篇
  • 刷机
    4篇
  • C-C++
    2篇
  • 视频
    2篇
  • 网络
    3篇
  • 电脑硬件
    3篇
  • Eclipse
    1篇
  • iOS
    6篇
  • Xcode
    5篇
  • Mac
关于我

1、我的Github https://github.com/JantHsueh


2、单Activity + 多Fragment 架构库Fragmentation ,欢迎star issue https://github.com/JantHsueh/Fragmentation


3、我的公众号,你关不住或不关注,我就在这里☺☺☺,你快点动手吧 薛瑄公众号


  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Kotlin Coroutine 源码解析(1) —— 协程是如何运行的

前言在刚接触协程的时候,就产生了一个疑问,协程到底有没有创建线程,如果有,那它和线程池有什么区别?如果没有,为什么在android的主线程中不会 阻塞,了解Android源码的 应该猜到了,肯定是创建了子线程,不然 就会报异常了。那协程又是如何保证任务能切换到主线程呢? 下面就带着这几个问题,来分析协程的源码示例用下面的示例 模拟获取token,请求网络的过程。顺序执行,不会阻塞当前线程,fun main() { GlobalScope.launch { println("开始 ")
原创
71阅读
0评论
1点赞
发布博客于 2 月前

缓存——RecyclerView源码详解(二)

前言这篇文章,继续RecycleView 的分析,来看看 从缓存获取View和 把View保存到缓存中缓存的相关都是交给 Recycler 类来处理的,包括存储缓存,获取缓存等。缓存的数据类型是ViewHold,它包含了itemView,mPosition 等Item的信息从缓存获取ViewHold先来了解Recycler中五个变量,每个变量都与缓存相关,按照缓存获取的顺序来逐一介绍一级缓存:返回布局和内容都都有效的ViewHolder按照position或者id进行匹配命中一级缓存无需o
原创
134阅读
0评论
2点赞
发布博客于 3 月前

整体流程、Measure、Layout 详解——RecyclerView源码详解(一)

前言整体流程、measure、layout 详解 ——深入分析RecyclerView源码(一)缓存 ——深入分析RecyclerView源码(二)滑动和动画 ——深入分析RecyclerView源码(二)本篇文章分析主体流程,先来整体看一下RecycleView的 结构图片来自RecycleView 是一个ViewGroup,想要显示数据集Datas,需要通过适配器Adapter,把数据转为对应的View,这样就可以添加到RecycleView中了。(适配器模式)由于屏幕能显示View
原创
329阅读
0评论
5点赞
发布博客于 3 月前

Android 图形架构 之六——深入分析draw()是如何工作的

前言前面我们分析了 app进程中的 addView 的执行过程,其中涉及到了ViewRootImpl,WMS,Session,WindowState,Surface 等等,最后分析到performDraw() 函数,接下来,我们就继续来分析,带着两个问题,它是如何把数据写入生产者队列的,已经SurfaceFlinger 何时开始处理的?Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 启动和连接Android 图形架构 之三—— 创建Layer
原创
403阅读
0评论
2点赞
发布博客于 4 月前

Android 图形架构 之五—— 深入分析addView所发生的的一切

前言前几篇文章,分析了在SurfaceFlinger 进程,WMS进程 中,图形架构的流程和关键类的介绍。现在我们来分析一下,app进程中是如何与这些进程进行交互,以及何时交互。Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 启动和连接Android 图形架构 之三—— 创建Layer、Surface、SurfaceControlAndroid 图形架构 之四——图形缓冲区的申请和消费流程及核心类Android 图形架构 之五——深入分析
原创
531阅读
1评论
1点赞
发布博客于 4 月前

Android 图形架构 之四——图形缓冲区的申请和消费流程及核心类

前言Android应用的UI显示到Display的过程中,SurfaceFlinger扮演的角色只是“Flinger”,就是定于检查Layer更新,然后计算DirtyRegion,然后将结果推送给底层显示驱动进行显示。应用层把UI内容 写入到GraphicBuffer,SurfaceFlinger读取数据后 ,合成显示。BufferQueue 是用来管理GraphicBuffer的一、生产者消费者模型对GraphicBuffer的管理 使用的是生产者消费者模型,app 产生数据,通知SurfaceF
原创
2514阅读
3评论
8点赞
发布博客于 4 月前

Android 图形架构 之三—— 创建Layer、Surface、SurfaceControl

前言上一篇我们分析了,app与SurfaceFlinger建立连接的过程,现在我们就可以继续往下分析,看下创建Surface的过程。我们可以将Surface理解为一个绘图表面,Android应用程序负责往这个绘图表面上填内容,而SurfaceFlinger服务负责将这个绘图表面的内容取出来,并且渲染在显示屏上。概述在Android中,Window与Surface一一对应。 如果说Window关心的是层次和布局,是从设计者角度定义的类,Surface则从实现角度出发,是工程师关系和考虑的类。Windo
原创
1048阅读
1评论
1点赞
发布博客于 4 月前

Android 图形架构 之二—— SurfaceFlinger 启动和连接

上一篇文章从全局来分析了Android 图形架构,本篇文章来分析SurfaceFlinger,surface的创建、图像的处理,管理设备的帧缓冲区等等,它是图像流的消费者,是本系列文章的核心SurfaceFlinger的启动过程启动概述SurfaceFlinger服务是一个独立进程。关于硬件方面的服务都在 frameworks/native/services/ 文件夹下,例如:audiomanager、powermanager、inputflinger、sensorservice、surfacefl
原创
590阅读
0评论
1点赞
发布博客于 4 月前

Android 图形架构之一 ——概述

前言本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层。对分析app的卡顿,掉帧等 有很大帮助。由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个纵观全局的感觉,再看每个细节,就能心中有数。战略上把握好了,战术有点失误,也能不影响大局Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 创建和连接Android 图形架构 之三—— 创建SurfaceAndroid 图形架构 之四——图形缓冲区G
原创
827阅读
0评论
5点赞
发布博客于 5 月前

ValueAnimator 源码深入分析

前言属性动画,大家应该都比较属性了,就是更改View的属性例如,宽,高,透明度等等。来实现动画效果的。那么他是如何实现的呢?又是如何保证动画从头开始执行呢?
原创
71阅读
0评论
1点赞
发布博客于 5 月前

Android 图形架构 之七——Choreographer 源码分析

前言在Android4.1之后增加了Choreographer机制,用于同Vsync机制配合,控制同步处理输入(Input)、动画(Animation)、绘制(Draw)三个UI操作。其实UI显示的时候每一帧要完成的事情只有这三种。如下图是官网的相关说明:Choreographer接收显示系统的时间脉冲(垂直同步信号-VSync信号),在下一个frame渲染时控制执行这些操作。Choreographer中文翻译过来是"舞蹈指挥",字面上的意思就是优雅地指挥以上三个UI操作一起跳一支舞。这个词可以概括这
原创
1063阅读
0评论
1点赞
发布博客于 5 月前

ARouter 源码分析

一、前言在开始分析ARouter的源码之前,我假定你已经知道ARouter 的用途,并且会熟练使用。下面我在官方demo的基础上,来分析每项功能的流程。ARouter Github地址demo 中的 三个 Moduleapp demo项目的 主modulemodule-java demo项目的 子modulemodule-kotlin demo项目的 子module下面三个Module 提供了核心功能arouter-annotation 使用到的注解相关信息,例如:@Route,
原创
233阅读
0评论
1点赞
发布博客于 6 月前

深入分析Glide源码

前言最近研究了一下Glide源码,发现很多地方写的真的很精妙,值得细细品味。Glide 功能丰富,图片三级缓存、可深度定制(继承AppGlideModule、LibraryGlideModule实现更多功能)、修改网络请求库、支持多种输入输出资源的转换(例如输入Stream,输出bitmap等等)、生命周期的管理虽然下面分析完了,整体的流程,但是想要真正领会设计思想,还需要好好沉淀一下。文章篇幅比较长,但逻辑并不复杂一、基本使用流程Glide最基本的使用流程就是下面这行代码,其它所有扩展的额外功能都
原创
885阅读
2评论
3点赞
发布博客于 7 月前

ConnectInterceptor 解析——OkHttp 源码详解(二)

RouteSelector 功能是用来选择Selection, 包含 Selection,Address,Selection 包含一系列的RouteAddress 一个对象对应一个UrlRoute 一个Url可能会对应多个IP地址(DNS负载均衡),每个socket 对应一个Route 对象...
原创
232阅读
0评论
1点赞
发布博客于 7 月前

框架和流程——OkHttp 源码详解(一)

前言OkHttp应该是目前Android平台上使用最为广泛的开源网络库了,Android 在6.0之后也将内部的HttpUrlConnection的默认实现替换成了OkHttp。网上很多分析OkHttp的,都是在总体流程上,没有那么的细致,甚至有的同学看完了文章,认为OkHttp没有DNS解析。我说有,他说没有,我说有,他说没有,我说有,他说没有,我就站起来了,很快啊,年轻人,一、鸟瞰OkHttp下面的代码是一个很简单的例子,一步一步分析,起内部的工作原理 OkHttpClient client
原创
565阅读
0评论
2点赞
发布博客于 7 月前

引用其他project的module,根据参数自动配置依赖,repo管理多个 Project

前言在开发中遇到这样一个问题,在工作的project(以下简称Project A)中,用到了Fragmentation(以下简称Project B) 库的三个module,这个库是我在维护,平时更改库中的一些bug,需要先使用一段时间,再推到github,并发布到jcenter, 所以在我的工作项目中,是直接使用本地的代码,没有使用jcenter去引用它。这就遇到一个问题,在Project A 中改完 Project B的三个module,在等到发布的时候,就需要手动把代码拷贝一份到Project
原创
734阅读
0评论
2点赞
发布博客于 8 月前

RxJava之七——RxJava 2.0 图文分析create()、 subscribe()、map()、observeOn()、subscribeOn()源码

Rxjava的使用流程,相信大家都很清楚了,就是以下面这个简单的demo,重点分析一下map()、observeOn()、subscribeOn()源码 Observable.create(object : ObservableOnSubscribe<Int> { override fun subscribe(emitter: ObservableEmitter<Int>) { }}) .map
原创
603阅读
0评论
1点赞
发布博客于 9 月前

Android 微信 图片无法分享

最近在做微信分享的功能,图片分享,小程序分享,由于图片的原因,有的图片总是分享不出去。于是对这块进行了一些深入分析分析过程1、关于进程间通信经过查看log日志,发现已经调用了微信的WXEntryActivity,并且我的App Activity 已经paused,但是没有跳到微信的分享界面,Activity 会马上resumed。在log中看到这样的信息2020-03-31 17:43:...
原创
551阅读
0评论
0点赞
发布博客于 1 年前

Android 仿微信表情雨 、红包雨 支持资源回收再利用

Github 项目:https://github.com/JantHsueh/EmojiRain表情雨 ViewGroup微信聊天中的表情雨效果一样。相比于其他项目的优点:本项目使用了资源缓存复用机制,在无限循环中,不会出现占用内存增长的问题,所以不会GC(除非),更流畅提供了丰富的自定义函数,可设置任意自己想要的效果先来看下效果,太阳雨。(gif有点卡顿,因为录制屏幕时的帧率不够...
原创
810阅读
1评论
1点赞
发布博客于 1 年前

Github Actions 使用指南和Android 持续集成示例

前言Github Actions 官方文档对很多细节都进行了详细说明,但是如果你是第一次接触,看了很多关于细节的东西,不知所云,导致很快忘记。本篇文章,从我项目的代码,从总体上,认识一下Actions。文章最后,我会把我在自定义action的过程中遇到一些细节问题的解决方法。Github ActionsGithub Actions 提供了服务器(查看配置) ,来对代码进行打包发布等持续集成的...
原创
4544阅读
0评论
5点赞
发布博客于 1 年前

深入源码分析Handler 消息机制 、Looper、MessageQueue 消息同步屏障、IdleHandler、Message 复用

Handler 线程通信 基本使用在Android 中Handler来实现,大多数都是用来实现,子线程中发送消息,到主线程中更新UI,下面是基本使用 // 步骤1:在主线程中 通过匿名内部类 创建Handler类对象 mHandler = new Handler(){ // 通过复写handlerMessage(),处理其他线程发来的消息...
原创
1132阅读
0评论
5点赞
发布博客于 1 年前

parameter must be a descendant of this view 报错解决方案及Android 获取View焦点源码分析

前言最近的一系列源码分析,都是基于一个错误,逐步深入源码。都是网上没有源码分析的报错,这个报错也是。网络上有文章给出了有针对性的解决方案。我通过源码给出更普通的解决思路,这个问题,没有特定的解决方案,所以只能领会精髓后,随机应变。下面分析是通过一个具体问题,展开源码的分析,所以不必太在意业务场景的相似,重在领会精髓报错我的具体场景是,在从某一个界面跳转到登录界面时,点击输入框EditTe...
原创
1789阅读
0评论
1点赞
发布博客于 1 年前

Fragment has not been attached yet 解决方法及源码详解

前言在使用Fragment的时候,在内存重启的后,很容易出现一些难以预期的bug,下面将继续一边分析源码,一边看看这个bug是怎么产生的。这个报错的原因,可能和你的情况并不尽然相同。但是你可以通过对源码的理解,来加深对fragment的认识,从而能更优雅的解决问题。报错通俗的讲,就是在要使用Fragment 的 mHost 变量的时候,这个 变量为空。导致下面的报错2019-12-30 ...
原创
6440阅读
2评论
3点赞
发布博客于 2 年前

Fragment.setNextAnim(int) on a null object 解决方法及源码详解

前言相信遇到这个问题的小伙伴,一定很无奈,要想知道这个问题的原因,并根治这个问题,需要研究fragment系列的大部分源码。网上很多文章,只是简单描述了这个问题如何出现(使用的方法很麻烦,下面我回介绍一种更容易去重现这个问题的方法),我在这里从源码的角度,详细分析一下,这个问题出现的原因,知道了原因你自然知道如何解决。当让我也会给出解决方法。我的问题发生场景,可能和你的不太一样,我尽量从更普通...
原创
1715阅读
0评论
2点赞
发布博客于 2 年前

调用removeViewInternal、removeView 屏幕还是显示被删除界面 的解决方法和源码分析

这是在使用Fragmentation时遇到一个问题,在这个库中很多人都遇到这个问题。追求极致体验的我,只好对源码进行修改了。源码的问题,我已经修改了,会在近期开源出来。下面把这个问题的核心抽取出来,进行分析。问题:1、removeViewInternal 后,屏幕上还是显示那个被删除的布局界面2、虽然屏幕上显示那个被删除的布局界面,但是可以点击事件可以传递到后面的布局上。3、使用Layo...
原创
970阅读
0评论
1点赞
发布博客于 2 年前

Android 在动画结束回调onAnimationEnd()中remove view的崩溃解决方法及源码分析

问题:问题描述起来很简单,就是在动画结束的时候,调用父view删除子view,出现崩溃,信息如下:java.lang.NullPointerExceptionAttempt to read from field 'int android.view.View.mViewFlags' on a null object reference android.view.ViewGroup.dispa...
原创
3482阅读
2评论
3点赞
发布博客于 2 年前

Android View 的scroll相关方法属性 以及Scroller弹性滑动原理

最近在修改fragmentation 的bug时,其中SwipeBackLayout 的实现使用是ViewDragHelper ,而ViewDragHelper 使用的是OverScroller,OverScroller 在大部分时候是可以取代Scroller的。所以先从Scroller来分析,这些知识用到好几次,经常忘记,也算做个笔记。Android开发中,但在这些api的实际使用过程中,开发...
原创
280阅读
0评论
1点赞
发布博客于 2 年前

安装完APP后,点击“打开”按钮,打开APP。回到桌面,点击桌面icon打开APP,出现多个app实例

问题安装完APP后,点击“打开”按钮,打开APP。回到桌面,点击桌面icon打开APP,出现多个app实例How to prevent multiple instances of an Activity when it is launched with different Intents原因桌面启动app和安装器启动app的Intent不一样,安装完直接点击“打开”app,但是桌面点击...
原创
710阅读
0评论
0点赞
发布博客于 2 年前

修改ButterKnife bug的实战经验

前言不得不说ButterKnife是一个很有学习价值的项目。我从学习源码,修改bug后,最后pull request,学到了很多东西。如果你对Butterknife 源码还不了解,建议先看一下这篇文章。本文章不介绍基础的源码流程,主要是深入一部分代码,分享一些我在调试bug,修改bug的经验。与其拿着一个黑盒子看着表面,不停得猜测里面到底哪里出了问题,不如打开盒子看一下,看懂它的逻辑,比在外面...
原创
456阅读
0评论
1点赞
发布博客于 2 年前

Android字节码插桩——详细讲解 附带Demo

参考:Android字节码插桩采坑笔记通过自定义 Gradle 插件修改编译后的 class 文件ASM官方文档
原创
3271阅读
0评论
3点赞
发布博客于 2 年前

自定义Gradle plugin 、Java AnnotationProcessor 和 Kotlin Kapt 断点调试

前言首先我们先对调试器进行一些简单的了解,在去介绍 调试注解处理器AnnotationProcessor就会清晰明了,懂了原理,操作基本就是一次学会调试器手动attach调试器平时在使用AS debug APP的时候,调试器会自动attach到app的进程。其实我们也可以手动把调试器attach到指定app的进程。1、点击run 运行 项目,非debug2、点击as中的attac...
原创
1954阅读
0评论
4点赞
发布博客于 2 年前

LiveData 使用与源码分析——完全搞懂LiveData原理

一、LiveData简介LiveData是google官方架构JetPack系列的一个响应式开发框架,LiveData是一个可以被观察的数据持有者类。说到响应式开发或者说观察者就不免想到RxJava,RxJava将观察者模式运用的炉火纯青。但LiveData和RxJava的定位是不一样的,LiveData主要用于搭建MVVM架构,并在其中作为数据持有者,LiveData能监听组件的生命周期变化,...
原创
5110阅读
1评论
7点赞
发布博客于 2 年前

Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理

一、Lifecycle 介绍Lifecycle是一个生命周期感知组件,一般用来响应Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。有助于更好地组织代码,让代码逻辑符合生命周期规范,减少内存泄漏,增强稳定性。这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。二、使用方法先来看一下如何使用,这样再去分析源码就能有的放矢,1.添加依赖...
原创
4934阅读
3评论
6点赞
发布博客于 2 年前

TextView 在xml 中设置图片大小

TextView xml中只能设置图片的位置,但是不能再xml中设置图片的大小 android:drawableStart="@drawable/pic"在代码中可以啊对textview 的图片进行设置,主要代码如下://设置图片的上下左右的位置,也就是宽高drawable.setBounds(left, top, right, bottom);//设置textView上下左右的图片...
原创
3179阅读
0评论
2点赞
发布博客于 2 年前

InputFilter 和inputType属性 ——Edittext(二)

简介Android开发中,输入框Edittext,经常会遇到控制输入类型,比如只输入数字,十进制,输入金额(两位小数 )等等。Edittext inputType属性提供了一些规则,可以满足大部分的需求InputFilter 可以自定义更复杂的输入规则一、 inputType //输入类型为没有指定明确的类型的特殊内容类型 android:inputType="n...
原创
924阅读
0评论
1点赞
发布博客于 2 年前

Android7.0 网络安全配置、自定义okhttp证书 ——解决HTTPs 抓包问题

工具类下面是工具类,只需要传入OkHttpClient.Builder对象,在使用中传入this 和自定义证书的路径(assets 资源下面的路径)/** * @Author: xuexuan: 2019年5月24日19:49:10 * @Description:设置okhttp 自定义证书 */fun OkHttpClient.Builder.sslSocketFactory(b...
原创
1832阅读
0评论
1点赞
发布博客于 2 年前

Fragment 源码浅析——Fragment(三)

与 Fragment 相关的类我们平时使用fragment的时候都是通过创建事务,来操作fragment, getSupportFragmentManager() .beginTransaction() .add(R.id.container, new MyFragment()) .commit();查看源码可以发现getSuppo...
原创
518阅读
0评论
1点赞
发布博客于 2 年前

类加载器与双亲委派模型

类加载器加载类的开放性类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类。虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说根本没有指明从哪里获取、怎样获取。这种开放使得Java在很多领域得到充分运用,例如:从ZIP包中读取,这很常见,成为J
原创
364阅读
0评论
1点赞
发布博客于 2 年前

DataBinding源码深入分析

在使用databinding时,更新UI界面,如果是使用普通变量的,那么在变量发生变化的时候,UI界面并不会发生变化一、数据绑定视图跟随数据刷新数据变化是视图也跟着变化则需要使用到以下两种方法继承BaseObservableObservableField,databinding默认实现了一系列实现Observable接口的字段类型BaseObservable,Observable...
原创
1260阅读
0评论
1点赞
发布博客于 2 年前

四种commit使用细节及源码分析——Fragment(二)

一、 每个事务(FragmentTranscation)只能被commit一次介绍代码段一public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save...
原创
707阅读
0评论
1点赞
发布博客于 2 年前

Android 系统源码——下载到编译

一直想下载、编译、调试一下Android源码 ,加强对一些framework的理解,搞了好多次,终于可以正常调试了。这里进行一些总结和分享。Android源码到模拟器运行,主要有的四个步骤:下载源码搭建编译环境准备编译我使用的环境是Ubuntu16.04 、openJDK8、Android 8.0.0硬件软件要求官方文档:要求硬件要求:如果是 Android 2.3.x (...
原创
32589阅读
17评论
22点赞
发布博客于 2 年前

为什么递归与尾递归会栈溢出?优化原理是什么?

一、递归与尾递归递归:在函数的定义中使用函数自身的方法Kotlin代码实现一个n的累加的函数fun recursive(n:Int):Int { if (n == 1) { return 1 } else { return n + recursive(n - 1) }}尾递归:若函数在尾位置调用自身(或是一个尾调用本身的...
原创
4970阅读
1评论
5点赞
发布博客于 3 年前

Gradle深入理解指南

Gradle比较通俗的讲,它是一个项目构建工具,一个项目从代码build.gradle文件使用DSL参考:Gradle教程Gradle官方文档
原创
678阅读
0评论
1点赞
发布博客于 3 年前

Zuul 超时、重试、并发参数设置

Zuul 服务网关服务网关 = 路由转发 + 过滤器1、路由转发:接收一切外界请求,转发到后端的微服务上去;2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。Spring Cloud Zuul包含了对Hystrix和Ribbon的依赖,下面将一一介绍ribbon 参数配置提供客户端的负载均衡功...
原创
8174阅读
2评论
3点赞
发布博客于 3 年前

Maven 打包项目时出现的错误

打包时,没有install 依赖项目使用maven管理的spring boot 项目,项目A 依赖项目B,在打包项目A的时候,出现下面的错误报错:Failed to execute goal on project hong-bao: Could not resolve dependencies for project com.xuexuan:hong-bao:jar:0.0.1-SNAPSH...
原创
7323阅读
1评论
3点赞
发布博客于 3 年前

Android Webview JS交互 自动点击遇到的问题

这篇文章主要是记录,在webview中实现自动点击按钮,和内容填充。遇到一些问题,希望能对你有所帮助Webview 与 JS交互:Webview 与 JS交互,可以查看这篇文章Android:你要的WebView与 JS 交互方式 都在这里了下面的JS代码实现的功能是:点击帐号登陆,输入账号密码,登陆String js = "javascript:{document.getElementB...
原创
2820阅读
0评论
0点赞
发布博客于 3 年前

关于Mysql 的时区问题

问题:遇到这样一个问题,Mysql的时区,没有设置,默认是时区是0,在java代码中对应的字段类型是TimeStamp,mysql字段类型也是TimeStamp项目A代码中获取到的时间 是正确的。写到数据库的时间也是对的。从数据库读取出来时间是正确的项目B代码中获取的时间是对的写到数据库的时间,慢8小时从数据库读取出来时间,却是正确的。(也就是说比数据库中的时间快...
原创
13151阅读
1评论
5点赞
发布博客于 3 年前

Lint found fatal errors while assembling a release target.

错误信息:调试的时候,都没有问题,但是在打包的时候,报出下面的错误Lint found fatal errors while assembling a release target. To proceed, either fix the issues identified by lint, or modify your build script as follows: ... ...
原创
12181阅读
9评论
12点赞
发布博客于 3 年前

Accept-Encoding gzip 乱码 和Okhttp的解决方法

在使用okhttp请求服务器数据的时候,发现返回的数据一直都是乱码,但是使用fiddler抓包,decode后,可以正常显示。刚开始一直怀疑是编码的问题,后来对比了hex的数据和程序中乱码的二进制,发现不一样。fiddler可以自动处理,说明不是密钥加密。经过不断的尝试发现时Accept-Encoding设置的问题,下面就一一详细介绍一下Accept-Encoding设置Accept-En...
转载
10776阅读
0评论
4点赞
发布博客于 3 年前

View 的 translationX、 translationY , X、Y 和 Left、Top,Right、Bottom

网上有不少人把view的坐标和点击事件的坐标 混为一谈一、View的相关坐标和位置先来看一张图,对这几个值有个大概了解,下面再进行详细的分析先来了解一个概念:view动画不改变view的真实位置,就是肉眼看上去,view位置发生了变化,但是它的点击区域还是在原来的位置。属性动画和setTranslationX/setTranslationY ,会改变显示位置和真实位置上...
原创
3570阅读
2评论
4点赞
发布博客于 3 年前

Android Transition 页面过度动画

前言对于Activity的过度动画都很熟悉了,大多数都是直接使用下面的函数,指定退出的Activity和进入的Activity动画overridePendingTransition(enterAnim, exitAnim);这种动画很简单,旋转平移翻转等,这些操作,而且是这个界面的操作。下面介绍一种更加美观的Activity过度动画Android在新的sdk中给我们提供了另外一种A...
原创
5133阅读
0评论
2点赞
发布博客于 3 年前

detached HEAD以及切换分支代码丢失

切换detached HEAD 分支代码丢失首先要知道,所有提交过的代码,都是可以被找回的。先来说说,从detached HEAD分支切换到其他分支,导致代码丢失的解决办法。每个人造成这种问题的原因,可能不尽相同,但是解决办法确实通用的解决办法:1、执行git reflog可以看到提交记录2、git checkout b4f7193、git checkout -b te...
转载
2450阅读
0评论
1点赞
发布博客于 3 年前

Your app(s) are using an unsafe implementation of the HostnameVerifier interface.

最近在把APP上架到Google Play的时候,被拒了,提示如下: HostnameVerifier Your app(s) are using an unsafe implementation of the HostnameVerifier interface. You can find more information about how resolve the issue i...
原创
2635阅读
1评论
1点赞
发布博客于 3 年前

Kotlin 错误解决大集合

解决Kotlin错误:Smart cast is impossible, because the property could have been changed by this time未完待续
原创
2312阅读
0评论
1点赞
发布博客于 3 年前

CentOS 7 防火墙

文章主要介绍防火墙的使用,和遇到的一些问题CentOS 防火墙 命令CentOS 6 系列使用 iptables Centos 7使用firewalld代替了原来的iptables。查看防火墙的状态:Centos 7 firewall 命令:firewall-cmd --zone=public --add-port=80/tcp --permanent ##开启...
原创
426阅读
0评论
1点赞
发布博客于 3 年前

Centos7 在docker中安装Mysql 8.0 的相关问题

问题一:参考docker 官方的mysql文档中,使用如下命令在docker创建一个容器为mysql,设置配置文件、数据挂载,root的密码为123213docker run --name tools-mysql -p 3306:3306 --privileged=true -v /home/tools/mysql/conf.d:/etc/mysql/conf.d -v /home/t...
原创
3210阅读
1评论
1点赞
发布博客于 3 年前

Spring Boot JPA 使用以及设置多个主键

一、spring data jpa的使用推荐以下两篇文章spring data jpa的使用 spring-boot-jpa 使用@PreUpdate 和@PrePersist二、设置多个主键(复合主键)下面介绍两种方法:第一种:@IdClass来设置多个主键1、先写一个包含主键的类@Datapublic class PrimaryKey implement...
转载
11506阅读
0评论
2点赞
发布博客于 3 年前

JPA分页多条件查询和分页联表查询

一、分页多条件查询–重写Specification的toPredicate方法Spring Data JPA支持JPA2.0的Criteria查询,相应的接口是JpaSpecificationExecutor。Criteria 查询:是一种类型安全和更面向对象的查询 。这个接口基本是围绕着Specification接口来定义的, Specification接口中只定义了如下一个方法:...
原创
5113阅读
0评论
0点赞
发布博客于 3 年前

Spring Cloud之eureka配置——eureka.instance

在使用eureka注册服务的时候,需要配置instance下面的字段,如果对这些字段的含义不了解,配置过程中就会出现一些问题,或者想改变注册中心的服务实例的显示格式等等。主要说明一下,几种配置的含义,以及不同内网,同一内网,公网上注册,实例名称显示问题等等配置代码:eureka: instance: non-secure-port-enabled: true //1 ...
原创
15247阅读
0评论
7点赞
发布博客于 3 年前

Spring Cloud Config的配置中心获取不到最新配置信息的问题

问题描述1、 Spring Cloud Config的配置中心,修改了配置信息,微服务没有及时更新。git远程仓库设有密码 2、Spring Cloud Config的配置中心在运行一段时间之后,发现修改了配置信息,但是微服务应用并拿不到新的配置内容。同时,发现配置中心存储配置的目录/tmp 的配置内容被清空了。原因问题一配置账号密码,下面会给出代码。问题二这里主要分...
原创
10598阅读
2评论
0点赞
发布博客于 3 年前

Linux 用户相关操作

一、/etc/passwd文件添加用户、删除用户、设置密码、用户组等这个文件查看当前系统有哪些用户,也可以把用户ID修改为0,来是用户成为root权限的用户。更多详情参考这里二、/etc/sudoers文件这个文件可以修改用户的权限,设置用户是否可以root权限等等## Allow root to run any commands anywhere root A...
原创
430阅读
0评论
1点赞
发布博客于 3 年前

Linux 进程、端口、服务相关命令

进程命令1、查看正在运行的进程:如何在Linux中查看所有正在运行的进程2、杀死进程:linux下杀死进程(kill)的N种方法注意:在进程命令中,经常会用到这样的命令,ps aux|grep xx 用来过滤查找,但是需要注意,使用这个命令也会返回grep进程的信息。而且每次运行grep,进程号都不一样参考:为什么“ps aux”列出的进程中的PID一直在变呢?端...
原创
478阅读
0评论
0点赞
发布博客于 3 年前

Ubuntu 设置系统环境变量和开机自启动

Ubuntu系统环境变量详解参考这篇文章,讲的非常详细开机自启动在Linux下设置软件开机自动有三种方式:1、 自动启动应用程序——rc.local脚本 2、 自动启动服务——update-rc.d 3、 启动应用程序首选项 3、 使用Systemd 下面来逐一界面这三种方式:一、自动启动应用程序——rc.local脚本rc.local脚本是一个Ubuntu开机后...
原创
13740阅读
1评论
4点赞
发布博客于 5 月前

解决maven unresolved plugin 以及 如何控制maven plugin 的插件版本

最近在写一个项目的时候,有两个module,A是一个Spring boot,B是一个没有使用框架的module。问题一:B库很长时间在执行Downloading plugins for,如果中途退出了idea,插件没有下载完,再次进入idea,会出现unresolved plugin的报错分析:这个问题可以通过两个方面来解决: 1、更改仓库地址,提高下载速度,一运行,很快...
原创
31565阅读
4评论
4点赞
发布博客于 3 年前

spring boot: javax.persistence.PersistenceException: Unable to build Hibernate SessionFactory

报错信息: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactory...
原创
3134阅读
1评论
1点赞
发布博客于 3 年前

org.springframework.data.mapping.PropertyReferenceException: No property * found for *

报错信息: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘assetsServiceImpl’: Injection of resource dependencies failed; nested exception is org.spri...
原创
5296阅读
0评论
1点赞
发布博客于 3 年前

spring mvc controller 各注解GET和POST 使用说明

在不同的参数上使用不同的注解,在进行http请求的时候,发现Get和Post有时有的竟然无法请求,所以简单总结一下,各个注解,可以成功请求的对应方式 注解\请求方式 GET POST(application/x-www-form-urlencoded) POST(Json或XML) @RequestParam 支持(仅单个参数) 支持 不支持(”sta...
原创
10537阅读
0评论
1点赞
发布博客于 3 年前

Android 源码 分析

Android-UML-Diagramandroid 部分源码的流程图、时序图、类图,帮助更好的理解和记忆源码。项目中包括,流程图、时序图、类图、辅助理解的图片以及UML图源文件(可导入画图工具)。并不是每个源码分析都包含这些,例如:函数的分析没有类图说明:由于Android 源码很复杂,这些图表都是描述了一个大概的过程,为了快速理解源码,很多不是很重要的代码,在图表中省略了。也就是说
原创
740阅读
0评论
2点赞
发布博客于 3 年前

Android按返回键退出程序但不销毁

最近在调试程序,发现每次按返回键,一直退出到桌面。再次打开都要重新从启动界面进入,但是微信QQ并不是这样的。调试了一下微信的,发现返回到桌面的时候,微信的界面还是处于stop状态,并没有销毁。后来找了好久,找到了解决方法,主要是两个函数的使用:boolean isTaskRoot()用来判断该Activity是否为任务栈中的根Activityboolean moveTaskToBa
原创
1519阅读
0评论
1点赞
发布博客于 3 年前

android.intent.action.MAIN和singleTask模式 的奇怪问题

最近在研究activity被系统回收后,如何重新启动app,看到了一篇文章,突然想起是之前遇到的一个问题,没有整理,今天记录一下,具体原因我没有搞明白,希望大神们指点指点。activity android:name=".IndexActivity" android:launchMode="singleTask"> inte
原创
888阅读
0评论
0点赞
发布博客于 3 年前

APP在后台被系统回收后,如何重新启动

问题:app运行在后台,android系统会在内存不够用的时候,回收app,如果app中有全局的变量,那么再次打开app可能会出现崩溃的情况。示例:示例源码public class MyApplication extends Application { String name; String getName() { return name;
原创
5900阅读
0评论
1点赞
发布博客于 3 年前

RxJava之七——Rxjava 2.X与Rxjava1.x的差异

关于Rxjava 2.X与Rxjava1.x的差异,在网上搜了一下,基本上写的挺全面的,再结合官方文档,应该没什么问题。所以我这里把链接给出关于 RxJava 最友好的文章—— RxJava 2.0 全新来袭 官方文档:What’s different in 2.0 RxJava 官方github:https://github.com/ReactiveX/RxJavaRxbus 升级为
原创
1396阅读
0评论
0点赞
发布博客于 3 年前

Android 保存Fragment 引用及 getActivity() 为空问题

问题分析:在使用Fragment的时候经常会遇到getActivity()为null的情况。比如我在一个异步网路请求的回调中调用了getActivity()就会出现空指针问题。之前解决这个问题,通常都是直接加空指针判断来规避,但是这并没有真正解决问题。很多人都曾被这个问题所困扰,如果app长时间在后台运行,再次进入app的时候可能会出现crash,而且fragment会有重叠现象。如果系统
转载
595阅读
0评论
1点赞
发布博客于 3 年前

Android 调用相机APP获取拍照图片和从相册选择图片

源码部分分析Camera.java → 点我定位,注意研究1134行与2023行的两个方法。通过源码可以发现,输出的图片有2个分支如果你没有指定Intent里面的Extra参数,它就返回一个序列化(putExtra(“data”, bitmap))的Bitmap,从理论上来说,这样的代码写的很烂,属于Magic Number。如果你指定了Intent里面的Extra参数MediaS
原创
11539阅读
1评论
4点赞
发布博客于 3 年前

This Toast was not created with Toast.makeText()

这个错误遇到两次了,这里记录一下错误:java.lang.RuntimeException: This Toast was not created with Toast.makeText()分析这个错误,是我在使用封装好的Toast工具类时出现的,工具类代码大概如下:public class ToastUtils { private static Toas
原创
2181阅读
0评论
0点赞
发布博客于 3 年前

Ubuntu 常用软件安装和配置

一、软件安装1、安装Gnome3安装GNOME 3# 安装过程中会出现一个选择界面,这里选择gdm选项sudo apt-get install gnome-shell# 安装完重启系统就行了,在登录界面还是可以选择使用原来Ubuntu自带的Unity桌面环境,不需要的话也可以直接把Unity桌面环境卸载了sudo apt-get install ubuntu-gnom...
原创
1262阅读
0评论
3点赞
发布博客于 4 年前

多线程中ArrayList调用Add()添加元素时的下标越界问题(java.lang.ArrayIndexOutOfBoundsException)

问题:在多线程中使用ArrayList调用Add()添加元素时,有时候会出现下面的错误Exception in thread "Thread-1" Exception in thread "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 15 at java.util.ArrayList.elementData(ArrayList.ja
原创
4232阅读
3评论
1点赞
发布博客于 4 年前

Android 自定义View 中attr属性 深入解析

一、attr和styleable自定义View,如果想在xml指定参数(例如:改变字体颜色,字体大小),需要声明一个styleable,并在里面自己定义一些attr属性。attr不依赖于styleable,styleable只是为了方便attr的使用。不使用styleable自定义属性完全可以不放到styleable里面,比如直接在resources文件中定义一些属性:<attr name="cus
原创
3803阅读
1评论
2点赞
发布博客于 4 年前

Android 状态栏样式 全面解析

网上已经有很多关于状态栏样式的文章,要么讲的不全,要么讲的不对,有的文章说的头头是道,但是代码是错的。所以在这里总结一下下面以系统版本作为分界,来详细介绍状态栏的样式一、效果图4.4版本之前状态栏是黑色的,无法改变图一: 4.4及以上,5.0以下下面的全透明和渐变透明,代码实现是一样的,因为部分定制的ROM,修改成了全透明渐变透明:图二: 全透明图三: 酷派系统,MIUI,显示的是全透明的。
原创
1164阅读
0评论
1点赞
发布博客于 4 年前

软件安装——linux使用教程(三)

一、linux系列linux系统分为Redhat系列与Debian系列 两大系列。Linux 各种类安装软件的不同,本质就是这两个系列不同。Redhat系列:redhat,centos等等 软件包后缀 rpm,软件包管理工具 rpm, yumDebian系列:ubuntu软件包后缀 deb软件包管理工具 dpkg(Debian Package)、aptapt和d...
原创
558阅读
0评论
0点赞
发布博客于 4 年前

byte[],Bitmap,YuvImage,Drawable 旋转、缩放、相互转化

1、byte[](YuvImage )->Bitmap在相机开发中,Camera获取到摄像头每一帧的图像数据byte[],有时候需要把它转为Bitmap @Override public void onPreviewFrame(final byte[] data, Camera camera) { camera.setPreviewCallback(null);
转载
3929阅读
1评论
2点赞
发布博客于 4 年前

You need to use a Theme.AppCompat theme (or descendant) with this activity

问题今天在写ZxingAndroid项目时,遇到这样一个问题,在项目的AndroidManifest.xml文件,添加一个MainActivity(继承自AppCompatActivity)<activity android:name=".activity.MainActivity" android:label="@string/app_name"> <i
转载
578阅读
0评论
0点赞
发布博客于 4 年前

使用Glide加载网络图片,显示到高德地图的marker

使用Glide加载网络图片,显示到高德地图的marker,会遇到一些问题,下面将逐一讲解每个问题的解决方法一、marker显示网络图片问题问题:使用Glide加载网络图片,显示到高德地图的marker上,会出现,有时候显示占位符,有时候显示正常的网络图片。网络图片是可以随时正常访问的。分析:1、marker 显示的是一个自定义的view A 2、显示maker的时候,Glide加载网络图片,显示到
原创
3802阅读
7评论
1点赞
发布博客于 4 年前

Android 蓝牙开发

蓝牙版本介绍蓝牙版本现在最新是蓝牙 5。在蓝牙4.0 提出了“低功耗蓝牙”、“经典蓝牙”和“高速蓝牙”三种。低功耗蓝牙和经典蓝牙现在的蓝牙实际上分为了三类:单模、双模和经典。那么,最官方的蓝牙版本称呼就是,单模蓝牙、双模蓝牙和经典蓝牙。单模,也就是低功耗蓝牙,平常看到Bluetooth Smart、BLE就是指这个。 经典,就是经典蓝牙。 双模就是兼容低功耗蓝牙和经典蓝牙。平时看到的Blueto
原创
1439阅读
0评论
1点赞
发布博客于 4 年前

Android N 7.0 应用间共享文件(FileProvider)

Android N 之前的 Uri常规Uri有两种:媒体文件的Uri是content://, 表示这是一个数据库数据。去数据库查询正常返回。其他的文件Uri是file://, 表示这个是一个文件。这个uri是通过Uri.fromFile(File file)方法生成。Android N 之前,这些uri可以传递到其他应用。Android N 中共享文件Android
原创
61766阅读
4评论
2点赞
发布博客于 2 年前

base家族:base16、base32和base64,转码原理

基本概念ASCII 是用128(2的8次方)个字符,对二进制数据进行编码的方式base64编码是用64(2的6次方)个字符,对二进制数据进行编码的方式base32就是用32(2的5次方)个字符,对二进制数据进行编码的方式base16就是用16(2的4次方)个字符,对二进制数据进行编码的方式Base-64编码保证了二进制数据的安全Base-64编码可以将任意一组字节转换为较长的常见文本字符序列,从而可
原创
13334阅读
0评论
4点赞
发布博客于 4 年前

Interceptors拦截器——OkHttp3详细使用教程

这篇文章是从官网https://github.com/square/okhttp/wiki/Interceptors翻译来的,但是我发现官网的演示代码有一个问题(见第一段代码注释),所以写转载这么一篇,便于复习,也顺便改正代码在OkHttp中Interceptors拦截器是一种强大的机制,可以监视,重写和重试Call请求。下面是一个简单的拦截器,它记录发出的请求和返回的响应。class Loggin
原创
12533阅读
6评论
4点赞
发布博客于 4 年前

library module 只有release版本的问题

问题:我遇到这个问题,是在多版本测试的时候出现的,lib release和debug模式,使用不同的key。详见。发现在调试的时候,总是自动是一所release下面设置的key。后来网上一搜发现时gradle的一个问题,官方也正在积极想办法解决。可通过下面的方式暂时解决。这个问题在android studio 3.0 已经解决:见官方文档原因:根据官方文档 http://tools.android.
原创
1987阅读
1评论
1点赞
发布博客于 4 年前

基本使用——OkHttp3详细使用教程

概述OkHttp现在应该算是最火的Http第三方库,Retrofit底层也是使用OkHttp,网上很多教程都写的不错,但是有些我认为重要的知识,大多一笔带过,所以我决定写一篇入门文章OkHttp官网地址:http://square.github.io/okhttp/ OkHttp GitHub地址:https://github.com/square/okhttp 出现背景网络...
原创
47740阅读
3评论
18点赞
发布博客于 4 年前

This is caused by library dependencies that have been compiled using Java 8 or above

错误信息:Error: Error converting bytecode to dex:Cause: Dex cannot parse version 52 byte code.This is caused by library dependencies that have been compiled using Java 8 or above.If you are using the 'j
原创
2035阅读
0评论
0点赞
发布博客于 4 年前

常用命令讲解——linux使用教程(二)

前言:命令格式 :命令 [-选项] [参数] 例 : ls -la /etc 说明:[ ] 表示内容可以省略当有多个选项时,可以写在一起 例 : ls -la /etc 等同于 ls -l-a /etc简化选项与完整选项 (-a 等于 –all)一、文件处理命令显示目录文件:ls命令英文原意:list 命令所在路径:/bin/ls 执行...
原创
630阅读
2评论
0点赞
发布博客于 4 年前

系统分区——Linux使用教程(一)

前言磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分。磁盘一旦划分成数个分区(Partition),我们就可以吧不同类的目录与文件可以存储进不同的分区,极大方便了对文件的查找。设备文件名在linux中,一切设备皆文件,每一个设备都有对应的一个文件,如下表: 硬件 设备文件名 IDE硬盘 /dev/hd[a-d] SCSI/SATA/USB硬盘
原创
586阅读
0评论
1点赞
发布博客于 4 年前

springboot+mybatis 多数据源——Mybatis深入浅出(三)

一、多数据源的应用场景当业务数据量达到了一定程度,DBA 需要合理配置数据库资源。即配置主库的机器高配置,把核心高频的数据放在主库上;把次要的数据放在从库,低配置。开源节流嘛,就这个意思。把数据放在不同的数据库里,就需要通过不同的数据源进行操作数据。下面通过一个示例来演示分别从主库和从库中获取数据,并在业务逻辑层组装返回。逻辑如图:二、工程代码配置详解源码下载:https://github.com/
转载
6040阅读
2评论
5点赞
发布博客于 4 年前

如何优雅的使用mybatis——Mybatis 深入浅出(一)

一、简介orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开发中可以根据需求灵活使用。发现一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis。hibernate特点就是所有的sql都用Java代码来生成,不用跳出程序
转载
1832阅读
0评论
1点赞
发布博客于 4 年前

Mybatis-Generator自动生成代码——Mybatis 深入浅出(二)

使用Mybatis-Generator ,可以自动生成Model、Dao、Mapping相关文件根据已创建的数据库生成相映的文件 ,每一个数据表可以自动生成一个对应的model(pojo类),调用Dao类中的方法就可以直接对数据库进行增删改查的操作。1、使用方法:1.1、需要用到的文件需要Mybatis-Generator jar包 ,关于Mybatis-Generator的下载可以到这个地址:h
转载
9452阅读
1评论
2点赞
发布博客于 4 年前

Maven 从菜鸟到大神,简易教程

一、Maven概述Maven 是什么?Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告
原创
3762阅读
1评论
1点赞
发布博客于 4 年前

使用Java 8 新类进行注解

错误开始看Thinking in java 4th第20章注解(详见该书中文版P629-630),运行书中的代码,找不到com.sun.mirror.apt.* com.sun.mirror.declaration.* ,那么两个包下相关的类也都会找不到分析书中jdk版本是1.5,而我的jdk版本是1.8。com.sun.mirror这个包在java 7 就不建议使用,在java 8被废弃。解决知道
原创
1197阅读
1评论
0点赞
发布博客于 4 年前

组合数组、复制数组、打印多维数组

这些知识虽然很简单,但有时候用的时候,记忆还是有些模糊,记录一下直接看示例:public class JavaTest { public static String[] concat(String[] a, String[] b) { String[] c = new String[a.length + b.length]; System.arraycopy(a
转载
783阅读
0评论
0点赞
发布博客于 4 年前

查看apk 的方法数量

以前找到的两个网站,由于不常用,放在收藏夹里,偶尔用的时候经常找不到,记录分享一下。直接把apk导入,就可以查看apk的放法数 http://inloop.github.io/apk-method-count/ http://www.methodscount.com/
原创
1700阅读
0评论
0点赞
发布博客于 4 年前

strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、区别和效率

1、 strcpystrcpy 是依据 /0 作为结束判断的,/0会被拷贝。如果 to 的空间不够,则会引起 buffer overflow。strcpy 常规的实现代码如下(来自 OpenBSD 3.9):char *strcpy(char *to, const char *from){ char *save = to; for (; (*to = *from) !=
转载
2770阅读
0评论
0点赞
发布博客于 4 年前