自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

forward

Live and learn.

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

原创 Android单元测试

Android 单元测试: 首先,从是什么开始 Android单元测试(二):再来谈谈为什么 Android单元测试(三):JUnit单元测试框架的使用 Android单元测试(四):Mock以及Mockito的使用 Android单元测试(五):依赖注入,将mock方便的用起来 Android单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用 Android单元...

2018-09-03 11:01:56 318

原创 安卓知识汇总

1.Walle(瓦力,美团开源的)通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。2.图片内存的计算 计算公式: 所占内存 = 图片长度 * 图片宽度 * 每个像素所占的内存 ALPHA_8:每个像素点占用1byte内存 ARG...

2018-03-06 13:51:27 430

原创 搭建Maven私有仓库

1.Nexus官网 2.下载All platforms - Nexus Repository Manager OSS 2.x - bundle.zip 3.解压 4.运行 打开终端,转移到nexus2/bin目录下 运行:./nexus startbogon:bin lisen$ pwd/Users/lisen/Desktop/n2/nexus2/binbogon:bin l

2018-01-25 17:45:07 1630

原创 Android开发艺术探索笔记之事件分发机制

View什么是ViewView是界面层控件的一种抽象,它代表一个控件。 ViewGroup继承自View,内部可以包含多个控件,即一组View。 View的位置参数 VelocityTracker 速度追踪VelocityTracker ve = VelocityTracker.obtain();在View的onTouchEvent方法中调用:ve.a

2018-01-15 11:31:51 475

原创 代理模式

