研究android系统架构层次

     如借用其它人员研究的wifi层次,对比android 下载后的源码。可看到android一层一层的架构层次是怎么样的。

并了解一个android系统是怎么跑起来的。

    所以平时我的的android开发大部分是在java应用层,一些深层次点的就是ndk编码,会通过进行ndk编码。如proxydroid.

他的代理功能其实就是用到了ndk,通过jndi接口,调用到一个c++层,然后c++层次可以用到一些c++的类库,会fork一个后台进程

去进行iptable的代理。

如执行下述命令

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8123

会用过jndi调用 c++的

android_os_Exec_createSubProcess方法

最后调用 create_subprocess方法

static int create_subprocess(const int rdt, const char *cmd, char *const argv[],

char *const envp[], const char* scripts, int* pProcessId)

{

pid_t pid;

int pfds[2];

int pfds2[2];

pipe(pfds);

if (rdt) {

pipe(pfds2);

}

pid = fork();

if(pid < 0) {

LOGE("- fork failed: %s -\n", strerror(errno));

return -1;

}

if(pid == 0){

signal(SIGPIPE, SIG_IGN);

if (envp) {

for (; *envp; ++envp) {

putenv(*envp);

}

}

dup2(pfds[0], 0);

close(pfds[1]);

if (rdt) {

close(1);

close(2);

dup2(pfds2[1], 1);

dup2(pfds2[1], 2);

close(pfds2[0]);

}

execv(cmd, argv);

fflush(NULL);

exit(0);

} else {

signal(SIGPIPE, SIG_IGN);

*pProcessId = (int) pid;

dup2(pfds[1], 1);

close(pfds[0]);

write(pfds[1], scripts, strlen(scripts)+1);

if (rdt) {

close(pfds2[1]);

return pfds2[0];

} else {

return -1;

}

}

}

Wifi System:

Java应用层

Java Framework层

JNI层

适配器层

wpa_supplicant程序

Kernel层

 

Java应用层

-- Settings, WifiSwitcher等应用

--> /system/app

Java Framework层

