02 2012 档案

ubuntu下编译JNI程序
摘要:ubuntu下编译JNI程序2011-07-28 12:21http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html为何要用到NDK?前 段时间,工作中需要用android的应用程序访问android的根文件系统中的文件,但是由于应用程序的权限限制,无法访问这些文件,怎么办? 所以这就要用到了NDK编程了,既用C/C++代码实现访问系统文件,并将其生成本地库,供android中的java代码调用,这样就可以在java代 码中通过调用C/C++编写的库的接口来实现对系统文件的访问。下面就介绍下Android NDK的入门学 阅读全文

posted @ 2012-02-15 16:52 小小博客小小员 阅读(2909) 评论(0) 推荐(0)

Android Jni代码示例讲解
摘要:在今天介绍的这篇文章中,我们将会通过几个步骤对Android Jni的使用方法做一个详细的介绍,希望能给大家带来一些帮助。在Android 模 拟器中可以对Android手机操作系统进行适当的修改,增加各种功能,以满足用户的需求。那么今天我们会为大家带来Android Jni的相关使用方法,以方便大家对这一系统的解读。Android的应用程序(Dalvik VM)中使用JNI(Java Native Interface)调用C/C++开发的共享库。Android Java包各种功能概览Android调用平台功能具体技巧分享Android程序架构基本内容概述Android判断网络状态方法详解An 阅读全文

posted @ 2012-02-15 15:50 小小博客小小员 阅读(403) 评论(0) 推荐(0)

Ubuntu下搭建Android NDK开发环境
摘要:我们应该如何在Ubuntu 系统下搭建Android NDK 开发环境呢?下面一步一步教大家 步骤1.下载NDK(注意我下载的是r4版本): http://dl.google.com/android/ndk/android-ndk-r4b-linux-x86.zip 步骤2.下载完成后,解压到 ~/ 目录下: $echo $HOME <-- 查看当前用户目录,即 ~/ 目录路径 /home/wzhnsc $pwd <-- 查看当前路径 /home/wzhnsc/android-ndk-r4b 注:如上路径是我解压 android-ndk-r4b-linux-x86.zip 后的.. 阅读全文

posted @ 2012-02-15 12:54 小小博客小小员 阅读(646) 评论(0) 推荐(0)

Android开发——NDK开发入门
摘要:注:本文并非原创,参考了几位前辈的文章,本文只是稍作整理。参考1:Eclipse配置NDK_R4开发环境(集成Cygwin 、CDT)分别介绍了在window和linux下配置eclipse自动化编译ndk。参考2:android NDK 开发环境配置介绍了新版ndk的配置。参考3:史上最强NDK入门项目实战详细介绍了ndk HelloWorld的开发过程,不过ndk版本比较旧,编译方式不同。一、什么是NDK?NDK是android应用程序用来调用本地代码的一个工具集合。我们都知道android应用都是运行在DVM之上的,利用NDK我们可以实现应用程序直接调用本地代码(C、C++)。这样可以提 阅读全文

posted @ 2012-02-15 11:53 小小博客小小员 阅读(260) 评论(0) 推荐(0)

NDK 开发指南---Android NDK概览
摘要:Android NDK 概览介绍: Android SDK是一个允许Android应用开发人员使用C或C++源文件编译并嵌入到本机源代码中的应用程序包的一组工 具。重要说明: Android NDK只能用于android 1.5以上版本1. Android NDK的目的:Android虚拟机允许你的应用程序源代码通过JNI调用在本地实现的源代码,简单的说,这就意味着:----你的应用程序将声明一个或多个用’native’关键字的方法用来指明它们是通过本地代码实现的 例如:native byte[] loadFile(String filePath)----你必须提供包含实现这些方法的共享... 阅读全文

posted @ 2012-02-15 10:59 小小博客小小员 阅读(626) 评论(0) 推荐(1)

在 Linux 平台下使用 JNI
摘要:张翼翔 李庆明,简介:本文简要介绍了 JNI 调用规范,及常用函数。并通过具体示例程序展示了实现一个本地调用的基本步骤。本文的标签: best_practices, jni, 应用开发标记本文!发布日期:2002 年 10 月 29 日 级别:初级 访问情况 :8431 次浏览 评论:0(查看|添加评论 - 登录) 平均分 (27个评分)为本文评分引言Java 的出现给大家开发带来的极大的方便。但是,如果我们有大量原有的经过广泛测试的非 Java 代码,将它们全部用 Java 来重写,恐怕会带来巨大的工作量和长期的测试;如果我们的应用中需要访问到特定的设备,甚至是仅符合公司内部信息交互规范的设 阅读全文

