怎么开发android framework7 android

-------------
新增文件夹...
新增文件夹
(多个标签用逗号分隔)
android系统framework概述.pdf
Android的运行环境,这个也应该属于这个框架里面的,android的虚拟机叫做Dalvik,运行环境就是由这个虚拟机和基础的java类库组成ġ、android应用框架提供一系列的服务和系统,包括视图、内容提供器、资源管理器、通知管理器、活动管理器。视图非常丰富:list、grid、textbox、button等。
Android的运行环境,这个也应该属于这个框架里面的,android的虚拟机叫做Dalvik,运行环境就是由这个虚拟机和基础的java类库组成。3)、android应用框架提供一系列的服务和系统,包括视图、内容提供器、资源管理器、通知管理器、活动管理器。视图非常丰富:list、grid、textbox、button等。&&
加载中...!如果长时间没有加载,请刷新页面
下载本文档需要登录,并付出相应积分()。
文件大小:138.41 KB
所需积分:& 2
相关资讯  — 
相关讨论话题  — 
浏览:6756次&& 下载:0次
上传时间: 08:20:56
同类热门文档
0次浏览 &21次下载
0次浏览 &54次下载
0次浏览 &43次下载
0次浏览 &21次下载
18672次浏览 &13次下载
0次浏览 &8次下载
相关经验 -
& 0人评&46页
& 3人评&94页
& 4人评&94页
& 1人评&1页
& 2人评&2页
OPEN-OPEN, all rights reserved.从android framework源码去认识android app的开发(1) - 简书
从android framework源码去认识android app的开发(1)
android的framework是直接用应用之下的一层,定义了,view,thread,等的java实现,他通过JNI的方式去与下层的硬件去通信,为了去了解android的世界,我们将从java源码的世界去认识一个app是如何使用sdk的代码构建起来的。
一.认识android的架构
Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
二.搭建环境
搭建开发环境
对国内的开发者来说最痛苦的是无法去访问开发网站。为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界,好了,不废话了,
国内开发者访问() 上面已经有了所有你要的资源,同时可以下载到我们的主角
但是这样的搭建只能去阅读源代码,我们无法去更进一步去实现自己的rom,我们看到锤子的系统在早期的开放rom是自己从新实现了framework的代码,现在看起来他成功了,所以我们还要去搭建android系统的源码编译环境。
搭建源码编译环境
三.开始主题
我们知道我们在一开始写c程序的时候都有一个运行的入口,比如
#include &iostream&
#include &cmath&
#include &algorithm&
//这里的main就是应用的入口
int main(int argc, const char * argv[]){
那问题来了
android程序的入口在哪里呢?
答:在android/app/ActivityThread.java
但是上面的c语言程序一运行完就退出程序了,app会一直运行,他是怎样做到的呢?
在计算机网络原理中我们用实现一个服务器端,不断的接听客户端的访问,而且他的代码是这样实现的:
#include &winsock2.h&
#pragma comment(lib, "WS2_32.lib")
#include &stdio.h&
void main()
WORD wVersionR//版本号
WSADATA wsaD
wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//加载套接字库,如果失败返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
//判断高低字节是不是2,如果不是2.2的版本则退出
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
//创建流式套接字,基于TCP(SOCK_STREAM)
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
//Socket地址结构体的创建
SOCKADDR_IN addrS
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//转换Unsigned long型为网络字节序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定端口号,除sin_family参数外,其它参数都是网络字节序,因此需要转换
//将套接字绑定到一个端口号和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必须用sizeof,strlen不行
listen(socSrv, 5);
SOCKADDR_IN addrC//字义用来接收客户端Socket的结构体
int len = sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化,sizeof
//循环等待接受客户端发送请求
//等待客户请求到来;当请求到来后,接受连接请求,
//返回一个新的对应于此次连接的套接字(accept)。
//此时程序在此发生阻塞
SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);
char sendBuf[100];
sprintf(sendBuf, "Welcome %s to JoyChou",
inet_ntoa(addrClient.sin_addr));//格式化输出
//用返回的套接字和客户端进行通信
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多发送一个字节
//接收数据
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
closesocket(sockConn);
他采用了一个while死循环去监听客户端的请求。
在一遍啰嗦之后,我们的主角终于闪亮的登场了。
先上源代码
public final class ActivityThread {
public static void main(String[] args) {
SamplingProfilerIntegration.start();
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
EventLogger.setReporter(new EventLoggingReporter());
Security.addProvider(new AndroidKeyStoreProvider());
final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
Process.setArgV0("&pre-initialized&");
Looper.prepareMainLooper();
//从中可以看到为我们的app开辟了一个线程进入了looper之中
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
看到源码失望了,没有一个while循环啊,其实用了他方法实现
//用一个looper的机制循环监听响应
Looper.prepareMainLooper();
Looper.loop();
进一步深入代码
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No L Looper.prepare() wasn't called on this thread.");
final MessageQueue queue = me.mQ
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
// 我们在这里看到了一个循环监听消息
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
Printer logging = me.mL
if (logging != null) {
logging.println("&&&&& Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
msg.target.dispatchMessage(msg);
if (logging != null) {
logging.println("&&&&& Finished to " + msg.target + " " + msg.callback);
// Make sure that during the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
msg.recycleUnchecked();
四. 下一篇的任务
从源码的角度去分析AsyncTask的原理和实现,并且实现一个模仿的AsyncTask,,源码请关注,我会放在这里的
希望一起成长,一起学习。& 《Android框架揭秘》
《Android框架揭秘》
&&&&&& 《Android框架揭秘》深入研究分析了内部运行原理与机制,是人员进行Android内核开发的很好的选择。&&&&&&&《Android框架揭秘》内容简介&&&&&& 《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成实际Android平台骨干的服务框架。其中的主要内容包括:通过启动程序了解Android框架的概要,移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的结构与理解,通过Camera Service、 Manager Service等服务分析实际的Android服务等。&&&&&& 《Android框架揭秘》不仅可以供具备一定开发经验的Android开发人员参考阅读,也可作为Android开发初学者的Android框架入门教材使用。& & & &《Android框架揭秘》价格& & & & &&&&&& 《Android框架揭秘》目录第1章 Android Framework概要1.1 Android源代码组成1.2 通过启动过程分析Android Framework第2章 搭建Android开发环境2.1 主机环境构成2.1.1 安装VirtualBox2.1.2 安装Ubuntu2.2 搭建Android平台编译环境2.2.1 编译工具2.2.2 安装Repo2.2.3 下载Android源代码2.2.4 编译Android源代码2.3 搭建开发环境2.3.1 下载、安装2.3.2 下载Android SDK starter2.3.3 安装插件2.3.4 设置Android SDK路径2.3.5 安装Android SDK2.4 开发Android应用程序2.5 应用程序Framework源码级别调试2.5.1 加载应用程序Framework源2.5.2 调试HelloWorld Framework(源码级)2.6 小结第3章 init进程3.1 init进程运行过程3.2 init进程源码分析3.3 init.rc脚本文件分析与执行3.3.1 动作列表(Action List)3.3.2 服务列表(Service List)3.3.3 init.rc文件分析函数3.3.4 动作列表与服务列表的运行3.4 创建设备节点文件3.4.1 创建静态设备节点3.4.2 动态设备感知3.5 进程的终止与再启动3.6 属性服务3.6.1 属性初始化3.6.2 属性变更请求处理3.7 小结第4章 JNI与NDK4.1 Android与JNI4.2 JNI的基本原理4.2.1 在Java中调用C库函数4.2.2 小结4.3 调用JNI函数4.3.1 调用JNI函数的示例程序结构4.3.2 Java层代码(JniFuncMain.java)4.3.3 分析JNI本地函数代码4.3.4 编译及运行结果4.3.5 在Android中的应用举例4.4 在C程序中运行Java类4.4.1 Invocation API应用示例4.4.2 编译及运行4.4.3 Invocation API在Android中的应用举例:Zygote进程4.5 直接注册JNI本地函数4.5.1 加载本地库时,注册JNI本地函数4.5.2 Android中的应用举例4.6 使用Android NDK开发4.6.1 安装Android NDK4.6.2 使用Android NDK开发步骤4.6.3 小结第5章 Zygote5.1 Zygote是什么5.2 由app_process运行ZygoteInit class5.2.1 生成AppRuntime对象5.2.2 调用AppRuntime对象5.2.3 创建Dalvik虚拟机5.2.4 运行ZygoteInit类5.3 ZygoteInit类的功能5.3.1 绑定/dev/socket/zygote套接字5.3.2 加载应用程序Framework中的类与平台资源5.3.3 运行SystemServer5.3.4 运行新Android应用程序第6章 Android服务概要6.1 示例程序:理解Android服务的运行6.2 Android服务的种类6.3 Android应用程序服务6.4 Android系统服务6.5 运行系统服务6.5.1 分析媒体服务器(Media Server)的运行代码6.5.2 分析系统服务器(System Server)的运行代码6.6 Android Service Framework、Binder Driver概要及相关术语第7章 Android Binder IPC7.1 Linux内存空间与Binder Driver7.2 Android Binder Model7.2.1 Binder IPC数据传递7.2.2 Binder IPC数据流7.2.3 Binder协议(Binder Protocol)7.2.4 RPC代码与RPC数据7.2.5 Binder寻址(Binder Addressing)7.3 Android Binder Driver分析7.3.1 从进程的角度看服务的使用7.3.2 从Binder Driver角度看服务的使用7.3.3 Binder Driver函数分析7.4 Context Manager7.5 小结第8章 Android Service Framework8.1 服务框架(Service Framework)8.2 服务框架(Service Framework)的构成8.2.1 各层构成元素的配置8.2.2 各层构成元素间的相互作用8.2.3 类的结构8.3 运行机制8.3.1 服务接口8.3.2 服务8.3.3 服务代理(Service Proxy)8.3.4 Binder IPC处理8.4 本地服务管理器(Native Service Manager)8.4.1 Service Manager概要8.4.2 Service Manager类8.4.3 Service Manager的运行8.5 编写本地服务8.5.1 设计HelloWorld系统服务8.5.2 HelloWorld服务接口8.5.3 HelloWorld服务8.5.4 HelloWorld服务代理8.5.5 运行HelloWorld服务8.6 小结第9章 本地系统服务(Native System Service)分析9.1 相机服务(Cameral Service)9.2 相机应用程序9.3 相机服务框架(Camera Service Framework)9.3.1 相机服务框架层次结构9.3.2 相机服务框架类9.4 相机服务框架的运行9.4.1 初始化相机服务9.4.2 连接相机服务9.4.3 相机服务连接过程分析9.4.4 相机设置与控制9.4.5 相机设置与控制分析9.4.6 相机事件处理9.4.7 相机事件处理分析9.5 小结第10章 Java服务框架(Java Service Framework)10.1 Java服务框架(Java Service Framework)10.1.1 Java服务框架的层次结构10.1.2 Java服务框架中各个类间的相互作用10.2 运行机制10.2.1 Java服务框架初始化10.2.2 Binder10.2.3 BinderProxy10.2.4 Parcel10.3 Java系统服务的实现10.3.1 闹钟服务(Alarm Manager Service)分析10.3.2 编写HelloWorldService系统服务10.3.3 使用HelloWorldService系统服务10.3.4 编译HelloWorldService系统服务10.4 Java Service Manager10.4.1 Java Service Manager简介10.4.2 BinderInternal10.4.3 Java Service Manager的运行实例10.5 使用AIDL生成服务代理与服务Stub10.5.1 在AIDL文件中定义服务接口10.5.2 使用AIDL编译器,生成服务接口、服务Stub以及服务代理10.5.3 继承Stub类创建服务10.5.4 服务接口的调用10.6 小结第11章 Java系统服务运行分析11.1 Activity Manager Service11.2 Activity Manager Service创建服务分析11.2.1 Controller Activity-调用startService()方法11.2.2 Activity Manager Service的startService()方法的调用过程(使用Binder RPC)11.2.3 Activity Manager Service--运行startService() Stub方法11.2.4 运行ActivityThread类的main() 方法11.2.5 Activity Manager Service--attachApplication() Stub方法11.3 小结附录 AIDL语法
本文发布:
本文地址:
发布:鸡啄米
&&( 21:42:22)&&( 20:46:58)&&( 22:18:8)&&( 20:59:25)&&( 21:17:46)&&( 22:57:30)&&( 21:14:52)&&( 22:13:59)&&( 20:49:52)&&( 21:13:32)
不错的分享,很受用!
这些也太复杂了。
完全随机文章<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 android修改framework 的文章

 

随机推荐