-- frameworks/base/wifi/java/android/net/wifi/*  (android.net.wifi)

-- frameworks/base/services/java/com/android/server/WifiService.java

frameworks/base/services/java/com/android/server/WifiWatchdogService.java

--> /system/framework/framework.jar

/system/framework/services.jar

JNI层

-- frameworks/base/core/jni/android_net_wifi_Wifi.cpp

--> /system/lib/libandroid_runtime.so

适配器层

-- hardware/libhardware_legacy/wifi/wifi.c

--> /system/lib/libhardware_legacy.so

wpa_supplicant程序

-- external/wpa_supplicant

-- external/wpa_supplicant_6

--> /system/bin/wpa_supplicant

/system/lib/libwpa_client.so

Kernel层

-- kernel wifi driver 

 

Enable Wifi 的过程:

Settings/WifiEnabler.java

mWifiManager.setWifiEnabled(enable);

-->

frameworks/base/wifi/java/android/net/wifi/WifiManager.java

public boolean setWifiEnabled(boolean enabled) {

mService.setWifiEnabled(enabled);

}

-->

frameworks/base/services/java/com/android/server/WifiService.java

public boolean setWifiEnabled(boolean enable) {

sendEnableMessage(enable, true, Binder.getCallingUid());

}

->

setWifiEnabledBlocking() {

if (enable) {

mWifiStateTracker.loadDriver();

mWifiStateTracker.startSupplicant();

} else {

mWifiStateTracker.stopSupplicant();

mWifiStateTracker.unloadDriver();

}

}

-->

frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java

public synchronized boolean loadDriver() {

return WifiNative.loadDriver();

}

public synchronized boolean startSupplicant() {

return WifiNative.startSupplicant();

}

-->

frameworks/base/wifi/java/android/net/wifi/WifiNative.java

public native static boolean loadDriver();

public native static boolean startSupplicant();

-->

frameworks/base/core/jni/android_net_wifi_Wifi.cpp

static jboolean android_net_wifi_loadDriver(JNIEnv* env, jobject clazz)

{

return (jboolean)(::wifi_load_driver() == 0);

}

static jboolean android_net_wifi_startSupplicant(JNIEnv* env, jobject clazz)

{

return (jboolean)(::wifi_start_supplicant() == 0);

}

-->

hardware/libhardware_legacy/wifi/wifi.c

int wifi_load_driver(){

//for build in driver, do nothing

//for .ko driver, insmod/load firmware...

}

int wifi_start_supplicant(){

property_set("ctl.start", "wpa_supplicant");

}

-->

/init.rc

 service wpa_supplicant /system/bin/wpa_supplicant ...

时间: 2024-11-12 13:44:00

研究android系统架构层次的相关文章

Android技术19:Android系统架构

Android系统架构是学习Android最基本的知识点,经常在技术面试过程中涉及到有关问题,接下来对Android系统架构进行总结. Android官方文档提供资料显示:Android系统分为4个层次,从低到高依次为Linux kernel(Linux内核层),Libraries和Android运行时Runtime,Android Framework,Applications. 1.Applications应用层 该层主要是运行在Andorid系统上的应用程序,如Home,SMS,Contac

iOS vs Android 系统架构

iOS是基于UNIX内核,Android是基于Linux内核,iOS和android作为两款优秀的手机操作系统,他们有共性有区别. iOS的系统架构 分为四个层次: 核心操作系统层(Core OS layer) 核心服务层(Core Services layer) 媒体层(Media layer) 可触摸层(Cocoa Touch layer) 如下如所示: iOS系统架构解析: 1.Core OS是位于iOS系统架构最下面的一层是核心操作系统层,它包括内存管理.文件系统.电源管理以及一些其他的

iOS和android系统架构对比

iOS和android系统架构对比 iOS是基于UNIX的,直接与底层硬件通信.系统底层.应用框架.应用软件都是采用C/C++或者Objective-C写成的,所以有很高的运行效率. android是基于Linux内核设计,在Linux内核上运行一个Java虚拟机,虚拟机再运行软件.就好似在一个系统上又套了一个系统,以此内存消耗大,运行效率的.

Android系统架构的简单描述

架构图如下: 1)英文版: 2)中文版: 由图可知:Android 系统架构从下到上分为 Linux内核层.中间件. 应用程序框架层和应用程序层. 1.Linux kernel 负责硬件的驱动程序.网络.电源.系统安全以及内存管理等功能. 2.中间件:核心库和运行时(libraries & Android runtime) 1)核心库 即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit(引擎),该函数库负责 android网页浏览器的运行,例如 标准的 c 函数库libc.o

Google工程师解析Android系统架构

导读:Sans Serif是Google的一位工程师,近日发布了一篇博文非常清楚的描述了Android系统架构,中国移动通信研究院院长黄晓庆在新浪微博上推荐了该文,并认为文中对Android的介绍很好,如下是CSDN对文章的简单编译: Andriod是什么? 首先,就像Android开源和兼容性技术负责人Dan Morrill在Android开发手册兼容性部分所解释的,"Android并不是传统的Linux风格的一个规范或分发版本,也不是一系列可重用的组件集成,Android是一个用于连接设备的

【Android系统】Android系统架构简介

概述 Android系统架构如下图: 从上往下一共是四层: 应用程序层.应用程序框架层.函数库与Android运行时层.Linux内核层. 下面分别介绍各层: 分层介绍 应用程序层 包含系列的Android核心应用程序,大部分的Android应用也属于这一层,如日历.闹钟.浏览器等.这一层属于用户. 应用程序框架层 这一层就是普通开发者需掌握的层,我们使用框架里的各个模块来开发应用,这些模块和各种服务都可以复用.理解了这一层,开发者就能更快更好的开发应用.下面介绍一下各个模块: 序号 模块名 用

Android系统架构和平台优劣

(图片来源于网络) Android系统架构采用了分层架构的思想,如上图所示.从上往下一共包括四层: 1.应用程序层 该层提供一些核心应用程序包,例如电子邮件.短信.日历.地图.浏览器和联系人管理等.同时,开发者可以利用java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等.友好共处. 2.应用框架层 该层是Android应用开发的基础,开发人员大部分情况是在和他打交道.应用程序框架层包括活动管理器.窗口管理器.内容提供者.视图系统.包管理器.电话管理器.资源管理器.位置管

4412开发板Android系统架构

本文转自迅为开发板手册:http://www.topeetboard.com 1. 架构图直观 下面这张图展示了Android系统的主要组成部分: 可以很明显看出,Android系统架构由5部 分组成,分别是:Linux Kernel.Android Runtime.Libraries.Application Framework.Applications.第二部分将详细介绍这5个部分. 2.架构详解 现在我们拿起手术刀来剖析各个部分.其实这部分SDK文档已经帮我们做得很好了,我们要做的就是拿来主

(1)-Android学习笔记之:初识Android系统架构和项目结构

Android系统架构 Android程序结构 创建一个Android项目,为初学便于理解,将程序项目结构切换为Project模式,项目结构如下 .gradle和.idea:这两个目录下放的都是Android Studio自动生成的文件,无需我们关心,也不需要手动编辑. app:项目中的代码.资源等内容几乎都放在这个目录下,开发工作基本在这个目录下进行. libs:如果项目引用了第三方jar包,就需要吧这些jar包放在libs目录下,此目录下的jar包都会自动添加到构建目录中. androidT