自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 U盘OTA升级

最近在做安卓设备,考虑到一个问题,设备到达现场,需要更新系统,但是拆机刷机有很麻烦,并且数据丢失,为了解决这个问题,考虑到两个方式,第一个就是OTA在线升级、第二个U盘升级,其实原理差不多,但是如果设备内存有点小,可以使用U盘升级系统、我们这个采用的是是全包升级,当然也可以差分别升级系统。1. 制作全量升级包 1.source build/envsetup.sh ...

2019-07-11 10:52:34 2783

原创 Android Gmail签名客制化

最近几天做海外项目,需要定制email的签名,比如send by xx;也就是预制厂商的签名,由于用的是gms 里面的gmail.apk 没有源码,只要apk文件,这个问题困扰了两天,想办法也要搞定。因此需要反编译gmail .apk 当时第一种思路就是 运行时资源替换,发现只能替换string里面的资源,替换其他的会出现crash,因此第一种是行不通的 ,第二种方法就是网数据库里面改值,由于...

2018-04-04 16:59:09 2054 9

原创 Android 底部虚拟按键颜色修改

最近做相见发现一个bug, 如图 底部虚拟按键出现了半透明的颜色 和相机底部重叠了,因此需要修改 ,方法如下: Window window = getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | Wind...

2018-04-04 16:38:10 10168

原创 Android chrome浏览器的定制

最近在做海外项目需要定制chrome浏览器的书签和主页,在8.1的项目上实现,当时手机还没有预制GMS,只能下载chrome 这个apk做实验,出现了很多问题,书签没有作用,安装了gms里面的chrome,主页又没生效,六神无主,经过网上的文档发现,GMS必须预制才能生效。1.预制书签。预制书签很简单 ,只需要改系统自带的原生代码的目录下.\packages\providers\Par...

2018-03-24 10:56:32 8548 7

原创 Android studio JNI开发

