自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (6)
  • 收藏
  • 关注

原创 Maven

Maven仓库官网网址。

2023-11-21 14:47:11 1345

原创 Android11 HAL层开发

最近在搞Android11,拉起hal服务的时候报错了,一直崩。首先,Android11不能使用直通式HAL的写法了,会报以下的错误:LegacySupport: Could not get passthrough implementation for [email protected]::IFingerprint/default

2021-11-18 14:48:59 6998 3

转载 bugreport实战

一、Bugreport文章Bugreport源码篇(一)从源码角度阐释了Bugreport,那么本文则是从实战角度来说说,如何看懂bugreport,对于通过bugreport获取到内容往往非常长,这里简单划分为19部分,先整体上简单说说每部分log的title信息。1. 系统build相关信息系统build信息:dumpstate: dateBuild: getprop ro.build.display.idBuild fingerprint: getprop ro.build.finger

2020-08-28 19:38:06 3967

原创 Android P VNDK报错

最近修改Android接口,报了一个VNDK的错误,如下按照提示执行development/vndk/tools/header-checker/utils/create_reference_dumps.py -l [email protected]。执行不通过,报了如下错误:$ development/vndk/tools/header-checker/utils/create_reference_dumps.py -l [email protected]

2020-05-11 20:41:04 12048 3

原创 Android P GPS信号模拟

最近有一个需求,需要用GPS的模拟功能,研究了一下源码。使用流程在开发者模式中的“选择模拟位置信息应用”选项,选择我们要模拟的app在我们的app中调用LocationManager.setTestProviderLocation()这个接口开发者模式源码分析看了开发者模式的源码,路径在/packages/apps/Settings/src/com/android/settings/...

2020-03-04 14:22:04 2892 7

原创 Android dump使用

简介dumpsys是Android提供的系统工具,可以用来查看所有系统服务的信息。在命令行输入如下命令,就可以罗列出当前所有的系统服务名:dumpsys -ldumpsys 后面加上列出的系统服务名即可只输出特定服务的信息。如下面指令会输出Activity任务栈的信息。dumpsys activity直接dumpsys 某个service打出的信息量很大,可以有选择性的添加一些参数...

2019-10-11 12:12:12 5608

原创 Android O CarService

本文基于Android O源码。主要介绍Android的CarService。架构Android Automative的整体架构如下图所示:从这幅图中我们可以看出,Android Automative是在原先Android的系统架构上增加了一些与车相关的(图中中间部分)模块。包括:Car App:包括原始设备制造商(OEM)和第三方开发的App。Car API:提供给汽车Ap...

2018-09-27 16:07:02 16184 4

原创 Android打印堆栈的方法

打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系,这个对源代码逻辑研究是很有帮助的。Javanew Throwable().printStackTrace(); 很简单。Native C++在mk中要添加下面的库:LOCAL_SHARED_LIBRARIES := \ libbinder \包含下面头文件:includ...

2018-06-29 15:10:02 2159

原创 Android8.1HAL层开发

本文基于Android8.1源码。 这里介绍的是一种简单HAL的写法与调用。 我将会编写一个app直接调用HAL的接口,而HAL层代码将直接读写驱动的节点。简介Android O的一项新元素是 Project Treble。这是 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。 在Andro...

2018-06-06 10:29:08 26716 12

原创 Log.isLoggable的使用

本文将介绍怎么打印出framework源码中的log。在Android源码中,经常可以看到如下的log代码://AudioService.javaprivate static final String TAG = "AudioService";protected static final boolean DEBUG_VOL = Log.isLoggable(TAG + ".V...

2018-06-04 19:06:47 2620

原创 2个8位数据和一个16位数据相互转换

这种位的转换其实理解了本质就很容易了,也很基础。首先先了解一下bit和Byte,俗称大B和小b的区别。 一个小b只能代表一个内容(0或者1,其中的一个) 两个小b可代表4个内容 “2的2次方“ (00,11,01,10)bit意为“位”或“比特”,是计算机运算的基础; Byte意为“字节”,是计算机文件大小的基本计算单位; 换算关系: 1Byte = 8bits...

