自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HeXinGen的博客

汗水凝结成时光胶囊,独自在这命运里拓荒

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

原创 Android so库中UnsatisfiedLinkError

android so库 UnsatisfiedLinkError 方法找不到问题,逐步排除各种可能的原因

2022-09-13 16:54:54 543

原创 Android 处理WebView not install(源码分析定位)

Android WebView Installed问题,分析其FrameWork层中源码走向,解决问题。

2022-09-08 15:21:53 1356

原创 android Leakcanary/Studio Profiler/MAT 处理内存问题(泄漏和Big超大内存对象)

Android 处理内存问题(泄漏和大内存对象),借用Leakcanary/Studio Profiler/Mat。

2022-09-01 16:53:21 552

原创 处理华为Framework层中curosr和空指针问题(反编译ROM和Hook动态代理)

处理华为ROM 源码报错(cursor和空指针),通过反编译华为 framework.dex 进行源码分析,Hook 动态代理来解决。

2022-08-30 12:03:21 911

原创 Android 9.0 SQLiteCantOpenDatabaseException SQLITE_CANTOPEN(不支持WAL模式)源码分析定位

Android 9.0 及其以上不支持WAL模式导致 SQLiteCantOpenDatabaseException SQLITE_CANTOPEN 的java/native层 源码分析定位

2022-08-26 10:37:26 462

原创 Android GLSurfaceView EGL_BAD_CONFIG 源码分析定位

Android GLSurfaceView 创建EglContext过程发生常见的几种异常,通过java和native层源码分析定位

2022-08-24 16:48:24 352

原创 Android MediaPlayer IllegalStateException源码分析定位

MediaPlayer IIIegalStateException 源码分析定位

2022-08-18 15:02:45 469

原创 Android Koom 处理 app 的OOM 一些系列问题(java /native/thread leak)

使用快手团队的koom 专治android oom 问题,包含thread 线程过多、java /native 内存泄漏、java 大对象占用内存等等

2022-08-17 16:23:38 356 2

原创 处理Activity#onResume()遇到java.lang.IllegalArgumentException诡异异常

记录处理Android 较为诡异的问题,Activity#onResume()发生IllegalArgumentException 异常。

2022-08-01 09:30:00 210

原创 Android NDK 之CmakeList 笔记

在androidndk开发中,是经常需要通过cmakelist来配置引入库或者编译配置的。这里总结一些常用的cmakelist中api语法。

2022-07-21 11:34:19 726

原创 Android NDK之Strip裁减so库

1.Strip基本介绍strip:在类Unix和Unix的操作系统中,strip程序可对可执行二进制程序和对象文件中,删除不必要的信息,从而带来更好的性能和减少磁盘空间的使用。“不必要的信息”指的是正常执行功能过程中,不需要的二进制信息,比方调试和符号信息。但该命令裁剪的程度,取决于开发者对这部分代码的具体实现。此外,使用strip可提高二进制文件在逆向工程中的安全性。如果没有二进制文件的信息和对象的名称,分析它将更加困难常用的strip 命令:strip - s xxx.so : 移除所有

2022-05-19 11:51:55 1769 2

原创 Android 如何处理Anr (借用Logcat和Trace 日志)

文章目录**1.Anr的基础知识****2.编写一个Anr的案例****3. 借用 logcat日志和trace文件分析Anr****获取logcat的日志文件****获取Trace.txt 文件**1.Anr的基础知识在开发中,遇到anr 的原因会有:主线程频繁进行耗时的IO操作:如数据库读写多线程操作的死锁,主线程被block;主线程被Binder 对端block;System Server中WatchDog出现ANR;service binder的连接达到上线无法和和System Se

2021-11-05 14:50:01 3170 1

原创 android插件化之BrocastReceiver

实现BrocastReceiver的插件之前,先来了解一下应用程序是如何被解析AndroidManifest.xml中各种标签的。先来了解一下应用程序安装过程系统启动过程中,会扫描某些目录的程序,安装加载过程,为应用程序分配Linux的用户Id和Linux的用户组Id,也会解析程序。先来看下scanPackageLI(): private PackageParser.Package sc...

2019-07-25 11:42:46 348

原创 Android插件化之ContentProvider

先来了解一下ContentProvider的安装和获取过程,查找Hook点。安装ContentProvider过程:应用程序在创建Application的过程中,执行handleBindApplication(),会将contentprovider进行安装。ActivityThreadprivate void handleBindApplication(AppBindData data) ...

2019-07-24 11:49:18 663 1

