自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (3)
  • 收藏
  • 关注

原创 EventBus源码分析

前言首先我们看一下官方是如何介绍EventBus的。EventBus是适用于Android和Java的开源库,使用发布者/订阅者模式进行松散耦合。EventBus使中央通信只需几行代码即可解耦类,从而简化了代码,消除了依赖关系并加快了应用程序的开发。知识点准备在进行源码分析之前,我们要知道EventBus中的三个知识点:角色分配、线程模型和事件类型。角色分配 Event 事件,它可以是任意类型,EventBus会根据事件的类型进行全局发送。 Subscriber 事件

2022-03-30 21:35:32 404

原创 安卓打包过程

安卓打包过程关键词:编译–>DEX–>打包–>签名和对齐Android工程的编译打包是个复杂的过程,期间既涉及到工程自身的源代码、资源文件、AIDL文件,又涉及到工程所依赖的库文件(Library, JAR, AAR)等,需要由多个工具分多个步骤完成。打包过程图下面这张图对上面的步骤以及每步用到的工具进行了细分,概括如下:Java编译器对工程本身的java代码进行编译,这些java代码有三个来源:app的源代码,由资源文件生成的R文件(aapt工具),以及有aidl文件生

2020-11-17 00:00:02 346

原创 Gradle Transform

Gradle TransformGradle Transform是Android官方提供给开发者在项目构建阶段即由class到dex转换期间修改class文件的一套api。目前比较经典的应用是字节码插桩、代码注入技术。

2020-11-15 18:11:43 182

原创 android查看项目依赖关系

查看项目依赖关系./gradlew -q dependencies app_driver:dependencies查找某一个库(aar)被引用的地方./gradlew -q app_driver:dependencyInsight --dependency lib_hotfix_robust --configuration compilegradle 发布某一个lib module./gradlew :some-module:clean :some-module:uploadArchives.

2020-11-07 00:48:33 870

原创 android jar包转dex文件

android aar中jar转dex本文主要记录aar中jar转dex过程解压aar重命名aar为zip。图中classes.jar为我们将要转dex的jar包jar转dex定位到 sdk/build-tools/29.0.2 目录下,执行如下方法:dx --dex --output ~/classes.dex ~/classes.jar注:~/classes.dex 为输出目录 ~/classes.jar为输入文件遇到的问题错误1-bash: dx: command n

2020-06-20 00:06:59 1952

原创 android apk签名生成及配置

android签名生成环境keytool工具android studio配置读完本文你将知道如何生成apk证书证书配置环境mackeytool工具使用标准的java工具keytool来生成证书执行如下命令:keytool -genkey -keystore sample.keystore -keyalg RSA -validity 100000 -alias sample# 注:validity为天数,sample.keystore为生成key存放的文件,sample为私钥,

2020-06-18 00:04:38 326

原创 从零学IM(二)——基于TCP的socket长连接实现

前言此文章主要记录本人在学习IM时的一些历程。主要包含以下内容(对TCP/IP协议这里不做介绍):Java Socket API简单实现echo服务器基于android实现客户端TCP长连接1 Socket 基本用法Socket 是 TCP 层的封装,通过 socket,我们就能进行 TCP 通信。在 Java 的 SDK 中,socket 的共有两个接口:用于监听客户连接的 ServerSocket 和用于通信的 Socket。使用 Socket 的步骤如下:创建 ServerSo

2020-05-26 19:24:12 1018

原创 从零学IM(一)——mac下protobuf安装

前言最近在自学即时通讯,大部分都在用protobuf做数据的序列化与反序列。这里记录下protobuf安装过程源码下载https://github.com/protocolbuffers/protobuf/releases/tag/v3.12.0-rc2在此页面选择合适的版本,我选择的是3.12.0,需要注意的mac下不要下载protoc-3.12.0-osx-xxx的包,下载下来不知道咋安装。此处我下载的是protobuf-all-3.12.0.tar.gz。安装找到下载目录执行如下命令进行解

