当前位置:首页 » 安卓系统 » androidframework开发

androidframework开发

发布时间: 2022-06-21 20:02:55

A. android framework具体工作是什么

说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。
同事负责应用程序生命周期和资源等进行管理。
如果说你想了解framework 的内容,那需要关注android系统层内容。了解android系统架构。

B. 怎么开发android framework

一.认识android的架构
Android其本质就是在标准的linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

二.搭建环境
搭建开发环境
对国内的开发者来说最痛苦的是无法去访问android开发网站。为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界,好了,不废话了, 国内开发者访问(androiddevtools) 上面已经有了所有你要的资源,同时可以下载到我们的主角framework

但是这样的搭建只能去阅读源代码,我们无法去更进一步去实现自己的rom,我们看到锤子的系统在早期的开放rom是自己从新实现了framework的代码,现在看起来他成功了,所以我们还要去搭建android系统的源码编译环境。

搭建源码编译环境
http://www.cnblogs.com/bluestorm/p/4419135.html
https://source.android.com/source/downloading.html(这里详细的介绍了如何下载编译)
三.开始主题

在一开始写c程序的时候都有一个运行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

//这里的main就是应用的入口
int main(int argc, const char * argv[]){
return 0;
}

在计算机网络原理中我们用socket实现一个服务器端,不断的接听客户端的访问,而且他的代码是这样实现的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//加载套接字库,如果失败返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}

//判断高低字节是不是2,如果不是2.2的版本则退出
if (LOBYTE(wsaData.wVersion) != 2 ||

HIBYTE(wsaData.wVersion) != 2)

{
return;
}

//创建流式套接字,基于TCP(SOCK_STREAM)

SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);

//Socket地址结构体的创建

SOCKADDR_IN addrSrv;

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 addrClient;//字义用来接收客户端Socket的结构体

int len = sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化,sizeof

//循环等待接受客户端发送请求

while (1)
{
//等待客户请求到来;当请求到来后,接受连接请求,

//返回一个新的对应于此次连接的套接字(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 Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;

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.
return;
}

Printer logging = me.mLogging;
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 ring 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();
}
}

C. android Framework学习步骤是个啥流程

一、阅读Android源码的术与道:
1、Android源码的道
Android的功夫,在Android之外。要想“理解”而非单纯的“知道”,想“学习”而非单纯的“记诵”。必备基础:信息检索能力、编程语言(C\C++、Java)、计算机系统知识、设计模式、JVM,多线程设计
2、Android源码的术
针对每一个模块本身的职责,询问更细节的实现,永远记住,先有的问题,之后才有的代码。代码实现是新鲜的,但是有了之前的铺垫和对问题的预期,它们的出现才是可理解的。
总结:先理解模块对应的要解决的“问题”是什么,再去给问题找解决方案的思路去理解源码;
理解源码的功夫不止在Android本身,也要提高Android之外的姿势水平。

二、Framework需求开发与维护注意点
1、需求开发
1) 相关功能的现有模块需要非常熟悉,否则会有非常大的风险
2 )所写代码尽量与已有类似的代码保持风格一致
3 )必要的注释,写代码的时候认为代码的意图貌似是理所当然,但是当别人看你的代码或者过一段时间你自己查阅代码的时候,很有可能由于代码量过大,在代码的海洋中未必容易理解某一段代码的意图
4 )找比自己能力强的,经验较为丰富的同事review代码。系统层毕竟是上层应用的基础,必须保证其极高的稳定性,不像app即使有一些bug可以快速的迭代和发版推送。
2、维护
1 )优秀的代码设计。Android的代码加工的顺序大致是Google源码->芯片厂商的修改->OEM厂商的修改。这些代码里积累了大量世界级优秀的代码设计方式,架构思想,这样咱们对代码的学习和认识的起步就是不低的,所以阅读大量的代码过后,我们再尝试写代码的时候,一般也不会写出低质量的代码
2 )分析定位的技巧。一个经验丰富的工程师的价值,主要会体现在遇到问题时,能够分析定位解决问题的能力和效率,而很少会听说我这有个20年经验的工程师,他的价值在于别人一个小时能写成的代码他在一分钟就写出来了。

D. 什么是android framework

说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。
能够从源码下载到编译,到移植进开发板都能顺利的完成" 你的这些经验挺符合要求的啊,招聘信息里写的"Android Framework"指的应该就是/frameworks/base,多数是Java代码。看样子他们是在做Android设备,厂商一般是做移植,然后根据自己产品的特点可能会在frameworks及整个平台里加自己的扩展功能。
http://blog.csdn.net/coding_or_coded/article/details/6822029

E. 做android framework开发工程师有前途吗

