如何分析学习Android怎么提取linux系统的源代码?

&&&&Android系统源代码情景分析(修订版)(含CD光盘1张)
钻石会员自营订单满49元(含)免运费
其他会员自营订单满59元(含)免运费
不足金额订单收取运费5元起
邀请好友参加吧
版 次:1页 数:840字 数:1570000印刷时间:日开 本:16开纸 张:胶版纸印 次:1包 装:平装是否套装:否国际标准书号ISBN:0所属分类:&&&
下载免费当当读书APP
品味海量优质电子书,尊享优雅的阅读体验,只差手机下载一个当当读书APP
本商品暂无详情。| 漏洞检测 |
| 隐藏捆绑 |
如何学习Android系统源码
参考资料Android系统的源代码非常庞大和复杂,我们不能贸然进入,否则很容易在里面迷入方向,进而失去研究它的信心。我们应该在分析它的源代码之前学习好一些理
  参考资料
  Android系统的源代码非常庞大和复杂,我们不能贸然进入,否则很容易在里面迷入方向,进而失去研究它的信心。我们应该在分析它的源代码之前学习好一些理论知识,下面就介绍一些与Android系统相关的资料。
  我们知道,Android系统是基于Linux内核来开发的,在分析它在运行时库层的源代码时,我们会经常碰到诸如管道(pipe)、套接字(socket)和虚拟文件系统(VFS)等知识。此外,Android系统还在Linux内核中增加了一些专用的驱动程序,例如用于日志系统的Logger驱动程序、用于进程间通信的Binder驱动程序和用于辅助内存管理的匿名共享内存Ashmem驱动程序。在分析这些Android专用驱动程序的时候,也会碰到Linux内核中与进程、内存管理相关的数据结构。因此,我们有必要掌握一些Linux内核的基础知识,下面就介绍四本典经的Linux内核书籍。
Linux Kernel Development.  这本书的作者是Robert Love,目前最新的版本是第3版。这本书对Linux内核的设计和实现提供了一个总览视图,从概念上对Linux内核的各个子系统的设计目标和实现思路进行了清晰的描述,非常适合初学者阅读。如果从软件工程的角度来看,这本书就相当于是Linux内核的概要设计文档。
Understanding the Linux Kernel.  这本书的作者是Daniel P. Bovet和Marco Cesati,目前最新的版本是第3版。这本书对Linux内核的实现提供了更多的细节,详细地描述了内核开发中用到的重要数据结构、算法以及编程技巧,非常适合中高级读者阅读。如果从软件工程的角度来看,这本书就相当于是Linux内核的详细设计文档。
Linux Device Drivers.  这本书的作者是Jonathan Corbet, Alessandro Rubini和Greg Kroah-Hartman,目前最新的版本是第3版。这本书更加注重实际操作,它详细地讲解了Linux内核驱动程序的实现原理和实现方法,读者可以跟着它来实际地编写出自己的Linux驱动程序。阅读了这本书之后,对我们后续去分析Android的专用驱动程序是有非常大的帮助的。
Linux内核源代码情景分析  这本书的作者是毛德操和胡希明,是中国人自己编写的一本经典的Linux内核书籍。这本书最大的特点是从使用情景出发,对Linux内核的源代码作了详细的分析,帮助读者把枯燥无味的源代码给理顺了。
  掌握了Linux内核的基础知识之后,还不宜马上就去分析Android系统的源代码,因为这样做是漫无目的的,我们应该带着问题或者目标去分析Android系统的源代码。要把问题或者目标挖掘出来,最好的方法就莫过于是在Android平台上编写自己的应用程序了。通过编写应用程序,我们可以知道Android平台都提供了哪些功能,进而我们就会想去了解这些功能是怎么实现的,这样就可以达到带着问题或者目标去分析Android系统的源代码了。这里介绍两个Android应用程序开发教程的书籍:
Professional Android 2 Application Development.
Google Android SDK开发范例大全.
  这两本书都使用了大量的例子来说明如何使用Android SDK来开发Android应用程序。读者可以根据实际情况来练习一下,主要掌握Android应用程序四大组件(Activity、Service、Broadcast Receiver和Content Provider)的用法,因为Android系统的整个架构和实现就是为了向开发者提供这四大组件来实现各种各样的应用程序的。在学习的过程中,如果遇到其它问题,还可以参考官方文档,其网址为:
  环境搭建
  开发Android应用程序可以在两种环境下进行,一是在Android SDK环境下进行,一般是集成在Eclipse里面进行开发,二是在Android源代码工程环境下进行,在这种环境进行开发的好处是可以使用一些在SDK中不公开的接口。但是如果我们要修改Android系统的源代码,或者为Android系统增加新的功能接口,那么就只能在Android源代码工程环境下进行了。由于我们的目的是对Android系统源代码进行分析,因此,我们在开发Android应用程序时,也在Android源代码环境下进行。这样,我们就需要搭建一套Android源代码工程环境了。
  目前,Android源代码工程环境只能在Linux平台上使用,而Linux系统的发行版本比较多,这里我们推荐Ubuntu系统。Ubuntu系统是免费的,而且非常易于使用,安装和更新应用程序也非常方便,它的官方下载地址为:
  安装好Ubuntu系统之后,我们就可以在上面下载、编译和安装Android源代码了,具体方法和步骤可以参考下面这篇文章:在Ubuntu上下载、编译和安装Android最新源代码
  Android系统的源代码工程默认是不包含Linux内核源代码的,如果我们需要修改Android系统的内核或者在里面增加新的模块,那么就要把Android内核源代码一起下载、编译和安装了,具体方法和步骤可以参考下面这篇文章:在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
  Android源代码工程环境搭建好了之后,我们就可以在里面开发新的应用程序或者修改系统代码了。增加了新的应用程序或者修改了系统的代码之后,不需要重新编译整个源代码工程,只要单独编译有改动的模块就可以了,具体方法可以参考下面这篇文章:如何单独编译Android源代码中的模块
  对于已经开发好的应用程序或者系统功能,如果想把当作Demo展示给客户来体验时,我们既可以在真机上面运行,也可以在模拟器(Android源代码工程环境或者Android SDK环境都集成了模拟器)上面运行。当我们手头上没有真机,而且我们又不想把整个Android源代码工程环境或者Android SDK环境带去展示我们的Demo时,就可以考虑把模拟器这两个环境中独立出来了,具体方法可以参考下面这篇文章:制作可独立分发的Android模拟器
  系统架构