原创 Android插件化之动态替换Application

先分析Application的创建过程和生命周期,从而对症下药,达到动态替换Application的效果。先来了解一下Application的创建过程。启动应用进程后,会通知AMS,最终回到ActivityThread中的Handler处理,H.BIND_APPLICATION标识对应的动作,去开始创建Application对象。Handler中回调处理:private class H e...

2019-07-23 11:41:37 1450 1

原创 Android插件化之宿主PathClasssLoader加载插件Dex(合并式方案)

Android插件化之ClassLoader加载插件Dex方案目前盛行的插件化方案中处理dex,有两种:合并式的Dex,单个ClassLoader加载方案多个ClassLoader加载dex方案这里介绍,合并式dex的单个ClassLoader加载方案。合并式的Dex加载方案android 7.0 Framework 中Dex加载源码追踪从Activity中获取ClassLoad...

2019-06-28 14:48:42 974

原创 android 8.0 Only fullscreen opaque activities can request orientation 问题(Hook方式优雅绕过检查 )

前言:在android 8.0上遇到Only fullscreen opaque activities can request orientation,采用优雅的方式,Hook绕过检查,无需要修改xml,或者降低目标版本。查看android其他版本中正常运行的项目中的配置:Activity的设置黑色背景且指定屏幕为竖屏:在xml中,设置主题: <style name="T...

2018-12-30 14:35:22 484

原创 Java SE中的自定义ClassLoader和源码分析委托模型机制

类加载器:Bootstrap ClassLoader:是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类。Extension ClassLoader:用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类。Ap...

2018-12-04 23:14:28 211

原创 AndroidStudio 发布开源库Library到jcenter(填了N个坑)

前言:将自己编写的功能库开源出来,方便他人交流,查找问题,同时,gradle 依赖方式也快捷使用。前期准备工作1. 注册账户点击进入bintray注册页面。输入相关信息,如下图所示:创建成功后,出现等待激活页面,如下图所示:打开谷歌邮箱,点击激活的邮件,如下所示:2. 创建maven仓库查看对应的仓库是否存在,输入https://bintray.com/用户名/仓库名...

2018-11-29 17:47:15 462

原创 AndroidStudio 3.0配置NDK,及编写C++与Java交互案例

NDK介绍:Android NDK 是一组允许您将 C 或 C++(“原生代码”)嵌入到 Android 应用中的工具。Java 原生接口 (JNI):JNI 是 Java 和 C++ 组件用以互相沟通的接口。android studio配置ndk1. 在Studio中下载ndk:在studio中,setting -->Android SDK -->SDK Tool...

2018-11-20 15:11:40 2716

原创 Android IPC通讯之Binder机制分析

优势:与Linux中的Pipe管道、信号Signal、消息队列Message、共享内存Share Memory、Socket插口等相比较,Binder在进程间传输数据,只需要执行一次拷贝操作。因此它不仅提高了效率,而且节省了内存空间。角色:Server: 提供服务的进程称为server进程。Client: 使用服务的进程称为client进程。Binder驱动: 提供设备文件/...

2018-10-08 10:27:19 666

原创 Handler消息机制之流程解析

Hanlder中Messsage的发送和处理过程Handler.sendMessage()-->MessageQueue.enqueueMessage()-->Looper.next()-->MessageQueue.next()-->Handler.dispatchMessage()通过一张图片来加深理解:Handler类源码分析构造方法和属性: ...

2018-09-18 23:04:29 413

原创 Handler机制之Message源码解析

Message类:一个包含描述和可以发送到Handler中的任意数据对象的消息。创建Message对象的两种方式:Message.obtain()或者Handler.obtainMessage()以上两个方式会从回收的Message池中取出,可以节省优化。先来了解全局static的可重复利用的Message池:来查看obtain()源码: //从静态全局的Messa...

2018-09-18 23:01:53 160

原创 Handler机制之MessageQueue源码分析

