自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

农场老马的专栏

老码农一枚!

  • 博客(203)
  • 资源 (10)
  • 收藏
  • 关注

原创 ToolSensor——操作传感器底层API如何使用

这是对开源项目flying中的ToolSensor.cpp的说明。flying项目的源码在这里:http://code.google.com/p/flying-on-android/这篇文章是对下面这个开源项目中ToolSensor.cpp的详细描述和知识点记录。http://code.google.com/p/flying-on-android/framework层有一个传感器服务,负责

2011-06-21 12:56:00 4136

原创 最新版本SmallLanguage的语法

这个页面只记录最新版本支持的语法。 操作符,按优先级由高到低排列()-(负)*/%+- >=== !=&&||=变量定义number a = 1;text b="hello world!";if语句if a{a=a+1;}elseif a==2;{}else{}for语句for number i

2011-06-17 13:08:00 1414 5

原创 ToolLibrary——编译和操作动态库

项目的源码在这里:http://code.google.com/p/flying-on-android/  因为用到了dlopen等函数,所以,编译ToolLibrary时,需要给LOCAL_SHARED_LIBRARIES加上libdl。  调用当前目录的子目录下面的Android.mk时,写法如下:include $(LOCAL_PATH)/lib/Andr

2011-06-09 09:35:00 8691 4

原创 陀螺仪、加速计、磁力计等传感器汇总

<br /> <br />陀螺仪就是内部有一个陀螺,它的轴由于陀螺效应始终与初始方向平行,这样就可以通过与初始方向的偏差计算出实际方向。手机里陀螺仪实际上是一个结构非常精密的芯片,内部包含超微小的陀螺。<br />加速计是用来检测手机受到的加速度的大小和方向的,而手机静置的时候是

2011-06-01 16:43:00 77231 2

原创 传感器点滴

<br /><br />SensorThreadRunnable这个线程启动后进入循环,不停地读取传感器的值,并通过ListenerDelegate.onSensorChangedLocked传入已经注册的SensorListener集合sListeners。<br />onSensorChangedLocked负责把读取到的值传递给SensorListener,所以,如果读到的值需要校正的话,可以在onSensorChangedLocked里面进行。<br /> <br />其中有一个比较特殊的Liste

2011-05-31 19:37:00 2873

原创 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 37210 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 14142 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 3245

原创 ToolIO——Android程序的STDOUT和STDER

<br /><br />这个程序主要演示了如何重定向一个程序的STDOUT和STDERR。<br />Android中由系统启动的进程,默认STDOUT和STDERR是被定向到/dev/null中去的,所以,从adb shell是看不到程序的输出的,只能通过LOGW等打印,然后通

2011-05-26 19:03:00 3763

原创 关于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 6131 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 8950

原创 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 11595 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 8924

原创 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 36125 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 3210 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 8034 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 2659

原创 分析一下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 7766 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 3800

翻译 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 4440 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 3650

原创 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 8777 2

原创 Android输入事件流程中的EventHub分析及源码演示

Android2.3的输入事件流程与以前版本有了较大的不同,这里做一下详细的分析,最后我把自己分析时用的演示代码放在了这里:下面的分析都是基于这些源码的,大家可以下载下来一边看源码一边看文档。源码里只要关注FlyingEvent这个类就可以了。如果只想看一下演示结果,可以直接把包里的flying放到机器的/system/bin目录执行,打开logcat后就可以看到演示输出。运行程序时,机器屏幕会有异象产生,很正常,因为这个程序原本是用于显示SurfaceFlinger的,这次为了演示EventHub稍微改了

2011-05-13 17:30:00 28501 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 4056

翻译 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 3541

翻译 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 2064

翻译 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 2837

原创 CTS概述

<br /><br />看了几天CTS相关的东西,翻译了两篇文档,终于把这一块儿搞明白了,顺便记录一下。<br />众所周知,Android版本分化严重,各个厂商各做各的,硬件标准乱七八糟。为了让开发者的程序运行在更多设备上,也为了让用户有更多可选的APP,也为了给厂商一个生产规范,这才有了CTS一说。只有过了CTS的设备才算是Android兼容设备,才能使用Android Market。<br />让你的设备做到Android兼容的话,需要做四步:<br />1、获取Android系统的源码,移植到你的硬

2011-05-12 09:43:00 3180

翻译 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 18874 8

原创 关于使用SurfaceFligner进行绘图的具体实现方法

SurfaceFligner是Android画形化的核心,网上有几篇关于这个C/S系统的分析,着实不错,我在文章最后的参考文章中都列出来了,大家可以先看一下那些文章从原理上对SurfaceFlinger系统的分析再看我这篇文章。我这篇文章偏重于具体代码上的实现,最后汇总成一个小的应用程序来演示如何与SurfaceFlinger交互,例子中使用的2D图形引擎。使用的SurfaceFlinger系统可以分为这么几步:建立连接、创建Surface、取得Canvas、绘制、提交Canvas。下面来具体分析一下1、建

2011-05-09 13:08:00 6166 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 6025 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 15530

原创 在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 4860

原创 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 11284 24

原创 打开Android系统中的JNI调试

