自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android系统启动流程分析

title: Android系统启动流程分析date: 2021-09-27 23:35:00tags:- 系统启动- Android- Frameworkcategories: Frameworkkeywords: ‘Android,系统启动,Framework’description: 此笔记记录分析Android系统启动过程的分析。cover: https://upload-images.jianshu.io/upload_images/13838098-709a95ad43e71.

2021-10-10 19:36:01 4206 1

原创 调用Android原生@SystemApi、@Hide方法和解决混淆问题

1.关于@SystemApi和@Hide方法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NoJ2Ka2-1615188609645)(https://upload-images.jianshu.io/upload_images/13838098-9e5be0ee94f529c5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]如上图所示,PackageManager.getPermissionFlags(

2021-03-08 15:31:51 4447

原创 基于源码从零开始编译第一个app

前言《Android源码编译》中我详细叙述了有了源码之后,如何把原生的代码编译成功的过程。现在有了原生的系统镜像之后,我们是不是也应该编一个app在系统中运行呀,好,那就开始吧,一切从HelloWorld开始。1.创建工程1.1 搭建最小工程模块还记得以前学习单片机的时候,都是从最小系统搭起,那么我们创建工程,最小的工程目录会包含哪些东西呢。见下图,至少包含:AndroidManifest.xml配置文件Android.mk 编译脚本文件res目录 用于放资源文件src目录 用

2021-03-08 12:00:14 1094

原创 源码编译引入第三方库

1. 发现问题在Android工程开发中难免会有引入第三方库的需求,例如GSON,Okhttp,Glide等等,但是在源码中用makefile编译如何让编译器知道你引入的库呢?下面我举一个例子来说明,例如我们工程需要引入GSON库,没引入的时候编译报错如下图。2. 寻找原因原因的话编译器已经报出来了,就是找不到对应的类,也就是找不到对应的库文件。3. 解决办法(引入第三方库方法)在解决问题之前首先介绍一下这两个编译参数:BUILD_JAVA_LIBRARY 与 BUILD_STATIC_JAVA

2021-03-08 11:59:07 742

原创 徒手搭建编译环境,编译Android源码--手把手,嘴对嘴版本

作为有点点小追求的Android Developer,应该都需要拥有一套自己的Android源码吧,一方面方便自己对源码的理解,另一方面也方便自己验证自己的很多猜想。本文主要记录一下源码从下载到编译成功的一整套完整过程,以便以后自己在其他地方搭环境或者其他朋友搭建有借鉴的地方。在Windows上从零开始搭建环境我理解分为以下几个步骤:搭建Linux运行环境,详见第一章安装下载和编译需要的各种工具,详见第二章下载源码构建编译环境编译源码运行下面我就一个一个的记录所有的操作,尽量细致哈,哈哈

2021-02-25 11:28:54 242

原创 IPC机制(三)--ContentProvider、Socket和Binder池

1.ContentProviderContentProvider的底层实现是基于Binder,系统为我们做了深度的封装,让我们使用起来非常容易。// 第一步// 实现一个内容提供者,每个CURD方法中实现对数据的提供,可以是大多是从数据库加载数据public class BookProvider extends ContentProvider { private static final String AUTHORITY = "com.gacrnd.gcs.ipc.BookProvider

2021-02-25 11:28:14 282

原创 Ubuntu安装工具篇

1.安装VMware Tools1.1 选择安装/重新安装VMware tools1.2 VMware会自动下载最新的安装包(默认会在以下目录:/media/<你的用户名>/VMware Tools)1.3 进入安装包目录1.4 解压安装包(指令:tar -zxvf VMwareTools-10.2.5-8068393.tar.gz)如果报以下错误:chmod: changing permissions of ‘VMwareTools-10.2.5-8068393.tar.gz’:

2021-02-25 11:27:22 1364

原创 虚拟机安装Unbuntu 16.04

1.准备Ubuntu虚拟机因为我准备编译Android P的源码,所以至少需要安装16.04版本,如果编译Android M的源码,可以安装14.04的。这个就不多介绍了,直接上Ubuntu链接(墙裂不建议在官网下,没墙出去,贼慢!),各位看哪个信源快自己选择吧。官方下载地址(不推荐)https://www.ubuntu.com/download中科大源http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/阿里云开源镜像站http://mirror

2021-02-09 12:48:10 480

原创 Android-IPC机制(二)--Bundler、文件共享和Messenger

1.Bundle我们知道,Acitivity、Service和Receiver都是通过Bundle进行通信的,所有的Intent.putExtra()方法最终都会分装到Bundle中,而Bundle实现了Parcelable接口,所以可以很方便的在进程间进行通信。所以我们可以通过Intent启动进程B的一个Service组件(例如IntentService,JobService,JobIntentService),执行后台计算,计算完成之后,由于这个Service在进程B中,所以进程B可以直接处理计算结

2021-02-09 12:47:23 166

原创 Android-IPC机制基础(一)

1. Android IPC简介​ IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程间进行数据交换的过程。关于进程和线程的区别,在我之前发过的多线程并发总结录(一) – 线程进程基础中有详细叙述到。在Android程序中有一个主线程叫UI线程,只有在UI线程里面才能操作界面元素。很多时候,如果在UI线程执行很多耗时操作,严重影响了用户的体验,系统就会报出ANR异常(Application Not Responding)即应用无响应。​ I

2021-01-28 16:52:43 193

原创 Handler机制详解

1.Handler的诞生由于Android采用的是单线程模式,开发者无法在子线程中更新 UI,因此在Android开发中,经常会在子线程中进行一些操作,当操作完成之后,将结果发送到主线程进行显示。探索其背后的模式:子线程、Handler和主线程三者组成了生产者和消费者模式。子线程负责生产数据,主线程负责消费数据,而Handler负责将数据从子线程抛到主线程中。详细见下图2.Handler相关的类Hanlder:发送和接收消息Looper:用于轮询消息队列,一个线程只能有一个LooperMess

2021-01-27 19:23:51 862

原创 垃圾回收机制(四)

1. 垃圾回收算法1.1 复制算法(Copying)​ 将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要按顺序分配内存即可,实现简单,运行高效。只是这种算法的代价是将内存缩小为了原来的一半。​ 专家经过大量实验发现:新生代中的对象98%是“朝生夕死”的,所以并不需要按照1:1的比例来划分内存空间,而是将内存分

2021-01-27 13:26:15 151

原创 对Java对象的深入认识(三)

1. Java对象1.1 Java对象的组成​ 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包括两部分信息: 对象自身的运行时数据和类型指针运行时数据包含哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。《多线程并发总结(八)–Java内存模型》3.3小节有讲到线程运行的不同状态mark word的不同值类型指针,即对象指

2021-01-22 16:43:31 98

原创 可视化JVM理解运行时数据区(二)

1. 工具以及配置​ 要可视化代码在内存中的位置,以及虚拟机是如何划分运行时数据区的,我们需要使用到HSDB工具,该工具位于JDK\lib目录下。​ 我们需要的工具如下:JDK\lib目录下的sa-jdi.jarJDK\jre\bin目录下的sawindbg.dll动态库 (注意!!需要把这个动态库copy到JDK\lib)​​ 工具准备好了,那就行动吧。Step1: 进入到JDK\lib,我的目录是:F:\Java\JDK\libStep2:打开命令行控制台Step3:运

2021-01-21 17:51:17 103

原创 JVM内存管理(一)

JVM与操作系统的关系1.JVM 基础1.1 Java Virtual Machine是什么​ JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。1.2 JVM的作用是什么​ JVM是一个抽象层,有了JVM,java代码就可以跨平台运行。JVM的作用主要是将字节码"翻译"成操作系统可以执行的指令代码。1.3 JVM、JRE、JDK的关系​ JVM

2021-01-21 17:50:16 97

原创 dex2jar 报错 com.googlecode.d2j.DexException: not support version

1. 前言​ 在日常开发中,有时候想做一点羞羞的事情(ps: 学习一下别人的代码),但是一用dex2jar工具反编就报com.googlecode.d2j.DexException: not support version异常,在我高涨的学习热情上直接浇了一盆冷水。(后面有工具下载地址)2. 反编手顺:​ 反编其实很简单,先简单叙述一下:Step 1:将apk用任意解压工具直接解压(我用的zip)得到classes.dex,你可能会得到很多dex,不要紧,一个一个反编就行。Step 2 :

2021-01-20 10:58:05 5142 6

原创 Rxjava原理(二)--线程调度

1. 创建线程池和线程管理策略分析// 在开发中使用Rxjava来完成线程切换会调用到以下方法(还有几个就不一一列举了,原理一样的),那么就从这里开始分析Schedulers.io()Schedulers.computation()Schedulers.newThread()AndroidSchedulers.mainThread()当我们调用以上方法中的任意一个,都会调到Schedulers类中,Schedulers使用策略模式封装了所有线程切换策略(因此后面以io()分析)。// 1.

2021-01-19 13:49:29 263

原创 Rxjava原理(一)--响应式编程核心思想的实现

1.Rxjava的使用​ 关于Rxjava的使用,网上有太多太多,我这里把所有操作符汇总出来,大家有需要了解的自行查找用法,当然我也写了一点点使用方法,在文后的github链接中,这篇文章主要是想写写自己在学习Rxjava中做的笔记,希望能理解得更深刻。详细的使用方法文档传送门:[email protected]:oujie123/UnderstandingOfRxJava.git2.Rxjava思想​ 任何需求只有一个起点和一个终点,起点开始流向一个"事件","事件"经过处理之后最终流向终点,期间事件

2021-01-19 13:48:42 215

原创 多线程并发总结(八)--Java内存模型

1. 计算机原理​ Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。Java1.5版本对其进行了重构,现在的Java仍沿用了Java1.5的版本。根据《Jeff Dean在Google全体工程大会的报告》我们可以看到计算机在做一些我们平时的基本操作时,需要的响应时间是不一样的。2. Java内存模型​ 从抽象的角度来看,JMM定义了线程和主内存之间

2021-01-15 14:31:12 102

原创 多线程并发总结(七) -- AQS

1. AQS是什么​ 队列同步器(AbstractQueuedSynchronizer,AQS),是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。并发包的大师(Doug Lea)期望它能够成为实现大部分同步需求的基础。2.AQS使用方式和其中的设计模式​ AQS的主要使用方式是继承,子类通过继承AQS并实现它的抽象方法来管理同步状态,在AQS里由一个int型的state来代表这个状态,在抽象方法的实现过程中免不了要对同

2021-01-15 14:30:09 109

原创 多线程并发总结(六)--阻塞队列和线程池

1. 阻塞队列队列:是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。阻塞队列是支持阻塞插入和支持阻塞移除

2021-01-15 14:28:50 321

原创 多线程并发总结(五)--并发编程

1. 死锁1.1 定义​ 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。1.2 产生死锁的必要条件互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又

2021-01-15 14:27:39 286

原创 多线程回忆总结录(四) --并发工具类

1 Fork/Join介绍​ ForkJoin是实现多线程"分而治之"思想的框架,将一个大任务分成多个一个个小任务,然后对每个小任务执行并行计算,最后将结果合并起来。1.2 Fork/Join使用​ 在使用方面必须首先创建一个ForkJoin 任务。它提供在任务中执行fork 和join 的操作机制,通常不直接继承ForkjoinTask 类,只需要直接继承其子类。RecursiveAction,用于没有返回结果的任务RecursiveTask,用于有返回值的任务// 继承Recu

2021-01-13 09:11:03 92

原创 多线程回忆总结录(三) --线程间的协作

线程的协作1.线程间通知等待机制是什么?​ 通知等待机制是指一个线程A 调用了对象O 的wait()方法进入等待状态,而另一个线程B调用了对象O 的notify()或者notifyAll()方法,线程A 收到通知后从对象O 的wait()方法返回,进而执行后续操作。上述两个线程通过对象O 来完成交互,而对象上的wait()和notify/notifyAll()的关系就如同开关信号一样,用来完成等待方和通知方之间的交互工作。​ notify():​ 通知一个在对象上等待的线程,使其从wait 方法返回

2021-01-13 09:09:22 59

原创 多线程回忆总结录(二) -- 线程间共享

线程间的共享1. 内置锁Synchronized​ Java 支持多个线程同时访问一个对象或者对象的成员变量,关键字synchronized 可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性,又称为内置锁机制。1.1 Synchronized的用法和用处​ 用处:有多个线程会修改到某个属性的地方,需要对修改处加锁,保证每次只有一个线程可以修改。1.2 对象锁​ 对象锁是用于对象实例方法,或者一个对

2021-01-13 09:07:12 95

原创 多线程回忆总结录(一) -- 线程进程基础

线程基础,线程之间共享与协作1.基础概念进程概念:进程是程序运行资源分配的最小单位进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘IO 等,同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的、静态的,进程是活的、动态的。进程可以分为系统进程和用户进程。

2021-01-11 22:43:05 176

原创 Java反射学习笔记

反射1. 什么是反射?​ 主要是指程序可以访问、检测和修改它本身状态或行为的一种能力2. Java反射提供了什么能力?​ 在Java运行时环境中,对于任意一个类,都知道这个类有哪些属性和方法,对于任意一个对象都能调用它的任意一个方法。具体的能力如下:1.在运行时判断任意一个对象所属的类。2.在运行时构造任意一个类的对象。3.在运行时判断任意一个类所具有的成员变量和方法。4.在运行时调用任意一个对象的方法。3.反射的作用是什么?​ 反射可以在程序运行的时候,动态修改程序的某些属性,使得

2021-01-11 22:32:26 137

原创 代理模式:静态代理和动态代理详解

代理模式:静态代理和动态代理详解1. 静态代理2.动态代理1. 静态代理**1.1 定义:**代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活 中常见的中介。1.2 目的:(1) 通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性;可以实现客户端和服务端解耦,方便替换真实实现的对象。(例如某项目使用了Volley网络请求,现在项目有一个特殊需求,要换成okhttp网络请求框架,使用代理模式可以很容易替换)

2021-01-07 16:40:20 345 1

原创 java.io.IOException: unexpected end of stream on Connection异常解决

<-- HTTP FAILED: java.io.IOException: unexpected end of stream on Connection{public-access.gacicv.com:443, proxy=DIRECT@ hostAddress=public-access.gacicv.com/139.199.92.218:443 cipherSuite=TLS_EC...

2019-05-23 13:59:57 42583 4

原创 VMware移植虚拟机之后,报”无法打开虚拟机,该虚拟机已经由某个磁盘或快照使用”

今天移植了虚拟机,VM启动的时候报:无法打开虚拟机,该虚拟机已经由某个磁盘或快照使用原因是之前的虚拟机添加了硬盘快照。解决方案: 在VMware中找到当前的虚拟机,然后删除之前添加的硬盘就可以了,只保留最开始建的硬盘。亲测有效!!...

2019-03-12 11:31:20 2431

转载 boolean和String相互转换,getBoolean和parseBoolean区别

相互转换方法:String转Boolean  String a = "true";Boolean.getBoolean(a);Boolean转Stringboolean b = true;String s = String.valueOf(b);但是:public static boolean getBoolean(String name)当且仅当以参数命名的系...

2019-02-20 14:02:59 2648

转载 Warning: there were 11 unresolved references to classes or interfaces.

问题描述:Warning: there were 11 unresolved references to classes or interfaces.         You may need to add missing library jars or update their versions.         If your code works fine without the m...

2019-02-15 14:17:12 2278

转载 ABIs [armeabi] are not supported for platform.

报错内容:原因:新版本的as默认下载的ndk版本是17,该版本已经不支持armeabi了,无奈只能降级处理,笔者降到版本 android-ndk-r16b解决方案:我尝试找了一下午解决方法,目前最有效的解决方法就是下载NDK17一下的版本,然后解压后(文件比较大,随便解压到其他盘)路径设置成该路径即可。 如图,是我新下载的版本16的 官方下载:地址:https:...

2019-02-14 17:40:58 570

转载 android studio 下方一直闪

问题:    我修改jar包之后,AS一直闪。解决方案:     然后解决问题

2019-02-13 15:47:27 577 1

韩顺平坦克大战所有素材和代码

这个是韩顺平老师在讲解JAVA教程事的java代码和素材,需要到自己下载看看吧

2015-08-05

JDBC驱动包

这个是JDBC驱动,里面包括三个jar包。下载后放入eclipse项目中就可以用了

2015-08-05

空空如也

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

TA关注的人

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