- 博客(60)
- 资源 (98)
- 收藏
- 关注

原创 OSGI 角度理解Atlas 类加载机制
前言:要想明白Atlas的类加载机制,就要了解OSGI 框架,因为查看Atlas源码会发现Atlas的核心思想就是OSGI。 OSGIosgi 的主要特点是有灵活的类加载器框架,osgi的bundle类加载器之间只有规则没有固定的委派关系。接下来让我们来看看Atlas的具体类加载规则。 OSGi为每个bundle提供一个类加载器,该加载器能够看到bundle Ja...
2018-05-15 19:56:31
935

原创 Atlas通信方式之——RemoteTransactor
简述: Atlas提供了3中通讯方式分别是:RemoteTransactor、RemoteView、RemoteFragment. RemoteTransactor是RemoteView、RemoteFragment 通讯方式的简化版仅仅为了Bundle和Bundle之间的通讯而存在,这篇文章将提供简单的使用实例,和源码简析和指出其中存在的坑。 场景还原 ...
2018-05-07 21:28:47
1755

原创 ThreadLocal 源码简介
简单介绍线程内部存储数据存储类 ThreadLocalThreadLocal的诞生或者说ThreadLocal要解决的问题有些时候一个线程中的任务过于复杂,这可能表现为函数调用栈比较深以及代码入口 的多样性, 在这种情况下我们又需要监听器能够贯穿整个线程的执行过程,这个时候 可以怎么做呢?其实这时就可以采用ThreadLocal,采用ThreadLocal可以让监听器 作为线程内...
2018-03-29 21:48:43
319

原创 Handler 源码解析
这篇文章是跟踪源码看handler是如何发消息的。从sendMessage(Message msg)开始吧 public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg, 0); }点入看看 public final boolean sendMe...
2018-03-21 08:15:33
288

原创 Atlas 源码解析(二)
总结:Atlas hook Resource流程 1.在软件启动的时候hook系统的Resource对象 2. 调用Resource 对象的getAssets()方法获取AssetManager对象(暂时称为旧的的as对象) 3. 通过反射创建一个新的AssetManager对象(暂时称为新的的as对象) 4. 将bundle的资源路径加入到新的AssetManager对象中 5. 对旧...
2018-03-20 14:09:14
2018

