自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 中级Android开发应该了解的Binder原理

一.前言Linux的进程空间是相互隔离的。Linux将内存空间在逻辑上划分为内核空间与用户空间。Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,为了保证内核安全,它们是隔离的。内核空间可以访问所有内存空间,而用户空间不能访问内核空间。用户程序只能通过系统调用陷入内核态,从而访问内核空间。系统调用主要通过 copy_to_user() 和 copy_from_user()...

2019-03-14 15:52:35 251

原创 性能优化之Traceview和Systrace的使用

Traceview的两种使用方式:1.打开Android Device Monitor,选择一个进程,然后按上面的“Start Method Profiling”按钮,等红色小点变成黑色以后就表示TraceView已经开始工作了,再次点击该按钮结束追踪,并会自动打开这段时间内生成的 .trace 文件。2.在代码中使用Debug.startMethodTracing()和Debug.stop...

2019-03-01 17:58:04 1059

原创 DRouter:简单易用的支持多进程架构的组件化方案

写在开头组件化技术适用于需要多人协作的中大型项目,如果是一个人的项目且开发人员未实践过组件化方案则不建议采用。组件化的优点业务隔离,使得各业务模块专注于自己的业务实现,而不必关心其他业务模块.单独调试,每个模块可以独立运行,方便开发调试.组件可复用性,针对有重叠业务的不同APP,可直接使用组件来组装.适合AOP.可以更细粒度的设置组员的代码修改权限.DRouter:完美支持多进...

2019-01-21 18:38:56 2252 1

原创 同学,你的系统Toast可能需要修复一下

欢迎star/issue,项目地址:https://github.com/Dovar66/DToast先看看使用系统Toast存在的问题:1.当通知权限被关闭时在华为等手机上Toast不显示;2.Toast的队列机制在不同手机上可能会不相同;3.Toast的BadTokenException问题;当发现系统Toast存在问题时,不少同学都会采用自定义的TYPE_TOAST弹窗来实现...

2018-12-04 22:15:18 2801 3

原创 FFmpeg音视频学习

项目地址:https://github.com/Dovar66/ffmpeg_so1.编译FFmpeg环境配置看这里: [windows下编译FFmpeg]编译到Android则需要额外配置:1、修改ffmpeg项目根目录下的configure文件将文件中的如下四行:SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'LIB_INSTAL...

2018-11-07 18:32:33 1454

原创 IntelliJ插件开发的简要流程,附参考项目地址(Git Pull Extender)

1.安装IntelliJ IDEA并启用Gradle插件2.创建Plugin项目选择Gradle并勾选IntelliJ Plateform Plugin,然后跟随引导完成项目的创建。创建后的项目目录应该是下图这样的3.配置项目接下来我们主要关注两个文件,就是上图中的build.gradle和plugin.xml。build.gradle此时的内容如下图:pl...

2018-10-24 14:13:51 415

原创 Git subtree

