Android
文章平均质量分 93
ariesjzj
这个作者很懒,什么都没留下…
展开
-
Android N中UI硬件渲染(hwui)的HWUI_NEW_OPS(基于Android 7.1)
UI作为用户体验的核心之一,始终是Android每次升级中的重点。从Androd 3.0(Honeycomb)开始,Android开始支持hwui(UI硬件加速)。到Android 4.0(ICS)时,硬件加速被默认开启。同时ICS还引入了DisplayList的概念(不是OpenGL里的那个),它相当于是从View的绘制命令到GL命令之间的“中间语言”。它记录了绘制该View所需的全部信息,之后只要重放(replay)即可完成内容的绘制。这样如果View没有改动或只部分改动,便可重用或修改DisplayL原创 2017-01-08 23:18:20 · 17307 阅读 · 11 评论 -
Android中的GraphicBuffer同步机制-Fence
Fence是一种同步机制,在Android里主要用于图形系统中GraphicBuffer的同步。那它和已有同步机制相比有什么特点呢?它主要被用来处理跨硬件的情况,尤其是CPU,GPU和HWC之间的同步,另外它还可以用于多个时间点之间的同步。GPU编程和纯CPU编程一个很大的不同是它是异步的,也就是说当我们调用GL command返回时这条命令并不一定完成了,只是把这个命令放在本地的command buffer里。具体什么时候这条GL command被真正执行完毕CPU是不知道的,除非CPU使用glFinis原创 2014-10-01 07:34:02 · 53330 阅读 · 5 评论 -
Android 4.4(KitKat)中apk包的安装过程
其实对于apk包的安装,4.4和之前版本没大的差别。Android中app安装主要有以下几种情况:系统启动时安装,adb命令安装,Google Play上下载安装和通过PackageInstaller安装。安装的最核心方法是scanPackageLI(),以上几个安装方式最后都是调用这个函数完成主要工作的,区别在于在此之前的处理过程不同。本文以前两种为主,简要介绍这四种安装过程。原创 2014-05-12 08:55:40 · 13224 阅读 · 1 评论 -
Android 4.4(KitKat)窗口管理子系统 - 体系框架
窗口管理系统是Android中的主要子系统之一,它涉及到App中组件的管理,系统和应用窗口的管理和绘制等工作。由于其涉及模块众多,且与用户体验密切相关,所以它也是Android当中最为复杂的子系统之一。一个App从启动到主窗口显示出来,需要App,ActivityManagerService(AMS),WindowManagerService(WMS),SurfaceFlinger(SF)等几个模块相互合作。App负责业务逻辑,绘制自己的视图;AMS管理组件、进程信息和Activity的堆栈及状态等等;WM原创 2014-07-14 09:38:36 · 12500 阅读 · 29 评论 -
Android 4.4(KitKat)中的设计模式-Graphics子系统
本文主要从设计模式角度简单地侃下Android4.4(KitKat)的Graphics子系统。作为一个操作系统,Android需要考虑到灵活性,兼容性,可用性,可维护性等方方面面 ,为了达到这些需求,它需要良好的设计。因此,在Android源码中可以看到很多设计模式的身影。光是本文涉及的Graphics子系统中,就用到了如Observer, Proxy, Singleton, Command, Decorator, Strategy, Adapter, Iterator和Simple Factory等模式原创 2013-12-21 14:22:18 · 18563 阅读 · 21 评论 -
Android 4.4(KitKat) ART初始化简析
Android KK里引入了ART虚拟机作为Dalvik虚拟机的替代,其主要目的是把Bytecode的翻译优化从运行时提前到安装时,以空间换时间,从而达到更流畅的用户体验。目前,KK中Dalvik仍是默认的虚拟机,但用户可以在Developer Option中切换到ART虚拟机。坊间传闻在下一版可能会转正。Dalvik和ART的实现分别位于libdvm.so和libart.so这两个库。两个可以同时build也可以只build一个,通过Makefile中的变量PRODUCT_RUNTIMES来控制(http原创 2014-03-07 10:50:48 · 10375 阅读 · 5 评论 -
bash: ./adb: No such file or directory
运行adb出现这种错误:bash: ./adb: No such file or directory 但adb确实存在。那说明你用的是64位的Linux,没装32位运行时库,安装$ sudo apt-get install ia32-libs 即可。原创 2012-08-04 10:00:55 · 7218 阅读 · 0 评论 -
Android下binary级的一些分析调试方法
有源码的情况当然好办,但没有源码想调bug或者想逆向怎么办。本文列举了Android下binary级的一些分析调试工具和方法。原创 2014-01-10 14:07:57 · 6087 阅读 · 0 评论 -
Android 4.4 源码和SDK下载
每次Android有更新后最闹心的就是下载源码和SDK了。网上的众多方法总是有时候能用有时候不能用,且每次死法都不同。下面是比较简单且至少这段时间比较好用的。 下载Android源码1. 在hosts文件(Ubuntu中为 /etc/hosts,Windows中为C:\Windows\System32\Drivers\etc\hosts)中加上:74.125.128.82 www.googlesource.com173.194.72.82 android.googlesource.com37.6原创 2013-03-16 15:02:55 · 2755 阅读 · 0 评论 -
为你开发的android应用apk签名
Apk签名首先要有一个keystore的签名用的文件。keystore是由jdk自带的工具keytool生成的.开始->运行->cmd->cd 到JDK目录 D:\Java\jdk1.7.0_01\bin(当然你也可以将jdk bin path添加到环境变量中,这样在任何地方都可以使用keytool了)然后输入:keytool -genkey -aliasyourtio转载 2012-06-12 09:45:03 · 2168 阅读 · 0 评论 -
Android 4.4(KitKat)中VSync信号的虚拟化
Android 4.1(Jelly Bean)引入了Vsync(Vertical Syncronization)用与渲染同步,使得App UI和SurfaceFlinger可以按硬件产生的VSync节奏来进行。关于VSync介绍详见博文http://www.androidpolice.com/2012/07/12/getting-to-know-android-4-1-part-3-project原创 2013-12-13 01:41:12 · 14984 阅读 · 2 评论 -
Wayland中的跨进程过程调用浅析
Wayland协议主要提供了Client端应用与Server端Compositor的通信机制,Weston是Server端Compositor的一个参考实现。Wayland协议中最基础的是提供了一种面向对象的跨进程过程调用的功能,在作用上类似于Android中的Binder。与Binder不同的是,在Wayland中Client和Server底层通过domain socket进行连接。和Binder一样,domain socket支持在进程间传递fd,这为传递graphic buffer和shared me原创 2014-10-20 09:43:53 · 25237 阅读 · 8 评论 -
libhybris及EGL Platform-在Glibc生态中重用Android的驱动
libhybris主要作用是为了解决libc库的兼容问题,目的是为了在基于GNU C library的系统运行那些用bionic编译的库(主要是Android下的闭源HAL库)。它在Ubuntu touch, WebOS, Jolla Sailfish OS等系统中都有使用。因为这些系统都是基于glibc生态的,然而现有的硬件厂商提供的driver多是为Android而写的,自然也是用bionic编译的。那么问题来了,说服厂商再写一套驱动不是那么容易的,就算写出来也需要经过一段时间才能变得成熟。那如何让基于原创 2014-11-24 16:27:22 · 10209 阅读 · 7 评论 -
Android 5.0(Lollipop)事件输入系统(Input System)
其实Android 5.0中事件输入子系统的框架和流程没有本质变化。Service端的实现在/frameworks/native/services/inputflinger/下(4.4中在/frameworks/base/services/input下)。通用部分的实现在/frameworks/native/libs/input/下。Android系统中有一个InputManagerService(IMS)来负责管理输入事件。它主要的任务就是从设备中读事件数据,然后将输入事件发送到焦点窗口中去,另外还需要让原创 2014-12-13 22:12:50 · 15763 阅读 · 20 评论 -
懒人搭建OpenGrok for Android N on Ubuntu 16.04
本文以在Ubuntu 16.04上对Anroid N的源代码配置OpenGrok为例,记录了适合像我这种懒人的最基本搭建过程。想用各种高级用法请自行参见官方文档。原创 2016-12-04 20:40:56 · 5241 阅读 · 0 评论 -
Android N(7.0)中的Vulkan支持
Vulkan为Khronos Group推出的下一代跨平台图形开发接口,用于替代历史悠久的OpenGL。Android从7.0(Nougat)开始加入了对其的支持。Vulkan与OpenGL相比,接口更底层,从而使开发者能更直接地控制GPU。由于更好的并行支持,及更小的开销,性能上也有一定的提升。另外层式架构可以帮助减少调试和测试的时间。但是,代价是实现相同的功能更复杂了。原本用OpenGL写个最简单的demo百来行,用vulkan祼写的话没千把行下不来。因此实际使用中需要有utility层来简化接口调用。原创 2016-09-04 12:07:37 · 19582 阅读 · 2 评论 -
Android中的转屏流程
我们知道Android中支持横屏和竖屏,用户可以选择锁定(rotation lock)也可以选择让传感器来自动转屏。而转屏时为了使用户体验更流畅,会对屏幕截屏,然后使用截屏的图来做转屏动画,直到转屏动作结束。接下来以自动旋转为例看一下大体流程。过程虽然很短,但涉及到的模块其实不少,一个简化的相关类图如下:原创 2015-11-29 19:03:03 · 10671 阅读 · 3 评论 -
Android中MediaMuxer和MediaCodec用例 - audio+video
在Android的多媒体类中,MediaMuxer和MediaCodec算是比较年轻的,它们是JB 4.1和JB 4.3才引入的。前者用于将音频和视频进行混合生成多媒体文件。缺点是目前只能支持一个audio track和一个video track,而且仅支持mp4输出。不过既然是新生事物,相信之后的版本应该会有大的改进。MediaCodec用于将音视频进行压缩编码,它有个比较牛X的地方是可以对Surface内容进行编码,如KK 4.4中屏幕录像功能就是用它实现的。转载 2014-06-18 20:00:21 · 43227 阅读 · 16 评论 -
Android中的软件Watchdog
由于Android的SystemServer内有一票重要Service,所以在进程内有一个软件实现的Watchdog机制,用于监视SystemServer中各Service是否正常工作。如果超过一定时间(默认30秒),就dump现场便于分析,再超时(默认60秒)就重启SystemServer保证系统可用性。同时logcat中会打印类似下面信息:W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.android.se原创 2015-06-18 22:33:59 · 14287 阅读 · 3 评论 -
Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
SurfaceView, GLSurfaceView, SurfaceTexture以及TextureView是Android当中名字比较绕,关系又比较密切的几个类。本文基于Android 5.0(Lollipop)的代码理一下它们的基本原理,联系与区别。原创 2015-03-05 09:13:34 · 61548 阅读 · 38 评论 -
Device namespace简介 - 基于Kernel namespace的设备虚拟化
在移动设备上,虚拟化的需求正在逐渐增加。其一,移动设备配置越来越高,一些高端配置已和桌面设备接近;其二,用户对于移动设备使用场景的多样性与日俱增。现在移动设备不仅用于娱乐日用,还用于工作;其三,安全与隐私问题日益凸显。移动设备上有更多的隐私信息,如各种账号,支付密码等,同时,各种病毒木马正在向移动设备迅速蔓延。这种背景下在一个隔离的环境中运行敏感软件是更加安全的做法;其四,多用户的需求,有时手机,尤其平板用户是多个,比如给小孩玩时就希望在一个特定的受限运行环境下。桌面系统中的虚拟化技术已比较成熟,厂商也原创 2015-01-25 14:16:46 · 5031 阅读 · 0 评论 -
Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划
原文转自http://blog.csdn.net/yihongyuelan 美国时间 2013 年 10 月 31 日, Google 正式发布了全新版本的移动操作系统 Android 4.4 KitKat 。据 google官方介绍,Android 4.4 降低了硬件的需求,提高了程序运行效率。距离 4.4 发布已经过去3个月了,不少朋友也已经体验到了 4.4 所带来的转载 2015-01-28 18:28:20 · 1772 阅读 · 0 评论 -
Android中的so注入(inject)和挂钩(hook) - For both x86 and arm
对于Android for arm上的so注入(inject)和挂钩(hook),网上已有牛人给出了代码-libinject(http://bbs.pediy.com/showthread.php?t=141355)。由于实现中的ptrace函数是依赖于平台的,所以不经改动只能用于arm平台。本文将之扩展了一下,使它能够通用于Android的x86和arm平台。Arm平台部分基本重用了libinject中的代码,其中因为汇编不好移植且容易出错,所以把shellcode.s用ptrace_call替换掉了,另原创 2013-08-11 16:27:20 · 74370 阅读 · 91 评论 -
Android 4.3 安全提升,Set-UID-Root 权限提升不再起作用,原先的ROOT方法将失效
Android目前的ROOT的基本原理,是通过系统漏洞获取ROOT SHELL权限,然后往手机里面push 最核心的两个文件,su可执行文件和superUSer.apk。 后者用于管理对应用的授权,而前者则真正用来提升权限至ROOT。 当APK需要进行高权限操作时,使用Shell方式进行: su xxxxx 即可,此时(假设用户授权了,通过superUser.apk)xxxx的命令就会以ROOT用转载 2013-09-06 08:41:32 · 6423 阅读 · 2 评论 -
实现Android下的FPS实时显示工具
FPS是图形性能是主要指标之一,很多App有显示FPS的功能,如bsplayer,skype,Antutu中的图形测试部分等,但绝大多数应用并不提供显示FPS的功能。而且应用提供的往往是应用本身的刷新率,并不等于最终用户所看到的刷新率。本文中我们自己做一个功能类似的免费工具,而且x86和ARM平台通用。原创 2013-08-30 09:22:14 · 37916 阅读 · 20 评论 -
Android下的图形渲染配置文件egl.cfg
Android中的EGL/GLES库不是在运行时直接链接的,而是在第一次使用时根据配置选择性载入的。更具体的,libEGL.so文件包含了一个“载入器”,它会尝试载入硬件图形库或是软件图形库(libagl)。载入器的源代码位于:frameworks/base/openl/libs/EGL/Loader.cpp。载入什么库取决于配置文件/system/lib/egl/egl.cfg,egl.cfg有翻译 2012-07-09 15:37:10 · 9291 阅读 · 1 评论 -
Android 信号处理面面观 之 trace 文件含义
在前一章Android 信号处理面面观 之 信号定义、行为和来源 中,我们讨论过,Android 应用在收到异常终止信号(SIGQUIT)时,没有遵循传统 UNIX信号模型的默认行为 (终止 + core )。而是打印出trace 文件来,以利于记录应用异常终止的原因。 本文就重点分析 trace 文件是怎么产生的,并详细解释trace文件的各个字段的含义。一. TRACE 文件的转载 2012-04-19 13:09:18 · 2795 阅读 · 0 评论 -
Android进入fastboot模式二法
1. 音量减小键+电源键2. adb reboot bootloader 备忘原创 2012-05-02 15:27:50 · 4393 阅读 · 1 评论 -
[Scripts][Bash] Android下批量安装指定目录下的所有apk
#!/bin/bash# Install all apk in the specified directory[ "$1" ] || { echo "Usage: $0 /dir/path" exit 1}_dir=$1for d in $(find $_dir -maxdepth 1 -name "*.apk")do echo "$d原创 2012-04-11 14:17:59 · 1387 阅读 · 0 评论 -
Android中app调试:gdb如何在动态链接库中设断点
原文地址:http://blog.csdn.net/ariesjzj/article/details/7419776这种方法适用于想调试android中app所用到的.so库的情况,尤其是载入库后一会就出问题的情况。如果直接起gdb载入动态链接库的符号表,这时符号地址是不对的。本文中以某app为例,因此具体函数名依实例肯定有所不同。 第一步:Dev Tools -> Developme原创 2012-04-06 13:57:06 · 4478 阅读 · 1 评论 -
Android下双调试器(gdb+jdb)调试应用程序
原文地址:http://blog.csdn.net/ariesjzj/article/details/7402832Android下的程序大多数用java写的,跑在dalvik里,但中间又夹杂着native的C code(如来自于JNI调用,或者来自于Android操作系统本身)。这导致了程序执行时控制流会在java和c两个上下文之间跳转,而我们一般会用gdb调c程序,jdb调java程序,因原创 2012-03-28 14:37:18 · 5934 阅读 · 0 评论 -
Android下的JDB调试
原文地址:http://blog.csdn.net/ariesjzj/article/details/7399249 第一步在$HOME/.jdbrc里设断点,如:stop in com.almalence.hdr.MainScreen.FindExpoParameters 第二步让程序在启动时停止等待jdb:Dev Tools -Development Setting原创 2012-03-28 14:17:08 · 7940 阅读 · 0 评论 -
Android下用JNI让Java调用C函数
原文地址:http://blog.csdn.net/ariesjzj/article/details/7388874基本步骤是首先将C函数编译成一个.so库,然后用Java主程序通过JNI载入库和调用其中的函数。 第一步是下载NDK,其中有些很适合入手的例子,按官方文档说的装好或解压好。 第二步:编译动态链接库。以NDK自带的sample之一hello-jni为例,先进入到该目原创 2012-03-26 08:27:20 · 2930 阅读 · 0 评论 -
Android中用gdb调试一启动就崩溃的程序
原文地址:http://blog.csdn.net/ariesjzj/article/details/7393573一般情况下程序是在某一个点挂掉的,我们可以用adb shell ps查到PID,然后在target端用gdbserver attach上去,最后在host端用gdb连上去调。但程序往往不会崩溃得这么完美,很多情况下程序一起来就crash掉了。这个时候分两种情况:1.真的是一起来就原创 2012-03-26 10:32:01 · 8281 阅读 · 0 评论 -
Android项目中编译 C的模块
Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的Android.mk. Android.mk文件本身是比较简单的,不过它并不是我们熟悉的Makefile,而是经过了Android自身编译系统的很多处理,因此要真正理清楚其中的联系还比较复杂,不过这种方式的好处在于,编写一个新的Android.mk来给An转载 2012-03-26 08:17:52 · 1353 阅读 · 0 评论 -
VirtualBox中从guest系统中用adb与连在host上的设备通信
原文地址:http://blog.csdn.net/ariesjzj/article/details/7827564 比如host为Windows,guest为Linux。多数情况下,如果我们是在Linux上开发,还是希望用Linux直接用adb连上设备,毕竟一整套开发工具链都在linux上。 首先确保安装了 Oracle VM VirtualBox Extension Pack(原创 2012-08-03 16:21:05 · 3622 阅读 · 0 评论 -
Android应用程序的内存分析
Dalvik虚拟机支持垃圾收集,但是这不意味着你可以不用关心内存管理。你应该格外注意移动设备的内存使用,在上面内存空间是受到限制的。在这篇文章里面,我们来看看Android SDK里面的一些内存剖析工具(profiling tools)是如何帮助我们修整应用程序的内存使用。一些内存使用问题是很明显的,例如,如果在每次用户触摸屏幕的时候应用程序有内存泄露,将会有可能触发OutOfMemory转载 2012-08-08 15:31:52 · 1509 阅读 · 0 评论 -
8大你不得不知的Android调试工具
将讨论的是8大你不得不知的Android调试工具,这些工具部分属于系统自带,也是一种方式方法,希望对大家有所帮助。 AD: 1. 查看当前堆栈 1) 功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系 2) 方法:new Exception(“print trace”).printStackTrace(); 2. MethodTracing 1)转载 2012-08-08 15:34:05 · 1926 阅读 · 0 评论 -
Android下用gdb进行系统级源码调试
原文地址:http://blog.csdn.net/ariesjzj/article/details/7375048Host: ubuntuTarget: Android ICS1. 将gdbserver和gdbclient分别放入target和host。两者都可在android源代码的prebuilt目录下找到。2. 在Target上启动gdbserver,在adb shell中原创 2012-03-20 19:00:42 · 7855 阅读 · 0 评论 -
android JNI utils/Log.h 找不到 解决方法
在JNI的c文件中如果用到了#include 然后用NDK 编译的时候会提示error: utils/Log.h: No such file or directory如果想要他的LOG功能的话1-----修改Android.mk文件配置,添加如下语句LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog2-----在.c文件中修改为如转载 2013-08-08 11:18:31 · 7420 阅读 · 0 评论