前些天要写Android 双摄打包工作,由于任务紧,要实现调用底层so库功能 ,因此需要写jni来实现。如下:1.先应用需要导入so库,定义方法 :public class Compress { static { System.loadLibrary("compress_jni"); } public native static by...

2018-03-24 10:26:09 378

原创 Android手势滑动(左滑和右滑)

最近想实现Android左滑弹出菜单框,右滑消失菜单这个个功能。了解了一下Android 的滑动事件,必须是在view组件或者Activity上实现,同时必须实现OnTouchListener, OnGestureListener这个两个接口。public class MyRelativeLayout extends RelativeLayout implements GestureDetector

2017-11-13 09:53:38 13449

原创 Java设计模式之策略模式

在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判

2017-11-01 09:52:39 192

原创 Java设计模式-观察者模式

观察者模式中,一个被观察者管理所有相依于它的观察者物件,并且在本身的状态改变时主动发出通知。这通常通过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。角色 抽象被观察者角色:把所有对观察者对象的引用保存在一个集合中,每个被观察者角色都可以有任意数量的观察者。被观察者提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 抽象观察者角色:为所有具体的观

2017-10-24 10:50:41 173

原创 【数据结构】链表的原理及与其相关的常见面试题总结

一:链表原理 链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。下面对单向链表做一个介绍。 单向链表是一种线性表,实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能

2017-09-08 11:12:18 301

原创 Java实现二叉树查找

二叉查找树简介 二叉查找树(Binary Search Tree),又被称为二叉搜索树。 它是特殊的二叉树:对于二叉树,假设x为二叉树中的任意一个结点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[y] <= key[x];如果y是x的右子树的一个结点,则key[y] >= key[x]。那么,这棵树就是二叉查找树。在二叉查找树中:

2017-09-06 10:48:59 2490

原创 Java数组实现栈

能存储任意类型的数据。import java.lang.reflect.Array;public class GeneralArrayStack<T> {private static final int DEFAULT_SIZE = 12; private T[] mArray; private int count; public GeneralArrayStack(Cla

2017-09-05 16:54:01 319

原创 Java双链表的实现

public class DoubleLink <T>{ //表头 privte DNode<T> mHead; //节点个数 private int mCount; //双向链表节点对应的结构体 private class DNode<T>{ public DNode prev; public DN

2017-09-05 16:28:42 366

原创 Android 编译系统二

一、Android系统目标 Android build 系统的缺省编译目标是droid。droid目标会依赖其他目标,所有的目标共同组成了最终产品,下面是droid目标的定义:droid :droidcore dist_filesdroid core : files\ systemimage\ $(INSTA

2017-09-04 18:11:25 415

原创 Android 预编译模块

在实际的开发过程,并不会像Android一样将所有的源码一起编译,有很多的APK、Jar包等都是预先编译好的,编译系统时需要将这些二进制文件复制到生成的image文件中. 常用的方法是通过PRODUCT_COPY_FILES变量将这些文件直接复制生成的image文件中,但是有些APK文件和jar包,需要使用系统的的签名文件才能正常运行,这样复制的方式就不痛了,另外,一些动态库文件可能源码中

2017-09-04 16:56:55 2853

原创 Android 模块编译

1.编译一个APK文件LOCAL_PATH :=$(call my-dir)include $(CLEAR_VARS)LOCAL_JAVA_LIBRARIES:= #指定依赖的共享java类库LOCAL_STATIC_JAVA_LIBRARIES= #指定依赖的静态java类库#指定源码列表,这里使用系统定义的函数搜寻src目录下的文件形成列表LOCAL_SRC_FILES=$(call

2017-09-01 17:57:45 724

原创 Android 抓日志的各种命令

getting logcat,radio,events,system,properties,env,dmesg,last_kmsg,ps,cmdline,userdata_check … adb logcat -d -v threadtime > logcat.txt logcat日志adb logcat -d -b radio -v threadtime > radio.txt rad

2017-09-01 14:50:13 4381

原创 Android O 亮度调节

Android O 亮度调节相比Android N的亮度调节改变不是很大,但是以前没有分析过背光亮度调节,最近遇到了一个问题,背光亮度调节没有反应,因此把流程从上到下梳理了一下。 1.设置里设置背光亮度 packages\apps\Settings\src\com\android\settings\BrightnessPreference.javapackage com.android.sett

2017-08-24 13:50:03 1844

原创 Android编译系统

从大的方面讲,Android的Build系统可以分成3大块:第一块是位于build/core目录下的文件,这是Android Build系统的框架和核心;第二块是位于device目录下的文件,存放的是具体的配置文件;第三是各模块的编译文件:Android.mk位于模块的源文件的目录下。 Repo命令 (1)Repo init 命令 Repo命令可以有很多参数,-u参数用来表示初始化软件仓库,e

2017-08-10 09:11:21 541

原创 Android 进程管理

在Android中,进程(process)的概念被弱化,传统的进程是程序执行的载体,进程退出意味着应用的关闭。但是在Android中进程知识一个运行组件的容器,当系统需要运行一个组件时,启动包含它的进程,当组件不在使用时,进程也会被关闭。例如一个APK文件中的两个service,可以运行在一个进程中,也可以运行在各自的进程中。 虽然在Android的应用开发中,不再强调进程的概念,但是在AMS中,

2017-08-09 16:31:53 2642 1

原创 Java之LinkList类

LinkedList是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能进行队列操作。 LinkedList 实现Deque接口,即能将LinkedList当作双端队列使用。 LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。 -LinkedLi

2017-08-07 15:29:43 2000

原创 Android 包管理(PackageManagerService)

程序包管理主要包含三个部分内容。提供一个能够根据intent匹配到具体的Activity、Provider、Service。即当应用程序调用startActivity(intent)时,能够把参数中指定的intent转换成一个具体的包含了程序包名称及具体Componet名称的信息,以便Java类加载具体的Componet。进行权限检查。当应用程序调用某个需要一定权限的函数调用时,系统判断调用者是

2017-08-03 17:40:58 6701 1

原创 Android 获取资源的过程分析

Android获取Resources有两种方法,第一种是通过Context,第二种是通过PackageManager。 1. 通过Context获取 在以往的程序开发时,大家经常使用getResources.getXXX()方法获取XML文件中定义的资源,比如getDrawable()、getString()、getBoolean()等。这些是怎么访问的呢?流程是怎么样的呢?

2017-08-02 19:27:57 1571

原创 Android APK的存储结构

应用程序最终都是以一个APK方式发布。首先看看apk的编译流程。 apk本身是一个zip文件,这就像jar包一样,都是一个zip文件,因此我们可以使用unzip解压出来。具体包含一下文件目录。AndroidManifest.xml:该文件与开发的时候文件基本上相同,不同的是这个是一个二进制的XML文件。查看该文件可以使用AXMLPrint.jar工具包,可以转换成正常的XML文件。META

2017-08-02 16:38:42 586

原创 Android开发规范

一、 命名规范 1. 包命名 规则:包名全部小写,才用反域名命名规则,一级包名是顶级域名,通常为com, edu, gov, net, org等,二级包名,通过为公司名或部门名或者个人名,三级包名通常为项目名,四级包名为模块名或者层级名。以下是从层级包名来划分android项目中采用的包划分结构.com.domain.xxx.activity //用户界面中所有的Activity类

2017-08-02 14:28:28 371

原创 Android 程序的运行过程

首先,ActivityThread从main()函数中开始执行,调用prepareMainLooper()为UI创建一个消息队列(MessageQueue)。 然后创建一个ActivityThread对象,在ActivityThread的初始化代码会创建一个H(Handler)对象和一个ApplicationThread(Binder)对象。其中Binder负责接收远程AMS的IPC调用,接收

2017-07-31 20:01:17 687

原创 Java实现插入排序

插入排序法通过对未排序的数据执行诸葛插入至合适的位置而完成排序工作。首先看看思路,通过比较和插入来实现排序,其排序流程如下:(1)首先对数组的前两个数据进行从小到大的排序。(2)接着将第3个数据与排好序的两个数据比较,将第3个数据插入到合适的位置。(4)不断的重复上述过程,知道把最后一个数据插入合适的位置。最后,编完成了对原始数组从小到大的排序。eg:void insertionSort

2017-07-31 19:17:25 217

原创 Java选择排序算法

Java常用排序算法,包括交换排序、选择排序、插入排序和合并排序。其中交换排序主要包括冒泡排序和快速排序法;选择排序主要包括选择排序法和堆排序法;插入排序主要包含插入排序法和Shell排序法。以上几种基本排序法直接对计算机内存中的数据进行排序。冒泡排序算法通过多次比较和交换实现排序,其排序流程如下:(1)对数组中的各数据,依次比较相邻两元素的大小。(2)如果前面的数据大于后面的数据,就交换两个

2017-07-28 15:45:45 362

原创 Java饿汉式单例模式和懒汉式单例模式

饿汉式单例模式public class SingletonClass{ private static SingletonClass instance=new SingletonClass(); privte SingletonClass(){} public static SingletonClass getInstance(){ return instanc

2017-07-28 10:08:24 341

原创 Android三指截屏的实现

三指截屏是用户三个手机点击屏幕向下滑,最终调用systemui的截屏服务实现截屏。所以其他只是做一个策略的实现。目前很多不少手机都实现了该功能,因此自己也尝试着实现该功能。 1.首先是注册事件,监听用户是否设置打开了三指截屏功能。if(Feature.FEATURE_THREE_FINGER_SCREENSHOT){ resol

2017-07-27 14:26:49 7158 5

原创 Android 应用冻结流程分析

Android 的这些组件有两种状态,禁止的和正常激活 ,默认为激活状态。Android应用冻结主要是调用PMS来实现应用冻结。用户可以通过命令 PackageManager接口的方法实现或者通过pm命令来实现。1.客户端调用PackageManager如下接口: int getComponentEnabledSetting(in ComponentName componentName); /

2017-07-27 11:53:28 13856

原创 VirtualAPK的特性

VirtualAPK的特性VirtualAPK是滴滴出行自研的一款优秀的插件化框架,主要有如下几个特性。功能完备支持几乎所有的Android特性; 四大组件方面 四大组件均不需要在宿主manifest中预注册,每个组件都有完整的生命周期。Activity:支持显示和隐式调用,支持Activity的theme和LaunchMode,支持透明主题; Service:支持显示和隐式调用,支持Serv

2017-07-06 15:57:16 788

原创 Android ps进程命令

ps进程命令 在adb shell终端,输入 ps,可查看手机当前所有的进程状态,其中ps的英文全称是Process Status。ps命令参数 -t 显示进程里的所有子线程 -c 显示进程耗费的CPU时间 -p 显示进程优先级、nice值、调度策略 -P 显示进程,通常是bg(后台进程)或fg(前台进程) -x 显示进程耗费的用户时间和系统时间,格式:(u:0, s:0),单位:秒(

2017-06-02 11:30:39 4116

原创 Android Am命令用法

一、概述 作为一名开发者,相信对adb指令一定不会陌生。那么在手机连接adb后,可通过am命令做很多操作:(1) 拨打电话10086adb shell am start -a android.intent.action.CALL -d tel:10086 (2) 打开网站www.gityuan.comadb shell am start -a android.intent.action.VIEW

2017-06-02 11:27:46 1041

原创 Android pm 命令

一、Pm命令 命令格式:pm 命令列表:命令 功能 实现方法 list packages 列举app包信息 PMS.getInstalledPackages install [options] 安装应用 PMS.installPackageAsUser uninstall [options] 卸载应用 IPackageInstaller.unins

2017-06-02 11:26:21 1327

原创 Android 打印trace方法

Android 开发语言主要分为3类:Java、C++、c,分别对应的是应用层、framework层、native层、内核层。在进行调试的时候需要打印出调用栈是非常有必要的。下面分别列举出来三个语言的用法:Java: 1. RuntimeException stack = new RuntimeException(); stack.fillInStackTrace(); 2.

2017-06-02 11:10:31 3555

原创 Android dumpsys用法

一、 dumpsys命令 1.1 服务列表 不同的Android系统版本支持的命令有所不同,可通过下面命令查看当前手机所支持的dump服务,先进入adb shell,再执行如下命令:dumpsys -l。 这些服务名或许你并看不出其调用的哪个服务,那么这时可以通过下面指令:service list。表一:服务名 类名 功能 activity ActivityManagerService

2017-06-02 10:58:33 767

原创 Android DropBoxManager服务分析

一、启动流程 DropBoxManagerService(简称DBMS) 记录着系统关键log信息,主要功能用于Debug调试。 Android系统启动过程SystemServer进程时,在startOtherServices()过程会启动DBMS服务,如下:1.1 启动DBMS [-> SystemServer.java]private void startOtherServices() {

2017-06-02 10:52:26 5903

原创 Android find 和grep命令的使用

在使用Linux(xshell)时,经常需要进行文件查找,其中查找命令主要有find和grep。 区别: (1)、find命令是根据文件的属性进行查找文件。文件属性如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。 (2)、grep命令是根据文件的内容进行查找。会对文件的每一行按照给定的模式进行匹配查找。 find命令 基本格式:find path expression

2017-02-07 16:27:52 6006

原创 Android adb 连不上手机解决方案

ADB连接不上手机,解决方案手机连接电脑,右键点击电脑管理——>设备管理器,连接不上会出现黄色的提示,点击右键查看设备属性 ,查看硬件id此时进入你的sdk路径的D:\Android\sdk\extras\google\usb_driver(我的路径),打开android_winusb.inf文件,在[Google.NTamd64]字段下面加入: ;C206 %SingleAdbInte

2017-02-07 16:20:48 2931

原创 Android Framework 编译流程

framework的编译是对framework目录下所有的子目录的编译。framework在编译后会生成几个重要的jar包。他们是framework.jar、core.jar、ext.jar、framework-res.jar。framework.jar包是framework层Java源文件编译的。core.jar是dalvik虚拟机运行时所需要的java运行库文件。ext.jar包含了一些可扩展的

2017-02-07 10:51:21 4752 1

Android 电源管理

Android 电源管理

2018-03-26

空空如也

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

TA关注的人

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