原创 Atlas 源码解析(一)
简述:这篇文章仅仅介绍atlas的基本实现原理。这是atals中bundle加载过程包括class 和 resource第15步: if(!installingBundles.containsKey(location) && ((bundleDir!=null&&bundleDir.exists()) || dexPatchDir!=null...
2018-03-16 10:39:30
5015
原创 为什么 Center 和 Column 配合使用后 Column 的子Widget 不再居中显示
为什么 Center 和 Column 配合使用后 Column 的子Widget 不再居中显示
2023-03-19 21:41:43
304
原创 记录 AOSP 编译遇到的各种报错及解决方式
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rspOut of memory error (version 1.2-rc4 ‘Carnac’ (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).GC overhead limit ex
2020-06-29 08:23:01
3686
原创 OnePlus6 刷机+root + 安装busybox教程
准备工作: 1.下载trwp 第三方recovery工具包 2. 下载第三方rom 百度网盘地址 密码: y5e4 3. 下载Magisk root工具 4 下载busybox 字节码文件 进行刷机进入到bootloader 模式 adb reboot bootloader 进入bootloader模式后可以使用 fastboot devices 命令检查当前链接的...
2018-06-23 10:51:43
4138
原创 Smali 语法学习
可以根据Dalvik opcodes来学习这些 smali 指令 new-instancenew-instance v0, Ljava/lang/String; # 创建String 对象 invoke-directinvoke-direct {p0}, Ljava/lang/Object;->()V # 表示直接调用无参构造方法 invoke-virtu...
2018-05-23 16:56:05
4418
1
原创 数据结构之队列的实现
java 实现/** * Created by duia on 2018/5/4. * 链表实现队列 */public interface IQueue<T> { /** * 入队 * @param data */ public abstract void push(T data); /** ...
2018-05-04 11:38:55
353
原创 Android 8.0 WebView 版本引起的血案
问题描述: 在Android 8.0的原生手机上,凡是在xml文件里面含有 标签的,在加载该页面的时候都会报如下错误 Caused by: android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class android.webkit.WebView...
2018-04-27 20:37:21
9815
2
原创 IncompatibleClassChangeError 异常引起的原因
在类加载过程中,分为以下几个阶段: 1. 加载 2. 验证 3. 准备 4. 解析 5. 初始化 验证分为 1. 文件格式验证 (验证字节流是否符合Class 文件格式的规范,并且能被当前版本的虚拟机处理) 2. 元数据验证 (对字节码描述信息进行语义分析,以保证其描述的信息符合Java语言规范要求) 3. 字节码验证 (整个验证...
2018-04-25 10:29:41
13497
4
原创 JNI 持续总结
java 调用Native代码编写一个java类,并且在某些方法签名的修饰中加上native 修饰符。使用javac 命令编译第一步中的java类,使之成为一个class文件。使用javah命令将第二步的class文件作为输入,生成JNI的头文件。将JNI 头文件复制到项目下的jni目录,并且建立一个cpp的实现文件实现该JNI头文件中的函数。编写Android.mk文件,加...
2018-04-22 18:24:44
235
原创 c 语言经典100题
// 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#include <stdio.h>int main(int argc, const char * argv[]) { printf("Hello, World!\n"); int lineNum; int n=5; for(int i=1;i<n;i+...
2018-04-22 16:18:18
592
原创 数据结构之栈的实现
栈是一种先进后出的数据结构检简称FILO接下来我们将会用c++、java进行实现 下面我们就看看是怎样用c++代码实现#include <iostream>using namespace std;typedef int datatype;typedef struct node{ datatype data; struct node ...
2018-04-22 12:44:30
269
原创 数据结构之链表的实现方式
简介: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序 实现的。 c 语言实现#include <stdio.h>#include <stdlib.h>#include <string.h>struct Node{ char content[10]; struct Nod...
2018-04-20 10:50:20
994
原创 Android 之Application和Resource 实例化过程
Application 实例化过程//我们的ActivityThread就是通过这个Handler来通知启动Application的//并且Activity也是它通知启动的具体可以看ActivityThread中各种handle开头的方法final H mH = new H(); //看来还是通过Handler public void handleMessage(Mess...
2018-04-18 15:26:30
1288
原创 Messenger源码解析
简述:Messenger是一种轻量级的IPC方案,它的底层实现是AIDl,也就是说它是系统对AIDL的一个简单封装方便Android开发人员进行进程间通信,它一次只能处理一个请求,因此在服务端不用考虑线程同步问题,因为在服务端不存在并发执行的情况。接下来进入正题开始源码解析 构造函数 Messenger 存在两个构造函数 分别是 //1. 传递处理请求的Han...
2018-04-16 10:21:09
405
原创 AIDL使用注意事项总结
这里仅仅记录在使用AIDL的时候我们有哪些是要注意的 在UI线程执行AIDL方法引起的anr客户端调用远程服务的方法,被调用的方法在服务端的Binder线程池中,同时客户端线程也会被挂起,这个时候如果服务端方法执行比较耗时的操作,就会导致客户端线程长时间阻塞在这里,而如果这个客户端线程是UI线程的话,就会导致客户端ANR。避免方法: 1. 不要在onServiceConnect...
2018-04-15 21:39:12
1527
原创 AIDL文件生成的java文件内容分析
先上流程图我们先来看看编写的aidl文件编译器为我们自动生成的.java类都有哪些元素分别代表什么意思 DESCRIPTORBinder的唯一标识,一般用当前Binder的类名表示,比如本例中的"test.sym.com.myapplication.IBookManager" asInterface(android.os.IBinder obj)用于将...
2018-04-15 19:10:36
1635
1
原创 外观模式浅析
外观模式是我们封装API的常用手段,比如在我们开发各种SDk的时候。 外观模式定义: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,外观模式提供一个高层次的接口,使得子系统更加易于使用UML图: 实例代码实现 系统A定义public interface ISystemA { /** * 系统A的一些内部操作 */...
2018-04-05 14:41:53
252
原创 责任链模式浅析
责任链模式简介:责任链模式是行为设计模式之一,使对个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到对象处理它为止。责任链模式使用场景:1. 多个对象可以处理同一请求,但是具体由那个对象处理则在运动时动态决定。2. 在请求处理者不明确的情况下向多个对象中的一个提交请求。3. 需要动态指定一组对象处理请求的UML图 ...
2018-04-05 11:37:44
490
原创 适配器模式浅析
类适配器模式 具体代码实现//要被适配者public class Adaptee { //已有方法 比如240的电压 public void operation3(){ System.out.println("我是operation3"); }}//目标功能public interface Target { /...
2018-04-05 00:20:18
523
原创 策略模式浅析
策略模式要解决的问题: 一个问题根据不同的情况有多种选择的时候,我们一般的做法是写一个管理类为不同的解决方案设置不同的标识,当需要解决某种情况的问题的时候就根据标识配合 if else 语句来进行区分,同时各种解决方案的具体方法也会写到这个类中,这样导致的后果就是后期如果想添加新的方案就要修改源码,违反了软件设计的开闭原则,增加了风险不利于后期扩展。现在引入我们的策略模式让代码更清晰,更加易
2018-04-04 23:46:59
290
原创 Android 源码解析之Singleton
今天在查看Activity源码的时候看到一个 android.util 包中存在一个有意思的工具类,想想和有意思或者说对我们以后写对象的懒加载很有用,在此记录一下顺便分享给有用的童鞋。 先上源码package android.util;/** * Singleton helper class for lazily initialization. * * Modeled afte...
2018-03-29 15:09:38
575
原创 Android进阶之IntentService 源码解析
先来介绍下intentService和Service的区别IntentService继承与Service与Service有着相同的生命周期和方法,区别就在于IntentService是google工程师看到我们经常在Service里面做一些耗时的操作就帮我们封装一下,如果不封装自己使用Service+Thread+Handler或者Service + HandlerThread也能实现。也就是...
2018-03-18 11:36:43
403
原创 AMS 启动过程
SystemServer.java /** * The main entry point from zygote. */ public static void main(String[] args) { new SystemServer().run(); }创建SystemServer对象运行run()方法,点入run() 方法...
2018-03-17 15:13:12
600
原创 Android 进阶之HandlerThread
官方描述: Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called. 翻译:大致意思是HandlerThread能够新建拥有L...
2018-03-16 09:27:28
550
原创 Cornerstone 将已忽略文件恢复
如果你用的Cornerstone管理的你的SVN仓库,当你想把某一次忽略的文件从忽略列表中恢复正常的时候请看本教
2017-05-27 14:02:00
3542
原创 自定义dialog
概要继承 android的Dialog类在onCreate方法中设置自定义的dialog的内容.如果想要修改dialog的一些特性(比如:宽高、内容颜色等,要在show()调用后再修改)
2017-05-13 10:13:11
386
原创 编写android 注解解释器
编写android 注解解释器(apt)步骤:1. 编写注解文件2. 写注解解释器,编译时生成注解文件3. 运行时通过反射调用注解生成的类和方法
2017-05-11 10:52:29
757
原创 c语言学习笔记
C语言学习笔记文件的结束符:EFO (end of file) 是个整型数 值是 -1。在用putChar()/getChar()输出/输入字符串的时候,通常会使用会将临时存储变量c声明为int类型,就是为了有足够的空间存储EFO所对应的值。 参数–传值调用在c语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中,比如,For
2017-05-11 10:34:01
1081
原创 使用docker安装mysql 步骤
第一步:docker run --name mysql8.0 -e MYSQL_ROOT_PASSWORD=932390312 -d mysql:8.0这句命令的意思就是在我的docker 容器中运行一个名字叫做mysql8.0的mysql,root登陆密码是932390312 选择安装或运行的tag是8.0版本官方解释:$ docker run --name some-mysql -e MYS
2017-05-04 08:29:43
4798
原创 TabLayout 与ViewPager 搭配tab内容不显示问题
遇到这个问题请在setupWithViewPager 之后在给每个tab设置内容不然会被重置 viewPager.setAdapter(pagerAdapter); tabLayout.setTabMode(TabLayout.MODE_FIXED); tabLayout.setupWithViewPager(viewPager); tab
2017-04-12 15:43:14
1958
原创 React-native 学习笔记二
模块(module)ES5不支持原生的模块化,在ES6中,模块将作为重要的组成部分被添加进来。模块的功能主要由 export 和 import 组成。每一个模块都有自己单独的作用域,模块之间的相互调用关系是通过 export 来规定模块对外暴露的接口,通过import来引用其它模块提供的接口。同时还为模块创造了命名空间,防止函数的命名冲突
2017-04-12 11:48:19
396
原创 React-native 问题汇总
问题一:Application HelloWorld_o1 has not been registered.Hint: This error often happens when you're running the packager (local dev server) from a wrong folder. For example you have multiple apps and the
2017-04-09 11:06:16
3760
原创 ReactNative学习笔记一
重点:github地址 在运行demo的时候可能会运到一些问题: 出现:ReactAndroid:downloadBoost error问题, 解决办法:下载 boost_1_63_0.tar.gz 放到react-native-master/ReactAndroid/build/downloads/目录下面注: compileSdkVersion 23 buildTo
2017-04-08 21:32:08
562
refind-bin-0.11.5.zip
2020-03-08
经典普通话口才练习绕口令--.doc
2020-03-05
Android编译系统(四)Android编译系统框架分析及main.mk 分析
2019-07-25
SlickEditor2018 macOs 版(se_23000200_mac.dmg)
2019-07-24
正版payload_dumper
2019-05-05
google repo工具
2019-01-22
编译系统透视-图解编译原理 完整1043页 高清扫描 pdf
2019-01-21
C++ Concurrency in Action
2019-01-18
Genymotion-ARM-Translation_v1.1
2019-01-08
genymotion-3.0.0-linux_x64
2019-01-08
axel(下载加速器)
2019-01-07
基于JavaEE的多用户学生信息管理系统(MVC+JavaBean+servlet))
2023-06-20
sqldeveloper-19.2.1.247.2212-x64.zip
2020-10-08
测试音频(12种)视频(12种)格式.rar
2020-05-07
preloaded-images-k8s-v1-v1.17.3-docker-overlay2.tar.lz4
2020-03-23
virtualbox-6.1_6.1.4-136177~Ubuntu~xenial_amd64.deb
2020-03-18
minikube_1.8.1-0_amd64.deb
2020-03-18
JRebel-2020.1.1.zip
2020-03-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人