posted @ 2012-02-13 17:47 小小博客小小员 阅读(262) 评论(0) 推荐(0)

Linux下线程同步对象(3)——条件变量
摘要:在前面两篇文章中介绍了Linux下的互斥量和读写锁两种线程同步对象。这两种线程同步对象都是用来保护特定资源(内存,文件句柄等)的。假如某个线程需要等待系统处于某种状态下才能继续执行,Linux为了解决这种问题引入了条件变量这种线程同步对象,本文简要介绍一下条件变量。 条件变量必须要与互斥量一起使用时,允许线程以无竞争的方式等待特定条件的发生。线程在等待条件变量和通知条件变量之前都必须要先把保护条件变量的互斥量加锁。 和其他线程同步对象一样,条件变量一样需要初始化和销毁,函数定义如下: #include <pthread.h> int pthread_cond_dest... 阅读全文

posted @ 2012-02-13 17:35 小小博客小小员 阅读(401) 评论(0) 推荐(0)

Linux下线程同步对象(1)——互斥量
摘要:进程是Linux资源分配的对象,Linux会为进程分配虚拟内存(4G)和文件句柄等资源,是一个静态的概念。线程是CPU调度的对象,是一个动态的概念。一个进程之中至少包含有一个或者多个线程。这些线程共享该进程空间的内存和文件句柄资源,多个线程竞争地获得这些资源。为了防止多个线程访问资源的不一致性,多线程编程一个很重要的任务就是控制好线程同步。本文简单介绍一下Linux的同步对象和使用时的一些注意事项。1、互斥量(Mutex) 互斥量本质上讲是一把锁,该锁保护一个或者一些资源(内存或者文件句柄等数据)。一个线程如果需要访问该资源必须要获得互斥量,并对其加锁。这时如果其他线程如果想访问该资源也必须要 阅读全文

posted @ 2012-02-13 17:34 小小博客小小员 阅读(461) 评论(0) 推荐(0)

Linux下线程同步对象(2)——读写锁
摘要:上文介绍了Linux下线程同步对象——互斥量,本文介绍另外Linux下同步对象——读写锁。 如果多个线程同时读资源,则不会发生竞争关系,也不会出现资源的不一致性,所以读资源的时候不需要同步对象保护。但是如果写某个资源的时候,必须要进行同步保护,否则将会出现不一致性。在上文的互斥量中,不管读写都加锁,这样对于读资源操作非常多,但写资源非常少的情况下,效率会比较低。Linux提供了读写锁来解决这种情况下的效率问题。 读写锁分为读锁定状态和写锁定状态,多个线程可以同时获得读锁定状态锁,进行各自的读操作。但是写锁定状态只能有一个线程获得,其他的线程线程的读锁定请求和写锁定请求都将会阻塞,直到当前的写锁 阅读全文

posted @ 2012-02-13 17:34 小小博客小小员 阅读(826) 评论(0) 推荐(0)

Linux下JNI实现
摘要:最近研究Android,涉及到JNI调用。虽然我对Java语言有所了解,但是还没有接触过JNI。今天在Unix Center的Ubuntu上面用JNI实现了“经典”的“Hello world”程序。通过这个简单的程序把JNI的一些小知识进行一下总结。什么是JNI JNI是Java native interface的简写,可以译作Java原生接口。Java可以通过JNI调用C/C++的库,这对于那些对性能要求比较高的Java程序无疑是一个福音。 使用JNI也是有代价。大家都知道JAVA程序是运行在JVM之上的,可以做到平台无关。但是如果Java程序通过JNI调用了原生的代码(比如c/c++等), 阅读全文

posted @ 2012-02-13 17:30 小小博客小小员 阅读(3288) 评论(0) 推荐(0)

Linux进程间通信(IPC)之一——管道
摘要:1 管道(Pipe) 管道是UNIX系统IPC的最古老的形式,并且所有的Unix系统都提供这种通信机制,当然也包括Linux。这样利用管道进行IPC管道具有如下限制:1、历史原因造成管道是半双工的,数据只能单向流动。如果想双向通信,必须要创建两个管道。2、管道通信双方必须有亲缘关系的进程之间(父子进程或者兄弟进程之间)。2 管道的创建#include <unistd.h>int pipe(int pipefd[2]); 经由pipefd参数返回两个文件描述符,pipefd[0]描述符用来读取管道中的数据,可以简称为管道的读端;pipefd[1]文件描述符用来向管道写入数据,简称为管 阅读全文