(责任编辑:幽灵学院)
------分隔线----------------------------
下一篇:没有了
Mate系列一直是华为终端产品中主打性能和体验的高端旗舰系列...
手机行业经历金九银十的火爆之后,一批新机陆续上市。而在群...
接下来要说的这款手机在双十一期间也有大幅的优惠,直降500...
西媒:中国厂商与谷歌三星争夺安卓系统控制权,西媒 中国厂商...
随着移动互联网的飞速发展,智能手机在全球范围内普及开来,...
齐鲁晚报讯 万圣节、记者节、天猫节、光棍节、感恩节……年...
工作日:9:00-21:00
周 六:9:00-18:00
&&扫一扫关注幽灵学院Android Settings源代码数据储存简易分析
Android Settings源代码数据储存简易分析
Android源码学习
Android Settings源代码数据储存简易分析
在Android系统的设置里面,我们可以对手机的很多属性进行相关的设置,如铃声,显示屏亮度等等,Android将这些数据储存在一个名为settings.db的Sqlite数据库里面,我们可以在Android手机的文件系统data/data/com.android.providers.settings/databases里面找到settings.db文件。可以通过adb shell命令,再利用ADT提供的Sqlite3工具或使用adb pull命令将之导出到电脑上通过可视化工具查看该文件。
可以看到settings.db中有六个table,设置的属性信息主要保存在global,secure,system表中。上面第二张图就是飞行模式开关在global表中的储存方式。
Android Settings中数据储存的相关的源代码主要在android/frameworks/base/core/java/android/settings.java和android/frameworks/base/packages/SettingsProvider目录中。
android/frameworks/base/core/java/android/settings.java
Android是这样描述这个文件的:
The Settings provider contains global system-level device preferences.
这个类中按类别定义了各种系统属性信息的字符常量(用作数据库中的name列),以及一些属性在各个类别之间转移操作。
settings.java中还提供了很多方法可以查询或更改字符常量对应的值。
get/putxxx(ContentResolver cr, String name, XXX def)
get是查询,put是更改,def为默认值,如果该值不存在取默认值,xxx是所操作数据的类型,如int,String等。
比如在android/packages/apps/Settings/src/com/android/settings/DispalySettings.java(设置中显示属性选项)中
Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_LIGHT_PULSE,
value ? 1 : 0);
android/frameworks/base/packages/SettingsProvider
这个目录下就是设置属性数据储存了,从这些文件的命名就可以知道Settings也是使用ContentProvider的方式操作数据的。
DatabaseHelper类继承SQLiteOpenHelper类。
private static final String DATABASE_NAME = &settings.db&;
private static final int DATABASE_VERSION = 98;
数据库名,版本
private static final String TABLE_SYSTEM = &system&;
private static final String TABLE_SECURE = &secure&;
private static final String TABLE_GLOBAL = &global&;
private void createSecureTable(SQLiteDatabase db) {
db.execSQL(&CREATE TABLE secure (& +
&_id INTEGER PRIMARY KEY AUTOINCREMENT,& +
&name TEXT UNIQUE ON CONFLICT REPLACE,& +
&value TEXT& +
db.execSQL(&CREATE INDEX secureIndex1 ON secure (name);&);
创建Secure表,其余类似。
private void loadSettings(SQLiteDatabase db) {
loadSystemSettings(db);
loadSecureSettings(db);
// The global table only exists for the 'owner' user
if (mUserHandle == UserHandle.USER_OWNER) {
loadGlobalSettings(db);
//位于loadSystemSettings(SQLiteDatabase db)方法中
loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
R.bool.def_dim_screen);
android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件保存着android系统的出厂设置值,如果要更改系统默认属性可以在这里改。比如系统的蓝牙默认是否打开:
&bool name=&def_bluetooth_on&&false&/bool&
如果我们想要将自己的应用设置放到系统的应用里,并给之配置默认值,只要在上述相关文件里进行修改即可。
这部分代码量有点多,本人只是刚刚踏进Android的大门,并且笔力不济,无法将Settings源代码数据储存深入浅出地讲的十分透彻,只能将个人认为的一些重要的代码部分贴了出来,权当记个笔记,如有错误请各位多多指教,谢谢。
我的热门文章
即使是一小步也想与你分享}

我要回帖

更多关于 怎么提取linux系统的源代码? 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信