介绍:一个用于保存(被Looper分发的)Message列表的低级类。与Native world的MessageQueue由紧密联系MessageQueue类内部实现了两个Interface,一个静态内部类。接口IdleHandler在消息队列没有消息时使用,处理poll状态时的动作接口OnFileDescriptorEventListener在相应的文件状态改变(可读,可写,...

2018-09-18 22:08:03 421

原创 Handler机制之Looper源码解析

Looper类为一个线程执行循环取出Message的类。异步线程和Handler与Looper的使用案例class LooperThread extends Thread { public Handler mHandler; public void run() { //开始创建Message队列 Looper.prepare(...

2018-09-18 22:06:09 490

原创 Android开发一个VolleyHelper库,Hook Volley方式,无入侵实现(Form表单、JSON、文件上传、文件下载)

前言: 近期,接手一个广告项目,该项目依赖一个CommmonLibrary,该库中选用Volley库和Gson库实现图片和网络通讯。项目又需要下载文件和上传文件的需求。要么考虑手写文件操作库,实现下载和上传。要么考虑对Volley库进行重构改造。众所周知,Android Volley库不适合上传文件和下载文件,因Request会走内存流,对文件操作,会导致巨大的内存占用。因此,想...

2018-08-03 11:56:26 649

原创 Android Volley的HTTP缓存策略

前言: HTTP缓存策略,可以有效的减少重复请求,降低服务器后台压力,和减少客户端的流量带宽。不了解HTTP缓存策略,建议先阅读Android HTTP 缓存策略(用于检查磁盘数据是否过期)。服务器端返回的HTTP缓存策略找到NetworkDispatcher类:查看执行HTTP请求后的解析,缓存操作。public class NetworkDispatcher ...

2018-07-27 16:08:04 433

原创 Android Volley 超时重试机制

前言: Volley框架有许多优秀的机制,例如,HTTP缓存策略,内存和磁盘缓存策略,重试策略,四个网络线程一个缓存线程策略。这里,从源码,解读Volley重试机制。Volley中,定义出一个重试的RetryPolicy接口:/** * Retry policy for a request. * * 用途: * 1. 重试策略,一定时间,重新发起一个请求。...

2018-07-27 13:38:47 1342

原创 Android HTTP 缓存策略(用于检查磁盘数据是否过期)

前言: HTTP缓存策略有效提高网络效率,开发一个网络库或者图片加载库都需要用到它,用于判断存储的数据是否过期,是否需要重新请求服务器。简单介绍HTTP缓存策略HTTP 1.0 缓存Pragma :表示是否缓存Expires : 过去时间HTTP 1.1 缓存:新增了一些字段,具体如下所示。Request Header:Cache-Control...

2018-07-26 15:24:33 1035

原创 Android 7.0 NotificationManagerService源码分析(应用层App,Fragmework中Service层,SystemUI系统App)

前言: 国产ROM定制化比较复杂,最近在做Notification的适配工作。了解Notification源码走向,才知道国产ROM系统对Notification拦截点,找到相应办法绕过。话题有些绕远了,这里还是讲解Notification源码走向。本篇,介绍,如何从应用层,到远程的Server进程(系统进程),再到SystemUI(系提APP)渲染展示Notification。...

2018-07-21 18:13:07 3203

原创 Android 7.0 NotificationListenerService源码分析

本篇介绍,NotificationListenerService和NotificationManagerService的相互跨进程通讯源码走向。1. 了解NotificationListenerService:NotificationListenerService是一个抽象类的Service。public abstract class NotificationListenerServi...

2018-07-21 18:06:25 1006 2

原创 Android 联想K5 Play 8.0 Notification突破拦截(vdex反编译 )

前言: 部分国内ROM系统对消息栏做了拦截,因此,需要用户手动授权开启消息栏通知。 若是能够找到开启的代码,是否可以绕过拦截,默认开启呢?本篇文章,介绍如何找到拦截点,如何去突破。至于其他的ROM系统的拦截,也是类似。联想K5 Play为案 , 探究消息栏突破拦截1. 获取到system文件夹通过下载系统的Rom 包,或者adb pull方式获取到系统的syste...

2018-07-13 15:45:30 1862

原创 Android插件化 Hook方式解决DialogFragment旋转问题

前言: android插件化是这几年比较流行的技术,可以实现热更新,可以动态某些某块工程。使用插件化开发项目的时候,插件项目中创建了一个DialogFramgent子类。 当屏幕旋转后,重新创建fragment,报错:Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fra...

2018-06-09 21:17:44 872

原创 Android插件化之DexClasssLoader动态加载apk(Java代码和资源文件)

DexClassLoader介绍: DexClassLoader可以载入一个含有classes.dex文件的压缩包,可以是jar,可以是apk,也可以是含有dex文件的zip。构造器DexClassLoader(String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent)de...

2018-06-03 12:25:58 7665

原创 Android反编译之各大手机厂商的系统(adb pull和Rom包)

前言: 在实际开发中,手机适配是一个大问题,特别是适配各大手机厂商的系统,也是操碎了心。为了攻克一些难题,适当反编译系统是必不可少的。获取各大手机厂商的系统源码,有以下几种方式:有指定系统的手机:手机USB连接,adb pull 拷贝出system文件夹的文件。没有指定系统的手机:去官网或者各大rom网站,下载各大手机厂商的rom系统包。1. 通过Rom包获取手机厂...

2018-05-24 09:21:55 5456 2

原创 Android反编译之APK(apktool、dex2jar、jd、jadx)

前言: 在开发过程,反编译apk也是常见的事情。 通常,是借鉴某些apk中某项功能的实现思路或者实现技术。查看apk中资源和代码,常见的方式有以下几种:apktool+dex2jar+jdjadx(推举使用)1. 使用apktool反编译apk的资源文件。先准备好apktool,然后选择一个apk,拷贝到apktool同一个文件下,然后运行cmd。。这里以Bro...

2018-05-23 19:47:15 1756

原创 Android组件化+Arouter通讯

前言: 实际开发中越是大型的项目,代码量越多,而AndroidStudio编译的速度越慢。除了抬高电脑配置外,如何提高程序员的开发效率越是迫在眉睫。除此之外,团队合作开发,合并代码也是一个头疼的问题。虽然可以使用svn/git来规避一些问题,但团队中一个人的代码出了问题,导致自己也是被迫停止开发也是可能的。组件化: 项目代码臃肿的时候,通常考虑拆分代码,分层的方式。组件化是将...

2018-05-13 19:48:23 6383 3

原创 Android 本地项目推送到Git远程仓库

前言:众所周知 , 若是先创建远程仓库,可以通过git命令行中clone方式,将仓库与本地项目相互建立关联。在实际开发中,有时候先通过IDE(例如:AndroidStudio)先开发项目,写了一部分代码,后再上传到远程代码版本管理服务器(例如,GitHub网站)。这时候,需要通过remote add origin命令将远程仓库与本地代码建立关联。详细的步骤如下:1. git i...

2018-03-21 15:30:02 1711

原创 Java 反射+工厂模式实现解耦

在实际开发中,工厂模式是经常被用到的。工厂模式的好处: 工厂模式可以达到类的解耦。工厂类中工厂方法过多也是个问题,每新增一个类,则新增一个工厂方法,这会导致工厂方法过多。恰好,反射可以创建类的实例对象,而且可以采用统一操作Class.forName()产生方法,而不会新增工厂方法。案例实战以公司程序员开发业务模块为场景,一个Java程序员开发Java Library,...

2018-02-23 17:24:12 1419

原创 Java 反射操作数组

引用类型包含类,接口,数组,前面介绍了两者,接下来介绍反射数组。反射对数组操作,是通过Array类来完成的,这里对该类简单介绍。Array类常用API:get(Object array,int index):获取数组中指定位置的内容。newInstance(Class<?> componenType,int length):根据指定类型和指定长度,开辟一个新的数组se...

2018-02-23 17:22:22 3392

反编译工具

android常见的反编译工具,包含对apk编译的工具(apktool、dex2jar、jd),对系统文件boot.oat和service.odex编译的工具(oat2dex、smail、jadx-gui)。

2018-05-23

Volley#Request(GsonRequest,MultiPartRequest)

1.自定义带header(包含coockie),Json参数,Gson解析的GsonRequest. 2.自定义支持文件上传的MultiPartRequest. 3.拍照,图库图片,压缩图片一些列功能

2016-11-13

android6.0权限

android6.0动态权限处理,检查权限,是否弹窗解释权限,申请权限。

2016-11-05

android高效加载Bitmap

归纳总结: 1. 从缓存中读取图片:先从内存缓存中读取。 若是从内存中读取到的Bitmap为空,则在磁盘缓存中读取。 若是从磁盘中读取到的Bitmap为空,则从起始资源中读取 2.开启工作线程,执行从起始资源中读取bitmap的任务 3.计算合适比例,读取适屏的bitmap 4.检查ImageView与任务线程的一致性 5.最后Hanlder更新UI

2016-11-03

DownloadManager(强制升级与自选升级)

强制版本更新与用户自选更新

2016-08-22

CustomDatePicker

通过NumberPicker 自定义个性的DatePicker

2016-07-30

Android Espresso Test Intents and Webview

Android Espresso测试ui(intents,webviwe ,button等普通view,AdaoterView类型的View)

2016-07-22

Espresso Test UI

使用Espresso测试UI

2016-07-20

空空如也

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

TA关注的人

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