虽然也有人不看好Android开发工程师发展前景,毕竟竞争对手也是强大的,但在谷歌的强力支持下,Android绝对会成功的,而且它的最大优势就是发展快,所以仍然有不少开发人员看好它,义无反顾的加入Android开发工程师行列。而武汉达内android培训在android的大趋势带动下而前进。 Android以其便捷的操作,继承了Linux开源优势,引起了很多开发工程师的重视,自然有很多人看好Android开发工程师发展前景,因为Android在名气和开发环境方面都有很大优势,在Google的大力支持下,想不火都难。根据调查显示,超过半数的受访者认为谷歌Android在众多智能手机操作系统中最具长期潜力。而苹果 iOS仅获得40%的支持率。本次调查也再次证明Android在于苹果的竞争中获得优势。根据谷歌公布的数据,目前市面上有约60款基于Android系统的设备和超过6万款应用,Android系统每天增加超过10万名用户。而研究公司Gartner称,Android将在2012年超过iOS成为世界上第二大最受欢迎的移动操作系统。Appcelerator营销副总裁斯科特·斯瓦茨佐夫(Scott Schwarzhoff)表示:“谷歌和苹果正在下象棋,而其他人则在拼命追赶。” Android不仅在智能手机市场与苹果、微软、RIM等公司进行争夺,索尼、罗技和东芝等10多家厂商均计划在生产的平板电脑、网本、机顶盒、电子书阅读器以及电视机上使用Android系统Gartner副总裁肯·杜兰尼(Ken Dulaney)说:“Android是目前唯一一个能够取代iOS的产品。”随着Android的快速发展,Android的营收规模迟早会超越苹果,而Android开发者在未来实现营收前景良好。Android的营收规模迟早会超越苹果,关键在于Android 的装机量会达到多少。而对于Android的开发者来说,虽然当前在国内的营收情况仍不够理想,但发展前景良好。 Android开发工程师可以通过两种途径在短时间内实现盈利:第一,走国外市场,开发针对国外市场的应用,通过用户的付费去实现盈利;第二,通过广告实现盈利。之所以Android开发工程师走国外市场更容易实现盈利,不仅因为国外Android用户基数大,还因为国外用户下载应用后的付费比例要大大高于国内用户的付费比例。当然开发针对外国市场的应用更具难度,不仅存在文化上的巨大差异,也将面临和全球开发商竞争的残酷环境。针对广告盈利模式,对于Android开发工程师来说有着很大潜力,但关键也要看下一步智能手机的推广效果。对Android开发工程师来说,随着Android未来的装机量快速增长,以及手机支付手段的畅通,Android实现营收前景良好。

F. android framework层用什么工具开发代码

framework的开发比应用层就要烦的多啦。做应用在eclipse中就足够了,用android系统中的控件等工具,或者是自己写个类来实现特定的功能。而framework层的开发,需要往源码中添加代码、xml、图片、id等等数据,这个id可是费了我好大的劲才搞定的。在项目开始的一个半月里,我探索、尝试了很多,现在把我的经验分享出来。网上关于framework层的开发信息很少,多是靠自己。
最有效的方式就是分析android的源码,看google是怎样实现一个类的,以及类的层次。我现在看的主要是widget和app中的代码,其他的还没涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的类,也是代码量很大的类,我只是大概地过了下,还没有仔细分析过。

我花大力气的地方是资源文件夹下values中几个文件的作用。

G. Android framework 如何开发需要学习什么知识

"能够从源码下载到编译,到移植进开发板都能顺利的完成" 你的这些经验挺符合要求的啊,招聘信息里写的"Android Framework"指的应该就是/frameworks/base,多数是Java代码。看样子他们是在做Android设备,厂商一般是做移植,然后根据自己产品的特点可能会在frameworks及整个平台里加自己的扩展功能。

H. android framework开发 做什么

做架构层的开发,一般做系统开发,上层的支撑以及开源库的支持。

I. 如何搭建android framework开发环境搭建

framework的开发比应用层就要烦的多啦。做应用在eclipse中就足够了,用android系统中的控件等工具,或者是自己写个类来实现特定的功能。而framework层的开发,需要往源码中添加代码、xml、图片、id等等数据,这个id可是费了我好大的劲才搞定的。在项目开始的一个半月里,我探索、尝试了很多,现在把我的经验分享出来。网上关于framework层的开发信息很少,多是靠自己。 最有效的方式就是分析android的源码,看google是怎样实现一个类的,以及类的层次。我现在看的主要是widget和app中的代码,其他的还没涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的类,也是代码量很大的类,我只是大概地过了下,还没有仔细分析过。 我花大力气的地方是资源文件夹下values中几个文件的作用。 attrs.xml中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context, attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。 styles.xml中是各个控件的“样式”,样式由一个个属性所组成。我们在编辑xml文件的时候,不同的类所能设置的属性有共同的,也有不同的,都是由样式来控制的。具体可以去看styles.xml这个文件的内容。 themes.xml其实也是样式,只是适用的范围大一点,这个我是参考网上别人的看法,自己还没研究过。 ids.xml是公共的id,也就是对应用层可见的id,id是为了获得xml中的对象而需要的参数,也就是Object = findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到 public.xml描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。 当我们对public.xml做了改动后,执行make update-api命令,相应的current.xml就会添加这些改动。因为这些值按类型被放在不同的段上,类型相同的必须连续存放,不指定id值的话系统会自动计算出下一个值。 添加id的方法:1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。 2)在ids.xml中添加公共id项,每一项前面加一行的注释,这样就不用在public.xml中添加相应的项了。源码中是/** @hide */的形式,这样current中就不会有相应的段了。 3)在自己写的xml中,使用android:id = "@+id/id_name"的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。 上面这些希望能对大家有所帮助吧。

热点内容
威朗pro高配都有哪些配置 发布:2025-05-15 15:57:09 浏览:955
数据库分页查询数据 发布:2025-05-15 15:45:13 浏览:520
phpmyadmin上传限制 发布:2025-05-15 15:39:52 浏览:431
如何给手机配置真正的电脑 发布:2025-05-15 15:39:52 浏览:764
抽脚本命令 发布:2025-05-15 15:39:45 浏览:659
sok编程 发布:2025-05-15 15:33:21 浏览:40
lms算法程序 发布:2025-05-15 15:31:53 浏览:569
数据库二级映射 发布:2025-05-15 15:14:09 浏览:477
3d文件加密 发布:2025-05-15 15:05:17 浏览:362
jquery拖拽上传图片 发布:2025-05-15 14:53:36 浏览:130