原始的visoc(父项目)项目结构是下图这样的:子项目router是这样的:在父仓库中新增子仓库我们执行以下命令把router添加到visoc中:git subtree add --prefix router [email protected]:Dovar66/Router.git master --squash(--squash表示不拉取历史信息,而只生成一条commit信...

2018-10-19 18:00:16 523

原创 从jks证书中提取公钥和私钥(jks证书转pem证书)

jks转为p12,然后再将p12转为pemAndroidStudio使用keystore文件对APK进行签名,但快应用中要求使用PEM文件对RPK进行签名。现有demo.jks,证书密码为demopwd,转换成pem之后依然使用demopwd作为密码。方法一:使用cmd和openssl命令提取公钥:切换到jks证书的存储路径,执行如下命令:keytool...

2018-05-15 22:17:29 19782

原创 记录IDA动态调试进行APK脱壳流程

1.启动IDA文件夹dbgsrv中的android_server 命令2.端口转发 新开一个cmd进行端口转发:adb forward tcp:23946 tcp:23946如果不进行端口转发,IDA将无法正常连接到端口239463.以调试模式启动应用 调试模式启动应用:adb shell am start -D -n  包名/MainActivity路径名4.打开IDA附件进程 设置Debugg...

2018-03-28 10:38:56 3158 2

原创 paho.mqtt代码分析(有待详述)

MQTT与webSocketMqtt底层使用webSocket实现,通过发送http或https请求与服务端开始进行handshake,握手完成后协议将从http(https)升级成webSocket并建立长连,之后通过长连进行通信。sdk中关于websocket部分结构及handshake信息如下:MQTT心跳包分析心跳包首先看用于发送心跳信息的MqttPingReq.class和用于接收心跳答...

2018-03-09 13:12:14 5002

原创 初识MQTT

MQTT发布/订阅发布/订阅模式(pub/sub)是传统客户端-服务器模型的一个替代模式。在传统的客户机-服务器模型中,客户端直接与端点进行通信。但是,Pub/Sub模式解耦了发送消息的客户端(发布者)与其它接收消息的客户端(订阅者)。这意味着发布者和订阅者并不知道彼此的存在。有一个发布者和订阅者都知道的第三方,称作代理者,它过滤所有传入的消息并进行相应的分发。如前所述,发布/订阅的重点是发布者和...

2018-03-09 13:08:35 401

原创 反编译与xposed模块开发

需求描述:008神器生成的数据中,手机型号数据老旧并且android版本低于4.4无法满足现有需求,需要更新手机型号数据并且扩展到更高的android版本。思路一:反编译008神器并重新打包使用androidKiller反编译008.apk,点击打开链接思路二.实现一个修改手机信息的xposed模块#.xposed介绍    xposed框架的作者是rovo89,Xposed框架的原理是修改系统文...

2018-03-05 10:37:28 3019

原创 反编译008神器,修改手机型号与android版本号信息

一个可以修改手机信息的xposed插件008神器依赖xposed可修改其他应用获取到的系统参数值,见下图但是我们直接从网上下载的008神器生成的手机型号和安卓版本号都是好几年前的。下面就来分析下怎么修改这些手机型号和安卓版本号数据。首先当然是要反编译,这里推荐个反编译神器:Android Killer,支持一键反编译反编译后的项目结构如下图:然后找到存放手机型号的...

2018-02-07 18:39:27 12500 12

原创 AccessibilityService重新整理:微信自动抢红包、微信自动向附近的人打招呼

去年写过微信抢红包插件的实现,但是今年春节的时候发现微信更新之后我自己写的插件竟然会停在开红包的页面无法继续向下执行,debug之后发现问题是在该页面通过findAccessibilityNodeInfosByViewId()方法无法获取到有效的根节点,几经查看api之后仍未有效定位到原因,遂作罢。这几天经同事提起抢红包的事,所以今天我又找到之前的代码,想尝试下通过获取微信指定控件的ID去实现

2017-03-13 22:05:43 10444 29

原创 记录Gerrit的使用及常用git内容

1.Gerrit是什么? Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控制,以及一个用来做Code Review是Web前台页面。当然,其主要功能就是用来做Code Review。2.配置ssh1.使用gitbash查看是否已经有了ssh密钥:cd ~/.ssh2.生成ssh密钥:$ ssh-keygen -t rsa -C “你想设置...

2017-03-08 15:57:36 4442

原创 android微信支付集成与踩坑记录

!!!第一处:官方demo中AppRegister是下面这样的:public class AppRegister extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final IWXAPI api = WXAPIFactor

2016-12-21 01:43:50 2644

原创 利用photoView实现可点击放大到全屏显示的控件,效果类似于微信朋友圈点开看大图

此控件继承自ImageView,实现效果与微信朋友圈点开看大图相似,点击控件后进入沉浸模式全屏显示大图,全屏时双击或手指拉伸可放大图片,单击会退出全屏老规矩,先上控件实现代码:/** * 可点击放大全屏显示的imageView * Created by Administrator on 2016/11/16 0016. */public class MyPopupView exte

2016-11-16 19:17:48 8532 4

原创 消灭黑白屏,实现android app“快速启动”

开发app的时候,如果我们没有对app的启动页做相关处理,那我们的app每次开启的时候都会有一个白屏或者黑屏的过程,黑、白屏主要取决于启动页的theme背景,正是这个黑白屏过程的存在会让我们感觉app启动速度慢,本篇博客中所说的“快速启动“”也正是针对这个过程进行优化以达到没有黑白屏的过程;我们都知道activity的绘制是需要时间的,所以android系统框架设计了一个叫做startWind

2016-09-28 18:00:21 3378 2

原创 android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现

android api19开始我们就能对顶部状态栏和底部导航栏进行半透明处理了,而api21开始则可以实现全透明状态栏与导航栏以及开启沉浸模式,至于什么是沉浸模式,大家百度一下应该就都知道了,有一点需要强调的是全透明不是沉浸模式,前者只是将状态栏、导航栏的背景设置为完全透明,而后者则是完全将状态栏与导航栏隐藏并且只要在屏幕顶部下滑或在底部上滑就能短暂呼出状态栏与导航栏当然几秒钟之后还是会隐藏的;...

2016-09-28 10:26:42 19958 3

原创 实现微信自动向附近的人打招呼,收到指定账户推送文章时自动进入微信打开链接

学习功能强大的AccessibilityService!!!以下是本人根据自动抢红包的实现思路敲的用于微信自动向附近的人打招呼的核心代码public class AutoService extends AccessibilityService implements View.OnClickListener { private static final String TAG

2016-09-23 17:58:42 4789 8

原创 使用adb查看android程序的包名以及栈顶的activity名

windows下进入cmd,定位路径到adb.exe的路径,然后使用命令:    adb shell dumpsys activity | findstr "mFocusedActivity"就能看到当前栈顶的activity名字了如果adb shell命令出现cannot parse version string:kg01错误,请先使用命令:adb kill-server

2016-09-20 18:47:21 6887

原创 Android6.0动态权限

我用的测试机是华为P9,运行android6.0,遇到的问题是这样的:在调用图库获取图片时,返回资源总是为null,也无法向SD卡存入照片,并且我已经在清单文件中配置了读写外部内存的权限最后成功解决的方法是:在当前Activity中添加以下代码,代码的作用是检查是否已经获取到所需要的权限,如果没有则再次请求权限// Check whether we have write per

2016-07-22 11:27:40 8755

原创 Hybird开发之webview

为什么打开一个 H5 页面会有一长段白屏时间?因为它做了很多事情,大概是:初始化 webview -> 请求页面 -> 下载数据 -> 解析HTML -> 请求 js/css 资源 -> dom 渲染 -> 解析 JS 执行 -> JS 请求数据 -> 解析渲染 -> 下载渲染图片一般页面在 dom 渲染后才能展示,可以发现,H5 首屏...

2019-06-04 16:27:58 482

原创 JVM简笔

JVM运行时数据区域的划分如下图:程序计数器(PC寄存器)是唯一没有规定OOM的数据区域。运行时常量池位于方法区。类的生命周期:* 加载:查找并加载Class文件。* 链接: 1.验证:确保被导入类型的正确性。 2.准备:为类的静态字段分配字段,并用默认值初始化这些字段。 3.解析:虚拟机将常量池内的符号引用替换为直接引用。* 初始化:将类变量初始化为正确的初始值。* ...

2019-03-20 22:27:54 274

原创 ProGuard流程图

Proguard主要有混淆、裁剪、优化三大功能,它的整个流程是:

2019-03-17 21:04:29 329

原创 APK包体积优化

APK包的主要结构如下图,对于大部分项目中文件实际占用空间大小排序正如图中从上到下。代码开启Proguard,一方面可以降低代码被反编译后的可读性,另一方面也可以减小包体积。删除debug信息,参考支付宝方案:支付宝 App 构建优化解析:Android 包大小极致压缩Dex:dex分包优化,跨dex调用会导致method id等信息需要同时存在于调用与被调用的dex文件中,这就...

2019-03-17 14:55:50 629

原创 APK构建流程简要记录

1. aapt ==》打包资源文件,生成R.java和resources.arsc文件2. aidl tool ==》 处理AIDL文件,生成对应的.java文件3. javac ==》 编译 .java 文件,生成 .class 文件4. dex tool ==》 将 .class文件打包成dex文件5. apk builder ==》将dex文件+资源文件+清单文件打包成apk...

2019-02-25 13:58:25 228

转载 FFmpeg源代码结构图 - 编码

本文转自雷霄骅大神的博客,仅供学习,更多内容请阅读原文:https://blog.csdn.net/leixiaohua1020/article/details/44226355函数调用关系图首先呈现分析的结果,如图所示。这张图的尺寸很大(大于4000x4000),因此需要打开图片链接之后将图片保存为本地文件,然后才能查看。它表明了FFmpeg在编码一个视频的时候的函数调用流程。为了保证结...

2018-10-31 13:54:22 334

转载 音视频学习笔记

音视频开发简介(点击打开链接)1.音视频开发包括哪些内容虽然一篇文章无法把音视频开发的知识点都介绍清楚,但是大概的学习路线还是可以梳理一下的,我们先看看下面这张图:其实说白了,音视频开发,就是要掌握图像、音频、视频的基础知识,并且学会如何对它们进行采集、渲染、处理、传输等一系列的开发和应用。采集:它解决的是,数据从哪里来的问题 渲染:它解决的是,数据怎么展现的问题 处理:它...

2018-10-29 13:54:17 666

原创 记录反编译过程中遇到的问题

1.反编译过程中遇到如下异常:I: Baksmaling...I: Loading resource table...Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc fileat brut.androlib.res.decoder.ARSCDecoder.decod...

2018-09-30 18:16:03 528

原创 单例模式的多种实现

1.饿汉模式public class Car { //饿汉模式 private static final Car instance = new Car(); //私有化构造函数 private Car() { } public static Car getInstance() { return instance; ...

2018-09-30 17:01:40 234

转载 JavaPoet使用文档

JavaPoet是一个用来生成 .Java源文件的Java API。当做如注解或者数据库模式、协议格式等事情时,生成源文件就比较有用处。Example以 HelloWorld类为例:package com.example.helloworld;public final class HelloWorld { public static void main(String[] a...

2018-07-23 15:32:15 594

转载 Android反编译学习资料--smali语法

第一部分内容转自点击打开链接APK、Dalvik字节码和smali文件APK文件    大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版本):     Where's My Water.zip\asset\                     ...

2018-03-21 18:18:04 857

转载 Websocket原理学习

转载仅供学习,原文地址:http://blog.csdn.net/frank_good/article/details/50856585一、websocket与httpWebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个...

2018-03-18 22:33:42 219

转载 PhoneStateListener的使用及其造成的内存泄漏问题分析(转自http://blog.csdn.net/firedancer0089/article/details/60121128)

概述PhoneStateListener是给三方app监听通信状态变化的方法,基本使用如下:[java] view plain copy TelephonyManager  mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);    PhoneSta

2017-12-13 14:39:16 2056

转载 查看混淆后的日志(转自http://blog.csdn.net/fwt336/article/details/51896009)

APP混淆已经是APP发布时的标配技术了,但是我们又需要回去用户使用APP时的崩溃日志,这个时候,看到的日志确是被混淆了,想a.b.c.c()!是不是要狂了呢?。所以,Google当然会为我们考虑到这种情况。下面对具体的使用进行说明。代码混淆生成apk之后,项目下面会多出来一个build\outputs\mapping\release文件夹,下面分别解释release文件夹中四个文件的作用

2017-12-12 16:50:27 285

转载 Android开发中出现的错误集

本文转自http://blog.sina.com.cn/s/blog_5da93c8f0102wo1f.html,仅供学习使用1、 错误 :Can not perform this action after onSaveInstanceState场景:应用中使用FragmentDialog统一管理弹出框,分别在基类BaseActivity和BaseFragment中增加显示和隐

2017-11-24 11:03:32 566

原创 让APP不出现在最近任务栏,防止进程被强杀

给启动页,即配置有如下属性的Activity android:name="android.intent.action.MAIN"/> android:name="android.intent.category.LAUNCHER"/>增加这条属性即可android:excludeFromRecents="true"

2017-11-08 10:06:51 3345

转载 Tinker热修复 及walle多渠道打包流程

原文地址:http://blog.csdn.net/rrkdddd33/article/details/73641630普通打包1 Constants.isWalleChannel 设置成false2  不要注释掉               android:name="UMENG_CHANNEL"            android:value="$

2017-09-06 09:43:48 901 2

原创 app打包安装后第一次启动Home时重复进入启动页的问题

app打包安装后第一次启动Home重复进入启动页的问题

2017-08-16 11:34:47 713

空空如也

空空如也

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

TA关注的人

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