VM启动时需要一些启动参数,包含标准参数和非标准参数。这里涉及到两个标准参数:-Xcheck:jni和-verbose:jni。这两个参数都设置的话,JNI调用路径就可以由dalvikvm打印出来,并通过logcat看到。可以在下面这个文件中控制是否为VM添加这两个启动参数。/frameworks/base/core/jni/AndroidRuntime.cpp先看一下第一个代码片段property_get("dalvik.vm.checkjni", propBuf, "");    if (strcmp(

2011-04-28 14:29:00 12458 2

原创 Android中,SD卡上的媒体文件(图片、视频)的改变与通知

<br /><br />MediaProvider相当于一个数据中心,SD卡上所有的数据在这里都有记录,而Gallery的什用就是展示和操作这个数据中心,每次用户启动Gallery时,Gallery只是读取MediaProvider里面的记录并显示用户。如果用户在Gallery里删除一个媒体时,Gallery通过调用MediaProvider开放的接口来实现。<br />MediaProvider和Gallery的大致关系就是这样的了。我现在碰到的问题要解决的话,必须要搞清楚一件事才能继续往下走:<br /

2011-04-13 19:39:00 12587

翻译 Android的fastboot协议

<br /><br />fastboot协议是PC通过USB与手机上的bootloader通信的协议。适用于Linux,Windows,OSX等平台。<br /> <br />基本配置要求:<br />1、USB连接PC与手机。<br />2、对于high-speec USB,包的最大尺寸必须是512byte.对于full-speed USB,包的最大尺寸必须是64byte。<br />3、协议由PC端驱动。<br /> <br />协议传输过程如下:<br />1、PC向手机发送一个命令,命令由ASCII

2011-04-13 11:24:00 10819 1

原创 Android的framework层是如何对铃声的音量进行调整的

android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装。因此,调整音量是通过AudioManager间接调用AudioService.adjustStreamVolume方法完成。音量调整分为两步:先查看模式(Ring mode)是否需要调整,如果不需要调整模式,当前模式一定是正常模式(Normal mode),那就需要调整音量。调整模式通过调用checkForRingerModeChange(oldIndex, direc

2011-04-11 17:15:00 5284

原创 关于adbd进程的ROOT权限问题

<br /><br />adbd源码位于system/core/adb/目录下,可执行文件位于/sbin/adbd。通过adb执行ps命令,结果如下:<br />USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME<br />root      1     0     296    212   c00b0124 0000d9ec S /init<br />... ...<br />shell     2183  1     3372   1

2011-03-16 18:56:00 39187 2

原创 Android自带的toolbox分析及扩展

折腾了几天,被Android那点儿少得可怜的shell命令折磨的死去活来,终于下定了革命的决心。看一下怎么把渺小的toolbox替换成伟大的busybox吧。先大致描述一下Android系统中的shell程序部分。shell实现分为两部分:一、shell解释器和内置命令源码位于system/core/sh目录下,主要完成shell命令的解释查找,对于builtins.c中包含的内置命令,直接执行,对于toolbox的扩展命令,间接调用toolbox程序完成。二、toolbox扩展命令主要完成扩展命令的执行,

2011-03-15 14:04:00 25923 1

Android 进程注入

Android 进程注入代码。跑通了整个流程,希望对大家有帮助,顺便赚点资源分。没办法,穷啊。

2014-11-07

Android NDK编写之JNI规范升级版

事隔3年,把JNI的规范重新整理了一下。希望能给大家带来帮助

2013-12-02

ContactProvider介绍

对ContactProvider的一个比较系统、很细致的介绍,入门经典。

2012-10-25

改进的开源项目3D的罗盘(marine compass)

网上有一个3D的罗盘(英文名叫marine compass),利用orientation sensor做出来的,down下来,改进了一下,让它也可以不使用orientation sensor,而是由gsensor和msensor算出来.可以通过它的设置在这两种方式之间进行选择。

2011-07-15

EventHub演示程序及源码

这个资源里面的源码及可执行文件是用于这里这篇文档的: http://blog.csdn.net/a345017062/archive/2011/05/13/6417929.aspx 文档中对Android EventHub是基于这里面的源码和可执行程序的。

2011-05-13

Android2.3 系统的兼容性标准规范

Android2.3 系统的兼容性标准规范,我在博客上贴出来的翻译当中有的部分细节没有翻译可以参考一下这篇源文档。

2011-05-11

SurfaceFlinger使用演示程序及源代码

这个资源是专门为我的这篇文章上传的,具体使用方法和原理可以参考一下这里 http://blog.csdn.net/a345017062/archive/2011/05/09/6406282.aspx

2011-05-09

Stev Guo系统文章翻译

网上整理的Stev Guo系列的文章,讲的是Android系统底层的东西,挺深入的,就一边看一边翻译了下来。

2010-12-17

JNI编程指南和规范的中文翻译(The JavaTM Native Interface Programmer's Guide and Specification)

做Android开发时用到了NDK,发现JNI是个很大的块儿空白。从官网上下了个文档开始学习,读取两遍,理解的差不多了。就花了两星期的时间,把主要部分翻译了。多多捧场。

2010-09-06

MP3文件格式分析资料及帧解析源代码(java)

收集了几个对MP3文件格式说明比较详细的网页,并附带上JAVA版本的源代码.可实现每次读取一帧数据.

2009-10-16

空空如也

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

TA关注的人

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