2018-05-31 11:23:51 27965 3

原创 ProtoBuf入门

最近在入Android O的坑。看到ProtoBuf了解一下。 Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域。你可以用定义自己ProtoBuf的数据结构,用ProtoBuf编译器生成特定语言的源代码,(如C++,Java,Python等,目前ProtoBuf对主流的编程语言都提...

2018-03-24 17:34:51 310

原创 在Ubuntu下安装Android Studio并导入源码

1.下载Ubuntu版本Android Studio到官网下载,选择Ubuntu版本2.安装把官网下载的zip包放到ubuntu下。 在终端使用下面命令解压zip包到/usr/local/路径下:unzip -d /usr/local/ android-studio-ide.zip如果要把文件解压到指定的目录下,需要用到-d参数。解压的时候,有时候不想覆盖已经存在...

2018-03-22 19:48:20 1925

原创 String类型转化成Int类型

String类型通过ASCII规则转化成int类型:String–>byte–>intArrayList<Integer> arrayList = new ArrayList<Integer>();ArrayList vecCmdParam = new ArrayList();for(int i = 0; i < vecCmdParam.size(); i++){

2017-10-08 10:27:08 1845

原创 系统强制横屏、竖屏

Activity横竖屏修改属性android:screenOrientation即可属性有下述可选值: 1. unspecified:默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向 2. landscape:横屏显示 3. portrait:竖屏显示 4. user:用户当前首选的方向

2017-09-29 10:38:39 2173

原创 Settings5.1源码分析

本文代码基于5.1.1。概述介绍Settings源码位置:packages/apps/Settings/SettingsProvider源码位置:frameworks/base/packages/SettingsProvider/ frameworks/base/core/java/android/provider/Settings.java

2017-08-08 15:49:59 1270 1

原创 Material Design

这两天看了一下Material Design的一些控件,下面总结一下,以备以后可以使用。Material Design是谷歌的设计工程师们基于传统的设计原则,结合丰富的创意和科学技术发明的一套全新的界面设计语言,包含了视觉、运动、互动效果等特性。2015年Google I/O大会上推出了一个Design Support库,这个库将Material Design中最具代表性的一些控件和效果进行了封装,

2017-08-01 09:12:23 414

原创 获取当前栈顶的Activity

如何获得当前栈顶的Activity?总的步骤是: 1. 得到当前运行环境(context)的Activity管理器; 2. 通过Activity管理器得到当前的任务栈信息; 3. 从任务栈中获得栈顶的Activity的名称。ActivityManager manager = (ActivityManager)mContext.getSystemService(Context.ACTIVI

2017-07-21 10:48:37 1337

原创 Service的使用:断点下载

本文将使用到Service、OkHttp、AsyncTask、Notification、运行时权限申请。首先,将OkHttp的依赖库添加好。compile 'com.squareup.okhttp3:okhttp:3.8.1'接下来,定义一个回调接口,用于对下载过程中的各种状态进行监听和回调。新建一个DownloadListener接口,如下:public interface DownloadLis

2017-07-20 19:39:32 380

转载 ConstraintLayout属性详解和Chain的使用

概述自AS2.3起创建新的Activity,默认的layout根布局就是ConstraintLayout。 所以再不学习就真的晚了。 我也是正式开始学习的道路,先说一下我的学习过程: * 先阅读了ConstraintLayout官方文档和Guideline官方文档 * 实践每个属性并记下笔记(翻译) * 学习了郭神关于ConstraintLayout可视化操作(拖拖拽拽)的博客,发现博客中

2017-07-13 18:11:11 718

原创 添加系统属性:Settings.system和SystemProperties

介绍一、使用 SystemProperties.get这中方法在framework里面经常见到。特别属性: 如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。 如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。在c++中就是对应JAVA的两个函数就是property_set, property_get,其实JAV

2017-05-09 15:23:28 6779 1

原创 Android原生音量控制

本文主要涉及AudioService。还是基于5.1.1版本的代码。 AudioService.java文件位于/framework/base/media/java/android/media/下。音量控制是AudioService最重要的功能之一。先总结一下:AudioService音量管理的核心是VolumeStreamState。它保存了一个流类型所有的音量信息。Volum...

2017-03-29 18:56:48 21983

原创 系统音量条

最近在定制Android系统音量条,发现代码还是蛮多的,下面总结一下。 代码是基于5.1.1版本的。 系统音量条的代码是在/frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java 布局文件是在/frameworks/base/packages/SystemUI/res/layout下

2017-03-02 11:05:46 4338

原创 Seekbar自定义样式及使用

seekbar的使用 &lt;SeekBar android:id="@+id/seekBar" style="@style/Widget.AppCompat.SeekBar" android:layout_width="match_parent" android:layout_height="wrap_content"...

2017-02-15 20:17:35 1163

原创 Android使用@hide的API

今天早上想修改MediaPlaybackService.java(/packages/apps/Music)的代码。将AudioManager.STREAM_MUSIC改成AudioManager.STREAM_TTS。发现AudioSystem.java(/frameworks/base.media/java/android/media)/* @hide The audio stream for

2017-01-05 11:09:14 909

原创 百分比布局

在百分比布局中,我们可以不再使用wrap_content 、match_parent等方式来指定控件的大小,而是允许直接指定控件在布局中所占的百分比,这样的话就可以轻松实现平分布局甚至是任意比例分割布局的效果了。由于LinearLayout本身已经支持按比例指定控件的大小了,因此百分比布局只为FrameLayout和Relativelayout进行了功能扩展。我们只需在项目的build.gradle

2016-12-29 19:46:44 753

原创 Linux文件类型与权限

linux的文件属性通过使用linux命令行ll即可显示出文件所有的权限与属性信息。drwxrwxr-x 5 ubuntu ubuntu 4096 7月 27 20:18 AudioSettings此行就是通过ll命令输出的内容,一共7列,每列的含义为:drwxrwxr-x –> 文件权限 第1个字符的可能值为: [d] –> 表示是一个目录 [-] –> 表示是一个文件

2016-12-20 11:19:14 390

原创 git版本回退

由于操作失误,需要将push的代码进行版本回退,首先在本地仓库执行了“git reset –hard HEAD^”命令,这样只会回退本地仓库的代码,但是我的代码之前已经push到了远程库中,查看远程仓库,发现并没有回退,怎么办呢,经过实际操作,通过以下方法可以达到效果:  1:首先在本地分支执行“git reset –hard HEAD^”,将版本会退到以前。这里的“HEAD^”只是回退到上一个版本

2016-12-19 21:01:45 427

原创 Launcher2源码学习

本文基于Android5.1.1版本。Launcher、Launcher2(2.2(Froyo)之后) 和Launcher3(4.4(KitKat)之后)其实是一样的,只是Launcher2里面加入了3D,Launcher3桌面长按又可以直接呼叫小工具了,工具列配置不同,桌面数自动增减及无限化。Launcher2源码编译Launcher2源码位置在/package/apps/Launcher2。

2016-12-05 15:51:42 2876

原创 mk文件介绍

makefile(mk)文件,一旦写好,只需一个make命令,整个工程完全自动编译。1、LOCAL_PATH := $(call my-dir),一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数‘my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

2016-11-18 15:21:32 43594

原创 LeakCanary检测安卓中的内存泄漏

内存泄漏检测框架LeakCanary可以通过简单粗暴的方式来让开发者获取自己应用的内存泄露情况。而且得益于 gradle 强大的可配置性,可以确保只在编译 debug 版本时才会检查内存泄露,而编译 release 等版本的时候则会自动跳过检查,避免影响性能。使用方法:build.gradle因为不想让这样的检查在正式给用户的 release 版本中也进行,所以在 dependencies 里添加d

2016-11-15 20:37:57 286

转载 策略模式

策略模式:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。Strategy模式使得算法的变化可独立于使用它的客户。

2016-11-10 11:56:11 155

转载 Android官方MVP架构示例项目解析

App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP、MVVM、Clean这三种。google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式,期望能留给开发者更多的灵活性。由于没有一套权威的架构实现,现在很多App项目中在架构方面都有或多或少的问题。第一种常见问题是没有架构,需求中的一个页面对应项目中的一个activity或一个fragme

2016-11-07 09:33:59 239

转载 模板方法

模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。 模板方法设计模式的意图:通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序。但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关。

2016-11-04 12:00:24 217

原创 JADX反编译软件使用

之前写过一篇文章,关于混淆编译、反混淆、反编译。现在再介绍一种反编译的软件JADX,会更方便好用一些。下载地址使用方法一:找到jadx/bin目录下,双击jadx-gui.bat打开软件,然后选择要反编译的apk即可,另外可以把反编译后的源码直接保存或者保存成一个gradle项目,可以直接在as中打开。使用方法二(命令行方式):把apk拷贝到bin目录下,cmd命令行cd到bin目录下,然后执行:j

2016-10-18 14:04:40 1281

原创 按键截屏功能源码流程讲解

本文基于Android5.1.1版本。Android4.0开始,系统自带了截屏功能,使用方法是按下音量下(VOLUME_DOWN)键+电源(Power)键。以模块来划分的话,截图功能的代码会依次调用Policy,SystemUI,Surface相关的代码,具体流程如下流程图所示:Policy(PhoneWindowManager.java):在此处完成Key的捕获,当VOLUME_DOWN和Power键被几乎同时按下

2016-09-08 14:35:38 2347

原创 JNI简单尝试

这里主要是写一个实例来解释JNI的使用。设置NDK路径选择File–Project Structure–SDK Location或者也可以通过直接修改local.properties,在里面指定NDK的所在目录。两种方法都是一样的。配置ndk属性打开app下的build.gradle文件,在defaultConfig节点下增加属性配置ndk

2016-08-25 19:45:17 357

原创 Android混淆编译、反混淆、反编译

混淆编译为了保护APK代码和架构,不轻易被外部人员反编译和破解,对发布的APK,所以必须进行代码混淆编译。 Java 是一种跨平台的、解释型语言,Java 源代码(.java文件)编译成中间“字节码”存储于.class 文件中。由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成Java 源代码。

2016-08-12 21:29:36 15593

原创 AIDL

AIDL是什么AIDL (Android Interface Definition Language), Android接口定义语言,Android提供的IPC (Inter Process Communication,进程间通信)的一种独特实现。什么时候要使用AIDL使用AIDL只有在你允许来自不同应用的客户端跨进程通信访问你的service,并且想要在你的service种处理多线程的时候才是必要

2016-08-04 21:21:58 726

翻译 Android官方文档之Services

官方原文链接。本文将介绍Services的定义、创建、启动、绑定、前台Service等相关内容。Service是Android中一个类,它是Android四大组件之一,使用Service可以在后台执行长时间的操作,Service并不与用户产生UI交互。其他的应用组件可以启动Service,即便用户切换了其他应用,启动的Service仍可在后台运行。一个组件可以与Service绑定并与之交互,甚至是跨进

2016-05-30 21:19:48 3345

fingerprint hal

fingerprint hal。这里编写的是一种简单HAL的写法,会编译出HIDL接口。

2018-09-26

Service断点续传

Service、OkHttp、AsyncTask、Notification、运行时权限申请

2017-07-20

JNITest的Demo

JNI的一个小例子

2016-08-27

AIDL的Demo

AIDL的Demo

2016-08-04

验证码自定义View

验证码自定义View。

2016-05-09

RecycleView的使用

RecycleView的使用,包括线性、网格、瀑布布局的使用。

2016-05-09

空空如也

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

TA关注的人

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