静态代理定义抽象接口 public interface IRequest{ void request(String params); }被代理类1 static class Retrofit implements IRequest{ @Override public void request(String params) {

2017-12-21 20:16:30 285

原创 Git Submodule

场景:假如A项目团队,有一个项目A,里面有一个不错的网络模块NetModule,这时候B团队的B项目想直接用NetModule,这时候有两种方式进行导入: 方案一:下载A项目,然后将NetModule导入进去 方案二:git submodule的方式,cloneA项目到B项目的lib文件下假如后续过程中A对NetModule进行了修改 方案一需要下载A项目,还要根据哪里修改了,修改自己项目中的

2017-12-18 18:42:36 390

原创 Android跨进程通信

本文基于《Android开发艺术探索》,是一本不错的进阶书籍。多进程IPC(Inter-Process Communication):进程间通信或者跨进程通信,两个进程间进行数据交换的过程。 线程:CPU调度的最小单元。 进程:一个执行单元,比如一个程序活着应用。 一个进程可以包含多个线程。在Android中使用多进程的方法:在AndroidManifest.xml中指定android:pro

2017-12-12 17:01:46 672

原创 RxJava源码分析(二)

这次聊的是RxJava的线程切换流程,先看一张图: 这个时序图对应的RxJava代码: public void demo2(){ createObservable() .subscribeOn(Schedulers.newThread())//被观察者在新线程执行subscribe .observeOn(Andr

2017-12-08 19:00:54 257

原创 RxJava源码分析(一)

RxJava官网快速入门,推荐下面大神整理的教程: 给初学者的RxJava2.0教程(一) 给初学者的RxJava2.0教程(二) ….. 给初学者的RxJava2.0教程(九)AndroidStudio配置: implementation 'io.reactivex.rxjava2:rxjava:2.1.7' implementation 'io.reactivex.rxja

2017-12-06 20:06:29 374

原创 替换dex实现热修复

安卓App热补丁动态修复技术介绍本文就是对上面的原理进行简单实现。 主要思想: 首先一个确保apk是由多个dex组成的,dex1、dex2、dex3等。 dex1一般会包含application等。假如dex2中出现了bug,那么我们可以修复相应的bug,生成对应的newdex2,然后将newdex2放置到dexements数组的前面。那么其他方法调用dex2中的方法时,会先从数组的由前往后遍

2017-12-04 19:31:13 1260 1

原创 ijkplayer编译

ijkplayer安装homebrew、git、yasm# install homebrew, git, yasmruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"brew install gitbrew install yasm根据自己需要,进行如下设置If you

2017-12-04 15:14:39 1146

原创 AndFix实现原理

AndFix不需要重启app即可实现bug修复,AndFix是“Android hot-fix”的缩写。AndFix实现步骤: 1.通过注解的生成补丁包(.apatch) 2.通过获取.apatch中的补丁类,然后通过注解方式获取需要打补丁的方法。 3.补丁中的方法替换bug中的方法。补丁包暂且不考虑,现在实现2、3步骤获取补丁包中要替换的方法新建项目,项目最终结构如下: 注解方法Methd

2017-12-01 16:44:31 1932

原创 增量更新

实现思路实现增量更新的步骤: 1. old.apk和new.apk生成差异包patch 2. old.apk和patch合成更新包merge.apk 3. 安装merge.apk生成差异包patch1.进入bsdiff官网,下载bsdiff-4.3.tar.gz 2.解压下载好的bsdiff-4.3.tar.gz,然后编辑Makefile如下:CFLAGS += -O3 -lbz

2017-11-30 18:46:54 1700

原创 openCV人脸识别

1.下载编译好的SDK 2.解压后,新建项目,拷贝对应文件到项目中: 3.CmakeLists.txt修改如下:cmake_minimum_required(VERSION 3.4.1)include_directories(src/main/cpp/include)file(GLOB my_source_path src/main/cpp/*.cpp src/main/cpp/*.c)

2017-11-22 16:05:24 768

原创 opencv源码编译

GITHUB地址:https://github.com/opencv/opencv.git 官方网站:http://opencv.org/downloads.html 编译下载地址:https://sourceforge.net/projects/opencvlibrary/files/1.安装cmakebrew install cmake2.下载opencv源码在官网下载指定版本的源码 ht

2017-11-18 20:42:42 743 1

原创 插件换肤

插件换肤的重点在于如何加载插件包的资源。 插件包其实就是一个apk的压缩包,加载插件包的资源,其实就是加载apk的资源。如何才能加载apk中的资源呢? 首先android中的各种资源都对应一个唯一id,比如获取一个view,通过findViewById(int id)方法,就可以得到布局的唯一view。 同样, 设置图片 setBackground(getResources().g

2017-11-17 20:11:35 344

原创 java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "strtof" referenced by "libsuppo

as更新到3.0以后,运行程序发现如下报错:11-15 13:24:22.849 10388-10388/com.test.nginxpush E/AndroidRuntime: FATAL EXCEPTION: main Process: com.test.ngi

2017-11-15 13:36:37 4374

原创 nginx + rtmp 推流

环境安装Homebrowruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装nginx下载nginx项目到本地brew tap homebrew/nginx执行安装brew install nginx-full -with-rtmp-module到这一步,nginx和rt

2017-11-09 16:06:03 7220 1

原创 六、音视频同步

FFmpegAudio.h//// Created by ygdx_lk on 17/11/4.//#ifndef VIDEOPLAYER_FFMPEGAUDIO_H#define VIDEOPLAYER_FFMPEGAUDIO_H#include <queue>#include <jni.h>#include <unistd.h>#include <string>#include

2017-11-07 19:55:40 555

原创 生产者消费者及线程加锁

// 产品队列int ready=0;//互斥锁pthread_mutex_t mutex;//条件变量pthread_cond_t has_product;std::queue queue1;//生产者void * produce(void *arg){ char* name=(char*)arg; LOGI("生产 %s", name);

2017-11-04 19:44:23 620

原创 五、OpenSL ES音频播放

本文基于以下文章进行的开发:一、FFMPEG源码编译二、AndroidStudio集成FFMPEG三、FFMPEG视频解码及播放四、FFMPEG播放音频开发出色的音频应用OpenSL ES API 可以帮助您制定和提升应用的音频性能。 某些典型用例包括以下组成部分:数字音频工作站 (DAW)。合成器。电子鼓。音乐学习应用。卡拉 OK 应用。DJ 混合。音

2017-11-03 17:02:41 607

原创 四、FFMPEG播放音频

1.新建AudioPlayer类package com.test.ffmpeg;import android.media.AudioFormat;import android.media.AudioManager;import android.media.AudioTrack;import android.util.Log;/** * Created by ygdx_lk on

2017-11-02 16:05:44 764

原创 三、FFMPEG视频解码及播放

1.新建VideoView类package com.test.ffmpeg;import android.content.Context;import android.graphics.PixelFormat;import android.util.AttributeSet;import android.view.Surface;import android.view.Surfac

2017-11-01 20:28:26 1037

原创 二、AndroidStudio集成FFMPEG

1.新建android项目,勾选include C++ support2.勾选Exceptions Support (-fexceptions)、Runtime Type Information Support (-frtti)3.Finish后的项目目录4.libs下创建armeabi目录,拷贝ffmpeg编译后的so文件到armeabi下,拷贝i

2017-11-01 20:14:43 2510 1

原创 接下来的学习计划

11.1~2.15(除夕)学习概要:1.ffmpeg视频相关(源码编译、开发配置、图像编解码、音频处理、音视频同步播放)2.视频直播推流3.openCV图像识别4.热修复、插件化、增量更新5.RxJava、Glide、Retrofit原理6.kotlin7.android源码(老罗的Android之旅《安卓系统源代码情景分析》、《Android开发艺术探索》)安卓在线源码android/kerne...

2017-11-01 11:20:11 760

原创 一、FFMPEG源码编译

1.下载地址:http://ffmpeg.org/releases/2.下载完成解压3.修改configure文件将该文件中的如下四行:SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAM

2017-10-31 20:13:22 1627

原创 滚动加载条效果

先上图: 效果也是比较简单的,直接上源码(具体步骤已经做了注释)package com.test.ndktest;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.gr

2017-09-27 12:54:01 358

原创 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class lesson5 { class quene{ Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<I

2017-08-16 19:37:45 665

原创 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二叉树 遍历即将树的所有结点访问且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点-

2017-08-16 19:22:01 457

原创 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { //数组行列数 int row = array.

2017-08-16 19:20:25 333

原创 java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcpy"

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “__aeabi_memcpy”在6.0手机上会出现原因: AndroidStudio生成so时,由于compileSdkVersion、targetSdkVersion版本过高,与ndk版本不匹配。 ndk生成的so是向上兼容的,而不是向下兼容。所以目前只能降

2017-08-02 12:21:29 12093

原创 Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建

先介绍一下为什么要用这么一大堆东西。。。。阶段一 开发了一个简单的app 每次打包只需要./gradlew assembleRelease,然后等待几分钟,就可以得到一个安装包。使用360加固助手进行加固然后将安装包上传到fir.im然后通知测试安装测试阶段二 为了更好的用户体验,使用了热修复tinker ./gradlew assembleRelease打包生成的安装包上传到360

2017-07-13 20:01:05 7065 14

原创 Activity源码浅析-DecorView

使用Activity,我们会先在onCreate方法中,设置setContentView public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); initWindowDecorActionBar(); }getWin

2017-06-30 12:54:42 3212

原创 水波纹+旋转小球动画

实现效果:实现思路:1.首先绘制小圆的位置: 每个小圆的间隔为:2 * Math.PI / CIRCLE_COUNT 2.通过控制第一个小圆的角度变化,控制小圆的旋转。 通过控制大圆半径,实现小圆的聚合 3.水波纹实现:绘制一个空心圆,通过不断改变空心圆的半径和画笔宽度。代码实现:package com.test.paintdemo;import android.animation.An

2017-06-27 13:18:31 2273

原创 视频直播中的心形漂浮效果

实现效果:思路:1.首先要给心形图片创建一个平滑的悬浮路径,那就要用到贝塞尔曲线,这里采用自定义TypeEvaluator实现。 2.路径有了,就要考虑实现动画的两个步骤 a.缩放,伴随透明度变化 b.底部悬浮到顶部 这里是用的是Matrix 3.自定义View,然后绘制心形图片。 详细步骤,看源码代码:1.自定义BezierEvaluatorpackage co

2017-06-26 19:29:22 2226

原创 SVG

Android微信上的SVGSVG 即Scalable Vector Graphics 可伸缩矢量图形,这种图像格式在前端中已经使用的非常广泛了。 SVG的W3C的解释: http://www.w3school.com.cn/svg/svg_intro.asp矢量图像 SVG是W3C 推出的一种开放标准的文本式矢量图形描述语言,他是基于XML的、专门为网络而设计的图像格式,

2017-06-25 00:19:44 1698

原创 SVG绘制中国地图

效果如图,点击省份区域,即可蓝色高亮显示 实现思路:地图资源 Android SVG to VectorDrawable 1.首先获取SVG图片,然后将SVG转化为VectorDrawable,然后放入res/raw目录下(SVG图片代码在文章末尾) 2.通过DocumentBuilderFactory获取svg中的根节点rootElement 3.通过rootElement获取所有pa

2017-06-24 23:41:14 12736

原创 PathMeasure

PathMeasurePathMeasure是一个用来测量Path的类,主要有以下方法:构造方法 方法名 释义 PathMeasure() 创建一个空的PathMeasure PathMeasure(Path path, boolean forceClosed) 创建 PathMeasure 并关联一个指定的Path(Path需要已经创建完成)公共方法 返回值 方法名

2017-06-24 15:14:32 1358

原创 PathMeasure + 贝塞尔曲线实现过山车效果

先看效果图: 思路: 1.首先绘制红色的贝塞尔曲线 2.然后用PathMeasure,测量曲线某一点A的长度、倾斜度、坐标 3.根据坐标倾斜度,绘制图片 4.根据PathMeasure获得,起始点O到A点的路径,绘制走过的路径代码:package com.test.paintdemo.pathrelate;import android.animation.ValueAnimator;im

2017-06-24 14:38:14 2946

原创 Canvas模拟太阳地球月球的运动过程

先看效果图代码package com.test.paintdemo.pathrelate;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphi

2017-06-23 14:41:53 4357

IPCDemo跨进程通信

android跨进程通讯的几种实现:Messenger、ContentProvider、Binder、Socket、Binder连接池

2017-12-12

Dex_Hot_Fix

替换dex实现热修复 1.apk多分包 2.修复bug后,生成patch.dex 3.将patch.dex插入到dex2前面

2017-12-04

AndFixTest

主要介绍AndFix原理实现及源码,安装包里面有测试apk。

2017-12-01

bsdiff增量更新源码

增量更新http://blog.csdn.net/likuan0214/article/details/78679256

2017-11-30

Umeng微信朋友圈分享

基于友盟的微信朋友圈分享,可以自定义UI,也可以使用友盟自带的UI。

2015-11-20

C#学生管理系统

本系统用c#编写,具有学生信息成绩管理功能

2012-12-17

C#科学计算器

本科学计算器具有各种计算功能,下载直接可用,仅供参考!

2012-12-17

空空如也

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

TA关注的人

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