posted @ 2012-02-13 17:30 小小博客小小员 阅读(666) 评论(0) 推荐(0)

图像解码之三——giflib解码gif图片
摘要:前面已经介绍过了libjpeg解码jpeg图片和libpng解码png图片,本文将会介绍怎样用giflib解码gif图片。giflib可以在这里下载。gif文件格式简单介绍 在解码jpeg图片和png图片的时候我们不需要对jpeg和png文件格式有了解就可以解码了(了解jpeg和png当然更好),但是在使用giflib解码gif的时候,我们必须要对gif文件有很简单的了解。 gif文件中可以存放一帧或者多帧图像数据,并且可以存放图像控制信息,因此可以存储动画图片。 gif文件由文件头开头,文件尾结尾,中间是一些连续的数据块(block)。这些数据块又分为图像数据块和扩展数据块(extensio 阅读全文

posted @ 2012-02-13 17:28 小小博客小小员 阅读(10013) 评论(0) 推荐(2)

图像解码之二——使用libpng解码png图片
摘要:上文《图像解码之一——使用libjpeg解码jpeg图片》介绍了使用libjpeg解码jpeg图片。png图片应用也非常广泛,本文将会简单介绍怎样使用开源libpng库解码png图片。libpng的数据结构 png_structp变量是在libpng初始化的时候创建,由libpng库内部使用,代表libpng的是调用上下文,库的使用者不应该对这个变量进行访问。调用libpng的API的时候,需要把这个参数作为第一个参数传入。 png_infop变量,初始化完成libpng之后,可以从libpng中获得该类型变量指针。这个变量保存了png图片数据的信息,库的使用者可以修改和查阅该变量,比如:查. 阅读全文

posted @ 2012-02-13 17:27 小小博客小小员 阅读(19811) 评论(0) 推荐(3)

图像解码之一——使用libjpeg解码jpeg图片
摘要:多媒体应用在现在电子产品中的地位越来越重要,尤其是在嵌入式设备中。本系列文章将会介绍利用libjpeg解码jpeg文件,libpng解码png文件,libgif解码gif文件。本文为第一篇,介绍使用libjpeg解码jpeg文件。libjpeg简介 libjpeg是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。这个库由独立JPEG工作组维护。最新版本号是6b,于1998年发布。可以参考维基百科关于libjpeg的介绍。libjpeg库的数据结构 用libjpeg库解码jpeg数据的时候,最重要的数据类型为struct jpeg_decompr 阅读全文

posted @ 2012-02-13 17:26 小小博客小小员 阅读(18037) 评论(2) 推荐(1)

(翻译)Android属性系统
摘要:属性(property)系统对Android来说是一个重要的功能。他作为一个系统服务管理着系统的配置和状态,所有的这些系统配置和状态都是属性(property)。属性(property)是一对键/值(key/value)组合,键和值都是字符串类型。总体感觉属性系统非常像Windows的注册表的功能。Androd中非常多的应用程序和库直接或者间接的依赖于属性系统,并由此决定其运行期的行为。例如:adbd进程通过属性来决定是否当前运行在模拟器中。再比如:java.io.File.pathSeparator方法返回存储在属性服务中的值。属性系统怎样工作 属性系统宏观的结构图如下所示: 从图中我们可. 阅读全文

posted @ 2012-02-13 17:18 小小博客小小员 阅读(729) 评论(0) 推荐(0)

CSDN移动博文集锦之Android核心分析
摘要:导读:对于Android开发者来说,成系列的技术文章对他们的技术成长帮助最大。如下是我们向您强烈推荐的主题为Android开发的第一个系列文章。文章皆来自CSDN网友maxleng的专栏,maxleng是名Android爱好者,长期从事嵌入式系统及手机软件系统研究,自2010年4月起,在CSDN上先后发表28篇《Android核心分析》系列博文,收到网友们的极高评价。《Android核心分析》整理如下:1. 方法论探讨之设计意图2. 方法论探讨之概念空间篇 3. 手机之硬件形态4. 手机的软件形态5. Android基本空间划分6. IPC框架分析(Binder,Service,Service 阅读全文

posted @ 2012-02-13 17:16 小小博客小小员 阅读(611) 评论(0) 推荐(0)

Android应用程序获得root权限
摘要:我在博文《Android程序的安全系统》中提到两种让root权限的办法。最近在网上发现很多朋友转载那篇文章,但是对那篇文章中提到的第一种方法怎样实现,不是很明白。本文将会以一个例子实现来演示怎样让一个Android应用程序获得root权限。问题 我遇到的问题是我想在Java应用程序中动态mount一个NFS的系统,但是执行mount命令必须要要root权限才可以。一般情况下,在Android的Java层是不能获得root权限的。思路 我在博文《Android程序的安全系统》中提到两种思路:1、实现一个init实现一个Service,来帮助Android应用程序执行root权限的命令。 ... 阅读全文

posted @ 2012-02-13 17:12 小小博客小小员 阅读(14277) 评论(0) 推荐(4)

Android系统的Binder机制之四——系统Service
摘要:前面我们已经介绍了Android Binder机制的Service Manager,Service对象代理1,Service对象代理2。本文将介绍一下Android机制的另外一个重要部分——系统Service。1、系统Service实例——Media server 首先我们先看一下Android一个实例Media Service,代码位于framework/base/media/mediaserver/main_mediaserver.cpp文件: 1: // System headers required for setgroups, etc. 2: #include <sys/t.. 阅读全文

posted @ 2012-02-13 17:11 小小博客小小员 阅读(717) 评论(0) 推荐(0)

Android系统的Binder机制之三——服务代理对象(2)
摘要:上文《Android系统的Binder机制之二——服务代理对象(1)》我们学习了进程的C/C++层面的服务代理对象BpBinder,和Binder底层处理方式。本文我们将深入分析一下在进程的Java层面服务代理对象的创建和使用。Android进程的C/C++层面和Java层 Android中程序大部分都是java开发,底层通过JNI调用C/C++的代码。这样一个程序就分为了两个层面C/C++层面和Java层面。运行状态下,我们说它们都在一个进程之中,拥有相同的进程属性(UID,GID等等)。 Binder客户程序的C/C++层面的对象和原理我们在上文《Android系统的Binder机制之二— 阅读全文

posted @ 2012-02-13 17:08 小小博客小小员 阅读(514) 评论(0) 推荐(0)

Android系统的Binder机制之二——服务代理对象(1)
摘要:上文《Android系统的Binder机制之一——Service Manager》我们学习了Service Manager在Android Binder中的作用——服务(Service)注册,服务(Service)查询的功能。本文我们一起学习服务(Service)在客户端中的代理机制。重点介绍其核心对象BpBinder。 1、服务代理的原理 如下是客户端请求service服务的场景:1、首先客户端向Service manager查找相应的Service。上文《Android系统的Binder机制之一——Service Manager》有比较详细的介绍。注意客户端和Service可能在... 阅读全文

posted @ 2012-02-13 17:06 小小博客小小员 阅读(705) 评论(0) 推荐(0)

Android系统的Binder机制之一——Service Manager
摘要:Android虽然构建在Linux上面,但是在IPC(进程间)机制方面,没有利用Linux提供IPC机制,而是自己实现了一套轻量级的IPC机制——binder机制。并且Android Binder机制之上,Android框架提供了一套封装,可以实现对象代理(在本地进程中代理远程进程的对象)。本文简单分析一下Android Binder机制。Binder情景分析 一个IPC通讯我们可以理解成客户端-服务器模式,因此我们先在这里分析一下典型的Binder应用模式:1、客户端通过某种方式(后文会详细介绍)得到服务器端的代理对象。从客户端角度看来代理对象和他的本地对象没有什么差别。它可以像其他本地对. 阅读全文

posted @ 2012-02-13 17:05 小小博客小小员 阅读(936) 评论(0) 推荐(0)

深入理解Android消息处理系统——Looper、Handler、Thread
摘要:熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统。而Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制。Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环)。本文深入介绍一下Android消息处理系统原理。 Android系统中Looper负责管理线程的消息队列和消息循环,具体实现请参考Looper的源码。 可以通过Loop.myLooper()得到当 阅读全文

posted @ 2012-02-13 17:04 小小博客小小员 阅读(288) 评论(0) 推荐(0)

电子书
摘要:原来电子书都存放在163网盘上,近期有网友反映163网盘不给力,广告太多!我决定把电子书慢慢转移到华为115网盘上,如果你也想注册115网盘,请点击Simon的邀请链接,这样你和Simon都将获得300M的免费奖励空间。声明:Simon的电子书大部分来自互联网,如果您发现这些电子书侵犯了你的版权,请联系Simon,我会进行妥善处理。Linux/UNIXLinux内核完全注释(赵炯) Unix环境高级编程(英文版)源码 Unix环境高级编程(中文版)源码 Linux Command Line and Shell Scripting Bible 虚拟文件系统... 阅读全文

posted @ 2012-02-13 17:01 小小博客小小员 阅读(457) 评论(0) 推荐(0)

Android JNI编程提高篇之二
摘要:上文《Android JNI编程提高篇之一》中我和大家分享了局部引用的一些理解,本文我将继续和大家全局引用和弱全局引用的一些理解。这也可以作为我学习《Java Native Interface: Programmer’s Guide and Specification》一个总结,欢迎大家对本文的理解拍砖。全局引用 在所有引用中,我觉得全局引用是最好理解的一个了。为什么呢?主要和C语言的全局变量非常相近。 上文《Android JNI编程提高篇之一》我已经提到局部引用大部分是通过JNI API返回而创建的,而全局引用必须要在Native代码中显示的调用JNI API NewGlobalRef来创 阅读全文

posted @ 2012-02-13 17:00 小小博客小小员 阅读(523) 评论(0) 推荐(0)

Android JNI编程提高篇之一
摘要:Simon在拙文《Android JNI开发入门之二》中提到了,Android JNI开发的深入学习的一些资料和方法。最近Simon在学习《Java Native Interface: Programmer’s Guide and Specification》,在学习过程中发现在JNI规范中关于引用部分是最难理解的,恕Simon愚钝,看了两遍才对其思想略有理解,在此和大家分享我对JNI规范中引用部分的理解,如果有错误之处,希望能和各位网友一起探讨。什么是JNI规范中对象引用 在JNI编程中,Native代码不能对Java虚拟机中对象的内存分布有任何假设。因为Java虚拟机可以根据自己的策略定. 阅读全文

posted @ 2012-02-13 16:58 小小博客小小员 阅读(607) 评论(0) 推荐(0)

Android JNI开发入门之二
摘要:在上一篇文章《Android JNI开发入门之一》中,我介绍了Android应用程序(APK)怎样通过JNI调用Native C实现的共享库。本文将进一步介绍Android应用程序通过JNI调用Native C++实现的共享库,并实现一个和上文《Android JNI开发入门之一》相同功能的Helloworld应用程序。两套不同的API 前文已经提到,Android系统的Java虚拟机为C和C++实现两套不同的API,所以我们调用的时候需要注意这一点儿。另外Google并没有提供JNI的文档,我们调用的时候可以参考Android的jni.h文件,里面有C和C++的JNI函数原型。也可以把本例. 阅读全文

posted @ 2012-02-13 16:56 小小博客小小员 阅读(361) 评论(0) 推荐(0)

Java: JNI完全手册
摘要:JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。 JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。AD:最近在公司里做了一个手机的项目,需要JAVA程序在发送短信的时候和第三方的短信服务器连接。短信接口是用C++写的。琢磨了三天,大致搞懂了JNI的主体部分。先将心得整理,希望各位朋友少走弯.. 阅读全文

posted @ 2012-02-13 16:39 小小博客小小员 阅读(306) 评论(0) 推荐(0)

Android平台刷机包制作研究(2)
摘要:以下是偶翻译的关于boot.img和recovery.img的编辑和修改方面的文章,希望能够为感兴趣的朋友节约一些看资料的时间。感谢本文的作 者:Alansj, DarkriftX, RyeBrye, Will, Try OP9, Tonyb486, Timmmm, Lxrose还有好多不知名的作者们在wiki上的不懈努力。如何解包/编辑/大包boot.img文件很多人用自己的方式解决了boot.img的解包/编辑/打包的问题,有人要求我来写一篇关于boot和recovery映像的文件结构和如何对其编辑的文章,于是就有了下面这篇文章。目录1、背景知识2、boot和recovery映像的文件结构 阅读全文

posted @ 2012-02-13 11:50 小小博客小小员 阅读(1036) 评论(0) 推荐(0)

Android平台刷机包制作研究(1)
摘要:好久没有上博客来看看,甚至用户名和密码都记得不那么真切了。言归正传,最近有朋友问偶如何制作android平台的刷机包的问题。总算说服自己研究一下 如何制作一个android平台的刷机包,可能我了解的方法还不是很全面,也走了不少的弯路,但是以此做为一串探索的足迹,希望能为来者节约宝贵的时间, 也请对此感兴趣的各位同仁尽量避免偶曾经犯过的错误。在此先要明确声明一下:由于android平台的更新换代过于频繁,偶的做法不一定好用,也不一定完全正确(只是记录一下偶在自己的nexus one上面做的一些实验而已)。依照偶的做法出现了您的手机出现任何问题,偶都是不负责的喔!!英文好的朋友可以不必看着偶聒噪, 阅读全文

posted @ 2012-02-13 11:48 小小博客小小员 阅读(698) 评论(0) 推荐(0)

android平台中编写jni模块的方法(3)
摘要:这篇文章来说说ndk的使用方法,其实主要是关于ndk的一些编译选项的研究和翻译(其实人家google的文档已经说的很清楚了)。偶选用的测试环境是 slackware 12.0 + android 1.5 r1 for linux + jdk 1.6.0_12,ndk选用的是android 1.5 ndk r1这个版本的(直接解压就行,免安装的)。1、从ndk安装说起ndk安装的时候需要运行一 个~/android-ndk-1.5_r1/build/目录下面的一个叫做host-setup.sh的脚本。大略读了一下这个脚本,发现这个主要是 用来生成out/host/host/config.mk文件 阅读全文

posted @ 2012-02-13 11:46 小小博客小小员 阅读(720) 评论(0) 推荐(0)

android平台中编写jni模块的方法(2)
摘要:继续上一篇,目前android平台的sdk已经发布到了cupcake 1.5的版本(最新的开发版可能要比这个版本更高,期待android 2.0 :D)对 于android 1.5版本的开发者而言,一个非常大的好消息是cupcake已经开始“官方”支持开发者编写自己的jni库了,这主要表现在google放出了一个叫做 android-ndk的开发包,这个开发包是专门为了开发jni而准备的一些必要的头文件以及一些运行时所需的库,为android应用开发者提供了比 较方便的脚本支持。这种方便和快捷是在android 1.0和1.1的sdk以及配套的工具里面是没有的。试用了ndk以后感觉良好,偶对于 阅读全文

posted @ 2012-02-13 11:46 小小博客小小员 阅读(316) 评论(0) 推荐(0)

android平台中编写jni模块的方法(1)
摘要:本文主要来记录一下偶对android平台下面jni技术的研究心得体会,一来是备忘,二来也为后来者节省一些独自摸索的时间。一直在忙 着project方面的事情,听到一个朋友提起说偶的blog很久没有更新了。所以今天抽一些时间上来写点东西。没办法,随着手机行业的竞争日趋白热化, 加上google,apple,palm之流的公司搅局,在手机领域的从业者的空闲时间越来越少,竞争也日趋白热化。闲话少叙,开始进入正题:1、介绍一下命令行开发的方法由于用c/c++习惯了,所以对eclipse的使用很是不习惯,还是决定用命令行(makefile类似)的方式进行编译、开发(偶个人比较痴迷emacs)。如果是ja 阅读全文

posted @ 2012-02-13 11:44 小小博客小小员 阅读(489) 评论(0) 推荐(0)

java代理模式 (转)
摘要:java代理模式 (转) 1. 代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到三个角色: 抽象角色:声明真实对象和代理对象的共同接口; 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。以下以《Java与模式》中的 阅读全文

posted @ 2012-02-13 11:32 小小博客小小员 阅读(257) 评论(0) 推荐(0)

Android AIDL使用详解
摘要:1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口icp:interprocess communication :内部进程通信2.既然aidl可以定义并实现进程通信,那么我们怎么使用它呢?文档/android-sdk/docs/guide/developing/tools/aidl.html中对步骤作了详细描述:--1.Create your .aidl file - This file defines an interface (Yo 阅读全文

posted @ 2012-02-08 17:49 小小博客小小员 阅读(841) 评论(0) 推荐(0)

Android AIDL——实现机制浅析
摘要:1.基于前面写的aidl使用,这段时间准备研究ActivityManager框架,对aidl进行了更深入的研究,因为android框架大量使用了进程通信机制,所以,在研究android framework前认真研究一下AIDL的实现机制十分有必要的 2.前面讲了aidl是 Android Interface definition language的缩写,它是一种进程通信接口的描述,通过sdk解释器对器进行编译,会把它编译成java代码在gen目录下,类路径与aidl文件的类路径相同。 3.aidl接口package com.cao.android.demos.binder.aidl; impo 阅读全文

posted @ 2012-02-08 16:39 小小博客小小员 阅读(2069) 评论(0) 推荐(0)

android 布局长度单位深入研究
摘要:要想使自己的布局在不同设备达到精准空置,理清理顺android布局长度单位之间关系很有必要,否则你也许会经常挠头为什么显示出来的布局不是自己定义的效果呢,有些东西,虽然基础,但是弄个透彻也需要花些功夫,废话不多说,下面开始。1.先了解一下android有支持哪些长度单位:px: pixels(像素). 不同设备显示效果相同,比如我们800*480的屏幕宽度就是 800pxdip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,通常屏幕大时,density就大,屏幕小时,density就小 屏幕实际分辨率为240px*400p 阅读全文

posted @ 2012-02-08 16:38 小小博客小小员 阅读(556) 评论(0) 推荐(0)

android Launcher——拖放功能深入研究
摘要:Luancher有一个相对比较复杂的功能就是拖放功能,要深入了解launcher,深入理解拖放功能是有必要的,这篇blog,我将对launcher的拖放功能做深入的了解1.首先直观感受什么时候开始拖放?我们长按桌面一个应用图标或者控件的时候拖放就开始了,包括在all app view中长按应用图标,下面就是我截取的拖放开始的代码调用堆栈at com.android.launcher2.DragController.startDrag(DragController.java:170)at com.android.launcher2.Workspace.startDrag(Workspace.ja 阅读全文

posted @ 2012-02-08 16:37 小小博客小小员 阅读(2574) 评论(4) 推荐(1)

android Launcher——数据加载与变更
摘要:在前面我的blog中,我已经说过了,Launcher所有的桌面项数据是存储在launcher.db/favorites表中在 Launcher启动时loadeworkspace函数中会从数据库中查询所有的数据并显示出来,这个桌面项数据加载过程在我的blog Launcher——启动过程详解中有比较详细的描述,这篇blog,我着重讲述Launcher桌面项的添加,变更和删除,下面就进入主题1.Launcher桌面项的添加:从用户操作的角度来看,我们有两种方式来添加桌面项--1.从all app view中拖到桌面,从下面的调用堆栈知道最后通过LauncherProvider.insert把拖过来 阅读全文

posted @ 2012-02-08 16:35 小小博客小小员 阅读(1373) 评论(0) 推荐(0)

android Launcher——启动过程详解
摘要:一LauncherApplication->onCreate --1.//设置最小堆内存4M --2.//建立应用图标缓存器 --3.//建立LauncherModel --4.//注册Intent.ACTION_PACKAGE_ADDED,Intent.ACTION_PACKAGE_REMOVED,Intent.ACTION_PACKAGE_CHANGED事件监听器 LauncherModel作为广播接收器对上面3中事件进行监听 --5.//添加对桌面favorites content provider 数据变化监听器二Launcher->onCreate --1.获取Launc 阅读全文

posted @ 2012-02-08 16:35 小小博客小小员 阅读(2231) 评论(0) 推荐(0)

android Launcher——ui框架
摘要:着手开发laucher 我个人觉得首先要从ui框架入手,了解清楚了ui框架对laucher就有了一个大致的了解,知道关键的几个类在哪里,对后面进一步深入地研究作出铺垫。废话不多说了,直接进入主题:1.先看图这是我正在研究的一个800*480的launcher的ui框架图,对应的桌面显示效果如下:下面一行应用是我修改桌面后的结果,在前面我的ui框架图中没有。闲话不多说,下面就一一做出讲解1.DragLayer--DragLayer继承FrameLayout,并在此基础上组合了DragController实现拖放功能,DragLayer主要监听下面两个用户事件onInterceptTouchEve 阅读全文

posted @ 2012-02-08 16:32 小小博客小小员 阅读(1557) 评论(0) 推荐(0)

Android FrameWork——Touch事件派发过程详解
摘要:对于android的窗口window管理,一直感觉很混乱,总想找个时间好好研究,却不知如何入手,现在写的Touch事件派发过程详解,其实跟 android的窗口window管理服务WindowManagerService存在紧密联系,所以从这里入手切入到 WindowManagerService的研究,本blog主要讲述一个touch事件如何从用户消息的采集,到 WindowManagerService对Touch事件的派发,再到一个Activity窗口touch事件的派发,并着重讲了Activity窗口 touch事件的派发,因为这个的理解对我们写应用很好地处理touch事件很重要一.用户事 阅读全文

posted @ 2012-02-08 16:29 小小博客小小员 阅读(3176) 评论(0) 推荐(0)

Android FrameWork——Binder机制详解(1)
摘要:1.前面我曾经发表过一篇blog介绍了aidl实现机制(aidl实现机制浅析),不过那只是停留在java表层,并遗留了一个问题,那就是BinderProxy.transact 该方法本地化实现,同时我指出了它的具体代码位置:\frameworks\base\core\jni\android_util_Binder.cpp->static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,jint code, jobject dataObj,jobject replyObj, jint flags)要进一步深 阅读全文

posted @ 2012-02-08 16:27 小小博客小小员 阅读(1213) 评论(0) 推荐(0)

Android FrameWork——Binder机制详解(2)
摘要:6.前面5个段落我主要说明了BinderProxy是如何把数据发送出去的,Ok,那么接下来,我们肯定想要知道服务端是怎么接收数据并传递给相应的BBinder进行处理的,有没有注意到前面waitForResponse我标注为蓝色的代码,这给我们一个启示,也许接收返回数据(进程作为客户端)和接收命令(进程作为服务端)处理的是同一个函数,但这是我的一个猜测,而实际上我参阅其它blog和代码后并非这么回事,waitForResponse只在客户端发送完数据等待接收数据才被调用的,那么服务端是怎么接收数据的呢?做过socket编程的同仁们可能知道,服务端为实现接收数据和链接,一般会启动一个监听线程去监听 阅读全文

posted @ 2012-02-08 16:27 小小博客小小员 阅读(926) 评论(0) 推荐(0)

Android FrameWork——StatusBar
摘要:Android系统顶上的状态栏是属于FrameWork的东东,由于项目上需要对状态栏进行一些修改调整,我对其作了一个初步研究,写出来大家共享一下,其实这些早已写了,只是想等研究StatusBar中ExtendsView后再整理一个blog,不过现在已经没有时间了,目前深入研究Android Binder机制,废话不多少,开始进入statusbar的探索 1.先从StatusBar的布局文件入手,文件位置位置:frameworks/base/core/res/res/layout/status_bar.xml 2.我对status_bar.xml布局文件进行分析,画出结构图,以便对Status. 阅读全文

posted @ 2012-02-08 16:25 小小博客小小员 阅读(1499) 评论(0) 推荐(0)

Android FrameWork——PackageManager框架
摘要:1.接着前面讲的ActivityManager框架,继续说一下系统另一个重要的框架,PackagerManager同样先看一下静态类结构图:大 部分情况我们是在Activity中使用getPackageManager方法获取一个ApplicationPackageManager的对 象,ApplicationPackageManager实际上是包装了一个IPackageManager.Stub.Proxy的对象由IPackageManager.Stub.Proxy代理执行PackageManager相关操作,IPackageManager.Stub.Proxy实际代理的是PackageMana 阅读全文

posted @ 2012-02-08 16:24 小小博客小小员 阅读(2716) 评论(0) 推荐(2)

Android FrameWork——Activity启动过程详解
摘要:前面发了blog分析了ActivityManager框架的大体结构,主要就是一个进程通信机制,今天我通过深入Activity的启动过程再次深入到ActivityManager框架,对其进行一个更深入的了解 以桌面启动一个应用Activity为例,onClick事件后,会调用startActivityForResult(Intent, int) public void startActivityForResult(Intent intent, int requestCode) { if (mParent == null) { //Activity启动执行交由Instrumentation对象去. 阅读全文

posted @ 2012-02-08 16:23 小小博客小小员 阅读(1884) 评论(0) 推荐(1)

Android FrameWork——ActivityManager框架
摘要:1.ActivityManager是android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,本blog就是着手对ActivityManager框架作一个整体的了解 2.先看一个静态类结构图: 该图摘自 曹文斌blog<Activity Manager框架解析> 上图很清楚地描述了ActivityManager框架的几个主要类之间的关系,我们做应用开发接触很多的其实就是ActivityManager类,该类也在SDK中公布,应用可以直接访问,它提供了我们管理Activity的一些基本的方法如下: public void tes 阅读全文

posted @ 2012-02-08 16:19 小小博客小小员 阅读(2465) 评论(0) 推荐(0)

导航