Android深度探索
文章平均质量分 80
分享各类Android相关的精品技术文章。
Omni-Space
专注Android, Mobile Security and AI
展开
-
Android init第三、四部分详细分析
本文一定要在详细阅读了,系列的第二篇文章时候,再来阅读。/init程序第三部分 action_for_each_trigger("early-init", action_add_queue_tail); queue_builtin_action(wait_for_coldboot_done_action, "wait_for_coldboot_done"); queue_builtin_action(keychord_init_action, "keychord_init"转载 2021-05-02 23:45:28 · 232 阅读 · 0 评论 -
Android init.rc分析
1 前言什么是init.rc文件?import /init.usb.rcimport /init.${ro.hardware}.rcimport /init.trace.rcon early-init # Set init and its forked children's oom_adj. write /proc/1/oom_adj -16 # Set the security context for the init process. # This s转载 2021-05-02 23:44:19 · 518 阅读 · 0 评论 -
Android 启动分析 1
1.概述Android虽然被称作一种操作系统,其实它仍然使用的Linux的kernel。所以本质上可以说,Android是一个适用于移动设备的Linux发行版。也就是说,之前的分析Linux内核的经验可以拿来用于分析Android。不过,值得注意的是,Android除去对Linux内核的一些改动外,它的大部分代码还是在Linux内核启动后的用户空间程序上。所以,分析Android代码时,不仅要对Linux内核代码熟悉,还要对熟悉Linux系统编程要用到的函数,比如fcntl、mmap、open、read转载 2021-05-02 23:42:48 · 405 阅读 · 0 评论 -
Cgroup 研究报告
Control Groups (Cgroups) 是 Red Hat Enterprise Linux 6 (以后简称 RHEL6) 提供的一项内核功能。Cgroup是将任意进程进行分组化管理的内核功能。Cgroup提供了一个cgroup虚拟文件系统,作为进行分组管理和各子系统设置的用户接口。因此,要使用cgroup,必须先挂载cgroup文件系统:mount -t cgroup -o 子系统名 层级名(目录名) /sys/fs/cgroup/层级名(目录名)我们可以使用 Cgroups 为任转载 2021-05-02 23:26:28 · 442 阅读 · 0 评论 -
QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)
一、提升性能核心要素1、将OPENGL 接口进行穿透调用,下面对opengl穿透做个小结2、在arm开发板上打开kvm特性,这个qcom&mtk都是实现了的,只需要打开开关即可二、ANDROID OPENGL 业务实现细节解释1、 OPENGL命令队列是确定了,可是命令的参数,有的是系统给的,有的是上一个命令计算的结果,例如纹理操作,首先调用API创建一个纹理,得到纹理标记,然后后面再使用API操作该纹理时,就是使用这个纹理标记的。因此如果遇到这个创建纹理的AP...转载 2020-07-26 17:43:05 · 999 阅读 · 0 评论 -
基于容器原理(docker、lxc、cells)的Android 双系统设计概要
写在前面最近一两年预研加开发android双系统;中途用过不少开源代码或者研读过大牛BLOG,现开放双系统设计原理来回报社区。备注:我是在android6.0上实现的。这个项目的原型来自于,哥伦比亚大学虚拟化研究室的一篇论文(也有一个DEMO),后来一个以色列公司cellrox在2014年进行了商业化,2015年的时候浙大一个操作系统研究室也出了一个DEMO(名称叫Condroid)。哥大论文地址:http://systems.cs.columbia.edu/projects/cells.转载 2020-07-26 17:40:56 · 1136 阅读 · 0 评论 -
Android NFC Host Card Emulation (HCE)
Can I prevent Host Card Emulation service from being triggered by select AID?How to communicate with HostApduService from an Activityhow to start and stop HostapduService [duplicate]how to bind HC...原创 2019-12-04 18:13:26 · 692 阅读 · 1 评论 -
Android应用性能剖析全攻略
性能是软件质量的一个重要方面,好的软件必须要在性能上达到一定的标准。对于Android应用程序来讲,更是如此,移动互联网的红海竞争,如果应用的性能差,肯定会缺少竞争力的,这里就来聊一聊应用开发中如何提升性能,以及在开发过程中如何处理性能问题。性能的定义对于Android应用程序来讲分为三个方面,一方面是软件整体表现上的性能,也就是能多快给用户想要的结果,比如新闻阅读类应用,这个性能就是转载 2016-03-04 17:33:59 · 1192 阅读 · 0 评论 -
Android界面性能调优手册
界面是 Android 应用中直接影响用户体验最关键的部分。如果代码实现得不好,界面容易发生卡顿且导致应用占用大量内存。我司这类做 ROM 的公司更不一样,预装的应用一定要非常流畅,这样给客户或用户的第一感觉就是快。又卡又慢的应用体验,会影响客户或用户对产品的信心和评价,所以不可忽视。目录一. Android渲染知识1.1 绘制原理1.2 掉帧1.3 为转载 2016-03-06 14:02:07 · 815 阅读 · 0 评论 -
The new NDK support in Android Studio 1.3
原文地址: http://ph0b.com/new-android-studio-ndk-support/During Google I/O 2015, end of May, Google announced a new support for the NDK by Android Studio 1.3, integrating Jetbrains CLion capabilitie转载 2016-03-07 18:45:27 · 858 阅读 · 0 评论 -
AndroidManifest.xml文件解析
一、关于AndroidManifest.xmlAndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent转载 2016-03-20 13:27:26 · 341 阅读 · 0 评论 -
Android dex分包方案 (多dex)
原文地址: http://my.oschina.net/853294317/blog/308583当一个app的功能越来越复杂,代码量越来越多,也许有一天便会突然遇到下列现象:1. 生成的apk在2.3以前的机器无法安装,提示INSTALL_FAILED_DEXOPT2. 方法数量过多,编译时出错,提示:Conversion to Dalvik format fai转载 2016-02-23 17:07:03 · 880 阅读 · 0 评论 -
Android 大牛开发者博客列表
国外Android开发者AvatarGithubBlogDescriptionGoogle Androidhttps://github.com/googlehttp://android-developers.blogspot.com/Google Android Developers BlogJakeWharton转载 2016-02-23 17:33:58 · 958 阅读 · 0 评论 -
Alibaba-Dexposed Bug框架原理及源码解析
目录(?)[+]Alibaba的AndFix热修复: Alibaba-AndFix Bug热修复框架的使用 Alibaba-AndFix Bug热修复框架原理及源码解析上一篇中已经介绍了Alibaba-Dexposed框架在线热补丁修复的使用 ,这篇主要是了解框架的原理和源码解析。原理:在Dalvik虚拟机下,主要是通过改变一个方法对象方法在Dalvik虚拟转载 2016-03-09 06:28:09 · 600 阅读 · 0 评论 -
Android-FixBug热修复框架的使用及源码分析(不发版修复bug)
前面几篇博文已经介绍了2种热修复框架的使用及源码分析,AndFix兼容性比较好,而Dexposed Art处于Beta版。AndFix和Dexposed都是阿里的开源项目。 Alibaba-AndFix Bug热修复框架的使用 Alibaba-AndFix Bug热修复框架原理及源码解析 Alibaba-Dexposed框架在线热补丁修复的使用 Alibaba-Dexposed转载 2016-03-09 06:38:03 · 567 阅读 · 0 评论 -
Alibaba-AndFix Bug热修复框架的使用
目录(?)[+]AndFix这篇主要介绍alibaba的AndFix项目的使用,下一篇介绍 AndFix原理及源码解析。Github:https://github.com/alibaba/AndFixAndFix介绍AndFix是一个Android App的在线热补丁框架。使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug。AndFix就转载 2016-03-09 06:33:44 · 587 阅读 · 0 评论 -
Alibaba-AndFix Bug热修复框架原理及源码解析
小憩之后,继续为你解读AndFix热修复框架,呵呵。上一篇Alibaba-AndFix Bug热修复框架的使用已经介绍了AndFix的使用,这篇主要介绍AndFix原理以及源码解析。AndFix原理源码解析在自定义Application中初始化PatchMangerinit方法源码Patch文件的加载loadPatch方法源码fix bugDal转载 2016-03-09 06:31:34 · 601 阅读 · 0 评论 -
Alibaba-Dexposed框架在线热补丁修复的使用
目录(?)[+]前两篇已经介绍了alibaba的AndFix热修复: Alibaba-AndFix Bug热修复框架的使用 Alibaba-AndFix Bug热修复框架原理及源码解析DexPosed是Alibaba的另一个框架,都可以在线热修复bug,只不过DexPosed也可以实现其他的功能。DexPosed介绍应用场景在Android上的使转载 2016-03-09 06:29:21 · 578 阅读 · 0 评论 -
AndFix解析——(上)
阿里巴巴前一段时间开源了他们用来解决线上紧急bug的一款Android库——AndFix对Android开发者来说真是一个很好的消息。基于自己的经验,太长的文字很少有人可以一口气看下来的,所以我打算分成多篇来分析 这是这个库解析的第一篇,我们先看一下其中的Demo代码,其中调用加载库的代码如下所示:/** * sample application * * @author转载 2016-03-09 09:26:50 · 817 阅读 · 0 评论 -
AndFix解析——(中)
我们接着分析阿里开源的AndFix库,上次留下了三个坑,一个方法,两个类,不知道你们是否想急切了解呢? loadPatch()方法和AndFixManager和Patch类。分析loadPatch()方法的时候离不开AndFixManager这个类,所以,我会在分析loadPatch()方法的时候分析AndFixManager这个类。 Patch类相当于一个容器,把修复bug所需的信息放在其中转载 2016-03-09 09:28:10 · 1164 阅读 · 0 评论 -
AndFix解析——(下)
我们接着分析阿里开源的AndFix库, 上一篇分析了Patch类,这个类相当于我们提供补丁的容器,容器里有了东西,我们要对容器进行操作了, 于是开始了我们这次的分析。在第二篇里,我们添了Patch类的那个坑,那么这篇文章我们就把最后两个坑填一填,即loadPatch()方法和AndFixManager类。在阿里给的Demo里,我们还有最后的loadPatch()方法没有深入,所以先从loa转载 2016-03-09 09:32:02 · 647 阅读 · 0 评论 -
Android平台类加载流程源码分析
前言其实大家都知道的Android是使用Java作为开发语言,但是他使用的虚拟机却并不是传统的JVM,在4.4以前Android使用Dalvik虚拟机,之后使用ART(Android Runtime).Dalvik和ART与传统的JVM不同的地方在于,为了更加高效的在移动终端运行,Google重新定义了一套Dalvik字节码,用于在Dalvik和ART虚拟机上运行.因此如果转载 2016-02-25 18:09:06 · 903 阅读 · 0 评论 -
Android客户端内置内存工具进行崩溃定位的实践经验
前言本宝宝苦啊,辛辛苦苦上线一个版本,上线之后,看到崩溃日志,感觉整个人都不好了.别人家的崩溃日志是这样子的: 1 Fatal Exception: java.lang.NullPointerException 2 at com.*.*.*.*$4.run(*.java:537) 3 at android.os.Handler.handleC转载 2016-02-25 18:12:26 · 1252 阅读 · 0 评论 -
Android 5.1 Lollipop的Zygote分析——下篇
上一篇结尾的时候,说过AppRuntime的start()最后会加载Java层次的ZygoteInit类(com.android.internal.os.ZygoteInit),并调用其main函数。ZygoteInit要做一些和Android平台紧密相关的重要动作,比如创建LocalServerSocket对象、预加载一些类以及资源、启动“Android系统服务”.ZygoteI转载 2016-02-25 18:31:59 · 789 阅读 · 0 评论 -
Android 5.1 Lollipop的Zygote分析——上篇
整体介绍因为公司最近的项目,频繁的使用了xposed框架。作为一种Hook技术,xposed框架主要是对Android系统中的app_process程序做了手脚。为了弄清楚xposed框架背后的原理,那么肯定要分析app_process它的原理喽。app_process是在程序执行期间将其名字修改为zygote的。zygote是受精卵的意思,主要作用就是进行细胞分裂嘛,是Andro转载 2016-02-25 18:30:49 · 2129 阅读 · 0 评论 -
图解Android - Zygote, System Server 启动分析
Init 是所有Linux程序的起点,而Zygote于Android,正如它的英文意思,是所有java程序的'孵化池'(玩过星际虫族的兄弟都晓得的)。用ps 输出可以看到>adb shell ps | grep -E 'init|926' root 1 0 656 372 00000000 0805d546 S /init root 9转载 2016-02-25 18:36:04 · 937 阅读 · 0 评论 -
Android Binder总结
本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接从前面的博客中我们已经学习到如何使用binder,也学习到binder的框架及原理。今天就聊聊我对android为什么使用binder作为最重要的IPC机制这个问题的想法,并总结一下先前的android binder相关博客。binder其实不是android首先提出来的IPC机制,它是基于OpenBinder来实现的。O转载 2016-04-07 02:51:25 · 497 阅读 · 0 评论 -
由Android 65K方法数限制引发的思考
前言没想到,65536真的很小。1Unable to execute dex: method ID not in [0, 0xffff]: 65536PS:本文只是纯探索一下这个65K的来源,仅此而已。到底是65k还是64k?都没错,同一个问题,不同的说法而已。65536按1000算的话,是65k ~ 65 1000;转载 2016-03-27 13:55:08 · 645 阅读 · 0 评论 -
Android APP终极瘦身指南
前言之前写了一篇《APK瘦身实践》侧重于实践和效果对比,后来受徐川老师点拨,建议改写成一篇更全面的瘦身终极杀招大全,深以为然,思考良久,新开一篇。指南条例第1条:使用一套资源这是最基本的一条规则,但非常重要。对于绝大对数APP来说,只需要取一套设计图就足够了。鉴于现在分辨率的趋势,建议取720p的资源,放到xhdpi目录。相对于多套资源,只使用720P的一套资源,在视觉上差转载 2016-03-27 13:56:49 · 3419 阅读 · 0 评论 -
理解Android Java垃圾回收机制
讲GC原理很简单,但是把GC原理讲的简单就不简单了。本文力求简单透彻,让所有Android开发人员都能明白基本的GC原理。Jvm(Java虚拟机)内存模型从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线。Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆。堆是运行时数据区域,所有类实例和数组的内存均从此处分配。非堆是J转载 2016-03-27 14:03:17 · 4665 阅读 · 2 评论 -
深入理解Android的startservice和bindservice
一、首先,让我们确认下什么是service? service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高,它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦。 二、那么,什么时候,我们需要使用service呢转载 2016-04-10 17:17:40 · 526 阅读 · 0 评论 -
Android异步编程
目录:Android的线程和内存模型AsyncTask碎片化问题Activity生命周期问题Handler & HandlerThreadLooperLoaderAsyncTaskLoaderCursorLoaderIntentServiceServiceAlarmManager参考链接Android的线程和内存模型Android转载 2016-04-10 17:26:35 · 497 阅读 · 0 评论 -
Android-深入理解AIDL
最近从新温习AIDL,发现技术这玩意就跟女人一样,你过久没去了解就会对它陌生却又充满新鲜感,然后查看网上的多半是胡扯,粘贴,我这里整合下,里面如果有错误望大家及时指出。废话不多说,进入主题首先来了解几点常识:1,一个Android应用程序对应一个进程;2,Android应用程序进程间需要借助IPC轻量级通讯协议;3,切勿把线程和进程的概念搞混乱。一个进程可以包含多个转载 2016-04-10 17:11:26 · 465 阅读 · 0 评论 -
Android实战技术:深入理解Android的RPC方式与AIDL
目录(?)[-]Understanding ADIL揭开面纱脱去外套本质--脱去内衣原理和内幕不用AIDL来实现Understanding ADILAIDL是一个接口描述文件,用于实现Android平台上面的RPC,aapt在编译的时候会自动根据规则生成用于IPC的接口和对象,而作为使用者只需要:1.在服务端Service实现接口;2. 在客户端bindServic转载 2016-04-10 17:14:42 · 608 阅读 · 0 评论 -
Android MediaRecorder系统结构
前面有分析过Camera的实现,现在来看看MediaRecorder的实现,这里我不会太去关注它的分层结构,我更关注它的逻辑!APP层 /path/to/aosp/frameworks/base/media/java/android/media/MediaRecorder.javaJNI层 /path/to/aosp/frameworks/base/media/jni/android_me转载 2016-04-15 06:01:11 · 1090 阅读 · 0 评论 -
Android 4.4 packageinstaller之权限获取及展现
1、源码分析:Packageinstaller主要是有界面的安装和卸载,先看看源码大概: AndroidManifest.xml里面的组件: 先看看PackageInstallerActivity.java文件,在安装的时候,会启动这个Activity,下面是OnCreate函数的代码片段: 前面是解析了一大堆APK的信息,后面最主要的调用了initia转载 2016-04-28 05:38:48 · 2083 阅读 · 0 评论 -
Android SQLite Database的使用模板
1、数据库–公共变量:2、数据库–打开:3、数据库–增:4、数据库–删:5、数据库–改:6、数据库–查:7、数据库–关闭:8、数据库–辅助工具:9、数据库–效果:10、效果图:原文地址: http://blog.csdn.net/rjden转载 2016-04-28 05:41:42 · 633 阅读 · 0 评论 -
数据存储之 SQLite 数据库操作(一)
这一讲我们来讲解一下数据库的存储方式 ,SQLite数据库属于文本型的数据库,它是以文本的形式来保存的。1. SQLite 数据库介绍查看 Android API文档中 SQLite 的介绍 Android提供了对 SQLite 数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。建议创建一个新的数据库的方式就是创建一个子类转载 2016-04-28 05:44:04 · 662 阅读 · 0 评论 -
数据存储之 SQLite 数据库操作(二)
上一讲我们讲解了SQLite数据库的创建[数据存储之 SQLite 数据库操作(一)],还有更新的操作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学习。1. SQLiteDatabase介绍 1. 在 SQLiteOpenHelper 类中,调用getWritableDatabase()方法也会完成创建或者打开数据库的操作转载 2016-04-28 05:45:35 · 770 阅读 · 0 评论 -
数据存储之 SQLite 数据库操作(三)
上一讲中我们讲到了SQLite数据库的操作方法 [数据存储之SQLite数据库操作(二)],我们主要是以SQL语句对数据库进行增删改查,这一讲我们来学习一下 Android 建议的对数据库的操作方法 查看 SQLiteDatabase 中, 在上一讲中有讲到 execSQL (String sql, Object[] bindArgs) 这个方法,在这里Android建议我们在操转载 2016-04-28 05:46:50 · 776 阅读 · 0 评论