- 博客(30)
- 资源 (10)
- 收藏
- 关注
原创 传感器点滴
<br /><br />SensorThreadRunnable这个线程启动后进入循环,不停地读取传感器的值,并通过ListenerDelegate.onSensorChangedLocked传入已经注册的SensorListener集合sListeners。<br />onSensorChangedLocked负责把读取到的值传递给SensorListener,所以,如果读到的值需要校正的话,可以在onSensorChangedLocked里面进行。<br /> <br />其中有一个比较特殊的Liste
2011-05-31 19:37:00 2898
原创 Android反编译工具apktool
<br /><br />这个工具是个开源项目,地址是:<br />http://code.google.com/p/android-apktool/<br /> <br />我的是Ubuntu平台,下载apktool-install-linux-r04-brut1.tar.bz2
2011-05-30 12:30:00 37259 3
原创 为Android扩展一个硬件模块
<br /><br />为Android扩展一个硬件模块需要做两件事:<br />1、硬件和内核支持。<br />2、/system/etc/permissions/下面添加xml配置文件。/framework/base/data/etc/下面有一些已经写好的,可以根据需要直接复制过去。<br /> <br />这样,通过PackageManager的hasSystemFeature或getSystemAvailableFeatures就可以确定系统是否支持哪个模块,然后使用对应API了。<br />XML
2011-05-27 15:24:00 14170 2
原创 在Android安装Market和Map
<br /><br />AndroidMarket:<br />去这个地址把补丁下载下来:<br />http://wiki.cyanogenmod.com/index.php?title=Latest_Version#Google_Apps<br />把里面的GoogleServicesFramework.apk和Vending.apk复制到/system/app下面就行了。<br />注意:内核必须为/cache分配足够的空间作为AndroidMarket下载时的缓存,否则只能浏览,下载会失败。<br
2011-05-27 15:23:00 3308
原创 ToolIO——Android程序的STDOUT和STDER
<br /><br />这个程序主要演示了如何重定向一个程序的STDOUT和STDERR。<br />Android中由系统启动的进程,默认STDOUT和STDERR是被定向到/dev/null中去的,所以,从adb shell是看不到程序的输出的,只能通过LOGW等打印,然后通
2011-05-26 19:03:00 3831
原创 关于Flying
ToolRoot起源于一个很具杀伤力的文件管理器RootExplorer,这个APK可以让用户操作系统中的任意文件夹,了解整个过程的话,得依次看这三篇文章:RootExplorer怎么样获取root权限的http://blog.csdn.net/a345017062/archive/2011/05/24/6441986.aspxRootExplorer怎么样获取root权限的——续http://blog.csdn.net/a345017062/archive/2011/05/24/6442306.aspxT
2011-05-25 14:53:00 6169 3
原创 ToolRoot——让你的APK获取ROOT权限
这个程序是把SuperUser中的su进行改版后做成的例子,关于SuperUser,可以看一下这两篇文章:RootExplorer怎么样获取root权限的http://blog.csdn.net/a345017062/archive/2011/05/24/6441986.aspxRootExplorer怎么样获取root权限的——续http://blog.csdn.net/a345017062/archive/2011/05/24/6442306.aspx这里只描述一下这个程序如何运行,还有它的原理一、如何
2011-05-25 14:37:00 9082
原创 Android编译系统——续
上次翻译了官方的Android编译系统手册(http://blog.csdn.net/a345017062/archive/2010/12/24/6096795.aspx),原文比较简洁,原样翻译下来之后,实际工作中使用时有了更深入的理解,在这里详细地记录一下,用到什么记什么。 LOCAL_MODULE_TAGS它可能的值有四个:user,eng,tests,optional,这个值决
2011-05-24 14:40:00 11642 2
原创 RootExplorer怎么样获取root权限的——续
这回说一下su程序和Superuser.apk是如何配合让APK运行时具有root权限的。看这篇文章之前,先看一下这一篇:http://blog.csdn.net/a345017062/archive/2011/05/24/6441986.aspx1、APK中调用su命令2、su检索数据库(/data/data/com.koushikdutta.superuser/databases/superuser.sqlite),如果找到记录的话,说明当前进程已经被用户允许获取ROOT权限,则进行第4步。3、如果没有
2011-05-24 14:34:00 9092
原创 RootExplorer怎么样获取root权限的
Android系统上面有名的RootExplorer很强大,可以操作任何目录下的文件,包括像/data/data这样需要root权限才能访问的地方。它是怎么样做到的呢?先看看下面的代码。ProcessBuilder pb = new ProcessBuilder("/system/bin/sh");pb.directory(new File("/"));//设置shell的当前目录。try { Process proc = pb.start(); //获取输入流,可以通过它获取SHEL
2011-05-24 12:12:00 36242 17
原创 Gallery中实现多点触摸
Android源码自带的Gallery不支持两个手指头缩放图片这样的多点触摸功能,所以这个得自己添加。具体添加的代码很简单,修改一下/packages/apps/Gallery/src/com/android/camera/ViewImage.java中的rootListener就行了。下面的代码只做了两点的情况,根据两点之间的距离长度的变化计算出缩放比例:float scale = value / baseValue;再乘上图片原本的缩放比例:originalScale = mImageView.getS
2011-05-23 15:34:00 3235 2
原创 在Java核心库中打印log
<br /><br />Android启动Zygote进程后,在接收命令fork子进程之前会进行一些初始化,加载Java的核心库就是很重要的一步。这些核心库的源码位于/libcore/luni目录下。<br />现在碰到了一个问题,由于Zygote加载Java核心库时,调用了TimeZones.java中的createZoneStringsFor静态方法对静态字段TimeZones.CachedTimeZones.names进行初始化时出现了问题,导致VM崩溃。调试时,需要在createZoneString
2011-05-21 12:27:00 8106 7
原创 怎么样重定向到/dev/null的?
按官方的说法系统启动时每一个进程的STDIO都被定向到了/dev/null。而logwrapper可以让一个进程启动时STDIO重定向到log结点,然后通过logcat查看。这里记录一下它的实现机制。init.c中的service_start方法中有这么一句:needs_console = (svc->flags & SVC_CONSOLE) ? 1 : 0;如果needs_console的值是1,就会调用open_console();为当前启动的这个服务打开控制台作为其STDIO。如果是0的话,就调用za
2011-05-21 11:01:00 2684
原创 分析一下logwrapper的原理
<br /><br />关于如何使用logwrapper,请参考下面这篇文章:使用logwrapper调试Android程序(http://hi.baidu.com/snownight/blog/item/91d55edfa2dc1f0149540399.html)<br /> <br />我这里描述一下logwrapper的原理,看logwrapper是如何利用伪终端机制来监视一个进程的STDOUT和STDERR。<br /> <br />伪终端是由主终端和从终端这两个构成的。<br /> <br />一
2011-05-20 18:56:00 7814 2
原创 对“Android输入事件流程中的EventHub分析及源码演示”的补充
前面在工作涉及到Android的事件输入流程时,曾经以单点触摸为例,写过一篇文章介绍EventHub是如何从输入设备读取RawEvent事件最终转化成上层需要的MotionEvent的。http://blog.csdn.net/a345017062/archive/2011/05/13/6417929.aspx在上面这篇文章中曾经提到是单点触摸,当一个事件传送完毕后,最终会有一个用于确认的RawEvent。现在,多点触摸倒也差不多,不同的地方有两个一、多点触摸时,每一个事件里面包含的信息要多一些,下面把Si
2011-05-20 15:25:00 3840
翻译 Android->Dev Guide->Bluetooth
<br /> <br />蓝牙具有point-to-point 和 multipoint两种连接功能。使用蓝牙API,可以做到:<br />.搜索蓝牙设备<br />.从本地的Bluetooth adapter中查询已经配对的设备。<br />.建立RFCOMM通道。<br />.通过service discovery连接到其它设备。<br />.在设备之间传输数据。<br />管理多个连接。<br /> <br />1.The Basics<br /> <br />使用蓝牙进行设备通信,主要包含四个部分:
2011-05-16 19:31:00 4452 1
原创 Android中的模块(module)与设备(device)
<br /><br />以backlight这种设备为例来说明一下Android系统中模块与设备的关系。Android中的backlight、keyboard等多个设备都使用同一个名字为lights的模块(即/system/lib/hw/light.xxx.so)来进行操作。<br /> <br />涉及到的文件有:<br />/hardware/libhardware/hardware.c<br />/hardware/include/libhardware/hardware.h<br />/hardwa
2011-05-16 11:34:00 3719
原创 Android屏幕背光调整机制
扩展一个硬件(比如LED、蓝牙、传感器等),至少需要硬件、驱动、驱动交互模块。至于系统的层面如何把系统库加入自己的体系里面去,就是操作系统自己的事了。这里分析一下以背光调整为例Android。要调整背光,第一步是搜索并加载驱动交互模块(一个.so库),然后打开设备。看一下这个函数:void openDevice() {hw_module_t* module;int err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID,(hw_module_t const**
2011-05-14 20:05:00 8854 2
原创 Android输入事件流程中的EventHub分析及源码演示
Android2.3的输入事件流程与以前版本有了较大的不同,这里做一下详细的分析,最后我把自己分析时用的演示代码放在了这里:下面的分析都是基于这些源码的,大家可以下载下来一边看源码一边看文档。源码里只要关注FlyingEvent这个类就可以了。如果只想看一下演示结果,可以直接把包里的flying放到机器的/system/bin目录执行,打开logcat后就可以看到演示输出。运行程序时,机器屏幕会有异象产生,很正常,因为这个程序原本是用于显示SurfaceFlinger的,这次为了演示EventHub稍微改了
2011-05-13 17:30:00 28593 6
翻译 ACD系列翻译之四
<br /> <!-- @page { margin: 0.79in } P { margin-bottom: 0.08in } --><br />8. Performance Compatibility<br />符合兼容性规范的设备不仅要保证APP可以正确的运行在设备上,效率和用户体验也要过得去。因此,设备必须满足下面规定的关键效率参数。<br />图表略。。。<br /><br /><br />Security Model Compatibility<br /
2011-05-12 10:13:00 4071
翻译 ACD系列翻译之三
<br /> <!-- @page { margin: 0.79in } P { margin-bottom: 0.08in } --><br />7 Hardware兼容<br /> <br />Android可以让设备商生成各种新奇的设备并提供有趣的API,而且开发者也可以使用Android平台上的API实现各种新奇的应用程序并运行在尽可能多的设备上面。本节的这些就是要寻求一个平衡。<br />如果你的设备提供了一个硬件功能,并开放了API给第三方开发者,那么A
2011-05-12 10:08:00 3564
翻译 ACD系列翻译之二
<br /><br />4 APK兼容<br />定制必须可以安装和运行由aapt工具生成的.apk文件。系统绝对不能因为扩展.apk,AndroidManifest.xml,Dalvik字节码而导致.apk文件不能在其它系统上运行。<br /><br /><br />5 多媒体兼容<br />定制系统必须能支持官方列出的所有codec,必须支持一种方式的音频输出(扬声器等)<br />5.1 Media Codec<br />默认情况下,所有的codec都是软实现的,现在的硬件不必支持标准要求的速率。不过
2011-05-12 09:58:00 2082
翻译 ACD系列翻译之一
<br /> <!-- @page { margin: 0.79in } P { margin-bottom: 0.08in } A:link { so-language: zxx } --><br />本文档的原名是AndroidCompatibilityDefinition,以下简称ACD。以下对文档的重点进行了翻译,省略了一些图表和细节规范。如果想大致了解ACD的话,可以浏览该文档,但具体进行某一项CTS的时候,请参考原文档。<br /><br
2011-05-12 09:53:00 2863
原创 CTS概述
<br /><br />看了几天CTS相关的东西,翻译了两篇文档,终于把这一块儿搞明白了,顺便记录一下。<br />众所周知,Android版本分化严重,各个厂商各做各的,硬件标准乱七八糟。为了让开发者的程序运行在更多设备上,也为了让用户有更多可选的APP,也为了给厂商一个生产规范,这才有了CTS一说。只有过了CTS的设备才算是Android兼容设备,才能使用Android Market。<br />让你的设备做到Android兼容的话,需要做四步:<br />1、获取Android系统的源码,移植到你的硬
2011-05-12 09:43:00 3198
翻译 Android兼容性测试框架(CTS)手册
本文翻译自Android官方的CTS手册android-cts-manual-r4.pdfAndroid兼容性测试框架手册1、为什么需要兼容性测试(以下称CTS)?1.1、让APP提供更好的用户体验。用户可以选择更多的适合自己设备的APP。让APP更稳定。1.2、让开发者设计更高质量的APP。1.3、通过CTS的设备可以运行Androidmarket。另外,CTS是免费的,而且很简单。2、怎么样才能让我的设备变成兼容的。2.1、与AndroidCompatibility Definition文档(以
2011-05-10 13:05:00 19037 8
原创 关于使用SurfaceFligner进行绘图的具体实现方法
SurfaceFligner是Android画形化的核心,网上有几篇关于这个C/S系统的分析,着实不错,我在文章最后的参考文章中都列出来了,大家可以先看一下那些文章从原理上对SurfaceFlinger系统的分析再看我这篇文章。我这篇文章偏重于具体代码上的实现,最后汇总成一个小的应用程序来演示如何与SurfaceFlinger交互,例子中使用的2D图形引擎。使用的SurfaceFlinger系统可以分为这么几步:建立连接、创建Surface、取得Canvas、绘制、提交Canvas。下面来具体分析一下1、建
2011-05-09 13:08:00 6268 2
原创 Android调试.so库常用工具
readelf显示目标ELF文件的信息,比如信赖库,头信息,段信息等。addr2line用户进程崩溃时内核会记录一些基本的调试信息,如果进程执行的ELF文件包含调试符号,就可以通过addr2line找到源文件中哪一行出问题。我在调试Android的VM崩溃问题时使用到了这个工具(详细过程参考这里http://blog.csdn.net/a345017062/archive/2011/05/04/6394864.aspx)nm列出目标文件的符号清单,当没有输入文件名时,默认为a.out。size显示一个目标文
2011-05-05 18:12:00 6058 1
原创 Android JIT带来的虚拟机崩溃问题及解决方案
Android自从2.2开始加入了JIT技术,号称速度提高了3~5倍。不过JIT的稳定性有待考证。。。看一下这个issue:http://code.google.com/p/android/issues/detail?id=9281我的系统是2.3的,我把楼主的代码放在模拟器和板子上运行时候,倒是都好着呢。但我自己从网上下载的一个含有3D调用的APK,运行时VM崩溃了。这是我的板上报出的系统LOGI/DEBUG ( 71): signal 7 (SIGBUS), code 128 (?), faul
2011-05-05 16:56:00 15596
原创 在Android源码的JavaScriptCore引擎中添加LOG
<br /><br />在源码中添加LOG的话,使用下面的两种方式<br /><cutils/log.h>或<br /><utils/Log.h><br />using namespace android;<br />然后再Android.mk中添加liblog就可以了。<br /> <br />在调试Webkit中的JavaScriptCore时,发现有些.cpp文件使用上面这两种方式时,编译可以通过,但LOGW等方法打印不出来。<br /> <br />搜索了一下,发现一篇文章提到了另外的方法,稍做更改
2011-05-04 18:55:00 4910
原创 Android2.3中Webkit引擎导致VM崩溃的问题
Android2.2,2.3,2.3.3都存在的一个bug,在这里有详细的描述。http://code.google.com/p/android/issues/detail?id=12987其中,楼主的代码可以下来运行一下,我在2.2和2.3模拟器和2.3的真机上都存在这个问题。问题的核心在于这样一句话:JNI WARNING: jarray 0x4074f6e0 points to non-array object (Ljava/lang/String;)也就是进行JNI调用时,把一个Java中的Stri
2011-05-04 18:40:00 11347 24
改进的开源项目3D的罗盘(marine compass)
2011-07-15
EventHub演示程序及源码
2011-05-13
SurfaceFlinger使用演示程序及源代码
2011-05-09
JNI编程指南和规范的中文翻译(The JavaTM Native Interface Programmer's Guide and Specification)
2010-09-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人