2020-05-26 11:20:16 220

原创 【android】源码解析——onSaveInstanceState执行时机

之前对于activity的onSaveInstanceState方法的调用时机一直不是很理解,看到一些文章讲过onSaveInstanceState以下5种情况被调用:当用户按下手机home键的时候。长按手机home键或者按下菜单键时。手机息屏时。FirstActivity启动SecondActivity,FirstActivity就会调用,也就是说打开新Activity时,原Activity就会调用。默认情况下横竖屏切换时。本文从源码的角度深入理解下改方法的执行时机。众所周知,Andro

2020-05-11 15:46:12 426

原创 [RecyclerView] 字母分组及悬浮吸顶效果

[RecyclerView] 字母分组及悬浮吸顶效果悬浮吸顶效果先看下效果这是一个区域列表,每个区域都有所属的拼音首字母。需要在滑动的时候,将对应区域所在分组悬浮在顶部。悬浮顶部的字母分组需要根据列表下一个分组的滑动而适当改变位置,实现“顶上去”的效果。实现思路:利用RecyclerView.ItemDecoration绘制字母部分(就像绘制分割线一样)同一组的商圈,只绘制一个字母...

2020-05-07 17:00:10 851

原创 APP首页效果实战RecyclerView+ViewPager+RecyclerView及滑动冲突解决

背景目前市面上大多数App首页加推荐效果基本实现方式为:RecyclerView + ViewPager + RecyclerView。其中面临的最主要问题就是RecyclerView同方向滑动冲突解决。效果前言滑动冲突解决方案目前最流行的方式NestedScrollingParent和NestedScrollingChild,大家有不了解的可以手动google一下相关知识。而且最主要...

2020-04-22 13:37:57 1191

原创 android SQLite多线程并发访问

背景多线程情况下,进行SQLite操作时容易抛出打开正在关闭的数据库的异常,并且重复开关耗费性能解决在打开和关闭数据时通过计数的方式防止重复打开和重复关闭,保证多个线程同时访问时只打开和关闭数据库一次。代码private synchronized SQLiteDatabase getWritableDatabase() { if (dbCounter.incrementAndGe...

2020-01-16 18:25:26 451

原创 RecyclerView滚动指定位置到屏幕中间

背景接到个产品需求,需要使RecyclerView点击item后滚动到RecyclerView的中间位置实现自定义SmoothScroller继承LinearSmoothScroller继承LinearLayoutManager重写smoothScrollToPosition调用自定义SmoothScroller代码package com.wuba.housecommon.filt...

2019-12-31 18:15:41 1903 1

原创 OnTouchListener()只能收到MotionEvent.ACTION_DOWN

在做view跟随手指的时候,发现OnTouchListener只能收到ACTION_DOWN事件。这里记录下解决过程。关键返回true还是false ?返回false和true的区别:setOnTouchListener 单独使用的时候返回值需要设置为true,才能保证MotionEvent.ACTION_DOWN的后续事件可以被接收到当OnTouchListener 和 O...

2019-12-19 17:55:52 415

原创 Mac下编译x264 for Android

前言在编译之前建议先去了解交叉编辑环境生成教程,后续编译基于此。自定义NDK交叉编译链(toolchain)环境操作系统:mac os 10.14.2ndk版本:android-ndk-r20libx264: x264-snapshot-20191211-2245脚本下载x264进入下载后的x264目录,创建build_android.sh#!/bin/shNDK_HOM...

2019-12-12 15:05:31 815

原创 Android工程中使用FFMPEG静态库(CMake和Android mk)

前言:前文Mac下编译FFMPEG for Android中介绍了如何编译FFMPEG静态库。本文将介绍CMake和Android mk两种方式使用静态库。主要内容CMakeAndroid mkCMakeCMake方式构建使用比较简单,创建的一个新的支持Native C++的工程默认使用此方式。设置包名等信息,点Finish完成将编译好的FFMPEG下include目录...

2019-12-11 16:46:48 644

原创 Mac下编译FFMPEG for Android

之前讲到了通过自定义的NDK交叉编译链来为编译FFMPEG做准备,自定义NDK编译工具链.编译环境操作系统:mac osNDK版本:android-ndk-r20编译器:clangFFMPEG版本:4.2.1编译脚本整理了一个编译环境的脚本build.sh在FFMPEG目录下#!/bin/sh# Android NDK sources and standalone tool...

2019-12-10 17:54:02 918 2

原创 自定义NDK交叉编译链(toolchain)

背景:在Mac下编译FFmpeg库时,看了比较多的教程基本都失败,偶然间发现NDK在去GCC化,需要通过交叉编译来完成编译,这里记录下NDK交叉编译链过程地址 https://developer.android.google.cn/ndk/guides/standalone_toolchain简单说交叉编译就是在A平台下编译B平台上可以使用的二进制库文件。环境操作系统:mac osn...

2019-12-10 17:03:15 1426

原创 Fresco DraweeView XML常用属性

Fresco DraweeView XML常用属性fresco:fadeDuration="300" // 淡出时间,毫秒。fresco:actualImageScaleType="focusCrop" // 等同于android:scaleType。fresco:placeholderImage="@color/wait_color" // 加载中…时显示的图。fresco:placeh...

2019-12-09 15:40:03 175

原创 JNI方式遍历HashMap

JNI方式遍历HashMapextern "C"extern "C"JNIEXPORT jstring JNICALLJava_com_wuba_housecommon_sign_SignUtil_sign0(JNIEnv *env, jobject params) { // 获取HashMap类entrySet()方法ID jclass hashmapClass = en...

2019-12-09 14:48:05 1370

原创 Kotlin(9) 函数和lambda表达式

9 函数和lambda表达式函数函数声明Kotlin 中的函数使用 fun 关键字声明:fun multiply(x: Int): Int { return 2 * x}函数用法//调用函数使用传统的方法:val result = multiply(2)//调用成员函数使用点表示法:Stream().read() // 创建类 Stream 实例并调用 read()...

2019-12-09 11:35:04 116

原创 Android JNI开发 JAVA关联native C代码(Android.mk方式)

在build.gradle中添加如下代码通过该配置可直接通过android studio关联java代码和native c/c++代码并且调试native断点android { externalNativeBuild { ndkBuild { //android mk 所在的目录 path "src/main/jni/A...

2019-12-07 18:10:47 268

原创 C语言实现MD5加密

前言最近在Android开发中需要使用JNI来提高代码的安全性,需要做MD5加密。使用C做MD5有些坑存在,生成的md5值不正确问题和已知的MD5加密结果不一致md5加密代码md5.h#ifndef MD5_H#define MD5_Htypedef struct{ unsigned int count[2]; unsigned int state[4]; unsign...

2019-12-07 18:01:32 351

原创 Android已有工程接入Kotlin

前言随着kotlin的不断普及,已有项目中涉及到接入Kotlin并后续使用Kotlin开发的计划。1 添加依赖在最外层中添加对kotlin-gradle-plugin依赖buildscript { //增加 ext.kotlin_version = '1.3.31' repositories { google() jcenter()...

2019-12-07 15:22:13 724

原创 Kotlin(8) 委托

8 委托委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。Kotlin 直接支持委托模式,更加优雅,简洁。Kotlin 通过关键字 by 实现委托。类委托类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。/ 创建接口interface Base { fun print()}...

2019-12-07 14:51:19 77

原创 Kotlin(7) 匿名类

7 Kotlin 匿名类对象表达式通过对象表达式实现一个匿名内部类的对象用于方法的参数中:hello.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View?) { //To change body of created functions use File | S...

2019-12-07 14:14:38 367

原创 Kotlin(6) 接口

3 循环控制For 循环for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下:for (item in collection) print(item)索引遍历一个数组或者一个 list,for (i in array.indices) { print(array[i])}用库函数 withIndex:for ((index, value) in ...

2019-12-07 14:11:49 82

原创 Kotlin(4) 类和对象

4 类和对象类定义Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。Kotlin 中使用关键字 class 声明类,后面紧跟类名:class Runoob { // 类名为 Runoob // 大括号内是类体构成}Koltin 中的类可以有一个 主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后:class Perso...

2019-12-07 14:08:48 83

原创 Kotlin(3) 循环

3 循环控制For 循环for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下:for (item in collection) print(item)索引遍历一个数组或者一个 list,for (i in array.indices) { print(array[i])}用库函数 withIndex:for ((index, value) in ...

2019-12-07 14:07:32 139

原创 Kotlin(2) 条件表达式

2 条件控制IF 表达式一个 if 语句包含一个布尔表达式和一条或多条语句。并没有java中的三目运算符// 传统用法var max = a if (a < b) max = b// 使用 else var max: Intif (a > b) { max = a} else { max = b} // 作为表达式val max = if (...

2019-12-07 14:06:12 215

原创 Kotlin(1) 语法

1 Kotlin 基础语法Kotlin 文件以 .kt 为后缀。函数定义函数定义使用关键字 fun,参数格式为:参数 : 类型fun sum(a: Int, b: Int): Int { // Int 参数,返回值 Int return a + b}表达式作为函数体,返回类型自动推断:fun sum(a: Int, b: Int) = a + bpublic fun...

2019-12-07 14:04:22 95

原创 Kotlin(5) 继承

1 Kotlin 基础语法Kotlin 文件以 .kt 为后缀。函数定义函数定义使用关键字 fun,参数格式为:参数 : 类型fun sum(a: Int, b: Int): Int { // Int 参数,返回值 Int return a + b}表达式作为函数体,返回类型自动推断:fun sum(a: Int, b: Int) = a + bpublic fun...

2019-12-06 19:56:30 99

原创 RecyclerView通用adapter封装

目的通过封装通用adapter精简以及更加快速的完成RecyclerView实现基类通过模板方法,定义adapter行为抽象绑定逻辑,绑定操作抽象在holder中holder点击事件设置,防止多次设置节约性能实现holder基类的实现抽象基础bindHolder模板方法通过bundle 传递额外参数固定方法入参package com.android.app.commonada...

2019-12-05 16:12:27 266

原创 RecyclerView实现 时间选择器 仿探探card 画廊 等效果

RVLayoutManager滚轮效果时间选择器PickerLayoutManager特点支持指定滚轮固定个数显示mPickerLayoutManager2 = new PickerLayoutManager(this, PickerLayoutManager.VERTICAL, false,3,0.4f,true);mRecyclerView2.setLayoutManager(m...

2019-10-10 15:10:55 784

原创 RecyclerView万能adapter封装(支持组件化)

项目中用到的最多的元素就是列表,在android中目前最流行了的当属RecylerView了。项目中也涉及到很多RecylerView替换Listview的场景。看过比较多对adapter封装的文章,总有些不太简洁。所以本文将介绍自己封装的高度解耦Adapter和viewholder。帮你快速高效生成一个万能列表。理念构造一个通用的Adapter,避免一个列表一个适配器,避免增加(viewT...

2019-10-10 11:28:13 605

原创 可折叠更多和收起的TextView

代码package com.test.plx.views;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.text.Layout;import...

2019-07-14 20:57:08 429

FFMpeg 3.2.5 android so库 包含H264

FFMpeg 3.2.5 android so库 包含H264 直接可用。。。。

2018-11-20

cling源码的demo程序

基于cling库的demo示例程序,将所有的包已经包含,可正常运行

2015-08-11

安卓中文API

安卓中文开发文档API,android官方中文完整版Build 1.1_r1 (from source)

2015-07-28

空空如也

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

TA关注的人

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