一、android 系统分区及根文件系统目录结构 1、系统分区 目前我们的2992平台,android 系统暂时分了多个分区, /data 分区可读写 /system分区只读 file:///C:/Users/LAIZHE~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg 2.1.1---系统分区图 2、根文件系统目录结构 file:///C:/Users/LAIZHE~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 2.2.1---android 根目录结构 cache :是缓存临时文件夹, etc :指向 /system/etc ,众所周知的配置文件存放目录 system :是Android根文件系统中一个很重要的目录,系统中的大部分东西都在这里了 sys:用于挂载 sysfs文件系统。。 proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。 mnt:U盘等外部存储设备挂载路径 data :存放用户安装的软件以及各种数据。 dev :设备节点文件的存放地。 Init: 是系统启动到文件系统的时候第一个运行的程序 init.rc :系统初始化脚本 ……. ……… Android中的内核启动后,kernel会启动第一个用户级别的进程:init,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。 file:///C:/Users/LAIZHE~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 2.2.2---init 进程 Init源码位置:JB目录下system/core/init/init.c中。 Init作用: (1)、 创建一些linux根文件系统中的目录 (2)、读取并且解析init.rc文件 (3)、读取并且解析硬件相关的init.magellanbroad.rc脚本文件 (4)、初始化动态设备管理,设备文件有变化时反应给内核 (5)、启动系统属**: system property service (6)、启动init.rc中定义的boot 等各种action和service. ……… file:///C:/Users/LAIZHE~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg 2.2.2---system目录结构 System 目录结构分析 \system\app 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件, 在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\app。 \system\bin 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件 \system\etc 从文件夹名称来看保存的都是系统的配置文件 \system\fonts 字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库 \system\framework framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架 \system\lib lib目录中存放几乎所有的共享库(.so)文件 \system\media 铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音 \system\xbin 系统员管理工具 build.prop 系统全局属性 …….. ……. 特别说明: build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件。 1、查看build.prop #getprop …… [ro.secure]: [0] [ro.serialno]: [] [ro.sf.lcd_density]: [160] [ro.wifi.channels]: [14] [service.adb.tcp.port]: [5555] [service.bootanim.exit]: [1] [sys.boot_completed]: [1] [sys.usb.config]: [adb] ….. # getprop ro.sf.lcd_density //查看单个属性 2、设置属性 #setprop ro.sf.lcd_density 240
二、替换android系统文件 分别可通过U盘copy 和adb push等方式替换 U盘里放需要替换的文件 1、 U盘插进板子USB接口、usb会自动mount在系统跟目录的/mnt/udisk目录下 2、 先删除掉系统中需要替换的文件 3、 命令cp 相应文件到自己的目录 adb push方式 1、 adb连接设备 2、 adb push 本地替换文件目录 android系统相关目录 ps:替换android 系统apk(atv.apk) 1、 系统apk 存放在/system/app目录下,系统system分区默认为只读的,首选需要重新mountsystem 目录 成为可读写 #mount –o remount rw /system 2、 删除atv.apk #rm /system/app/atv.apk 如需为了push进系统的apk里面生效我们还需删除掉apk在/data/data目录下生成的相应数据 #pm install com.realtek.atv 3、 push 新的apk进系统 #adb push d:\atv.apk /system/app
三、 android 独立模块的编译(apk、so、jar档等) android的编译命令有m mm mmm等三个编译命令 m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件 想使用这些命令,首先需要在android源码根目录执行.build/envsetup.sh 脚本设置环境 #source ./build/envsetup.sh或者#. build/envsetup.sh Ps: 1、编译apk Y:\Workspace\kernel\android\JB\device\realtek\app\atv phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$ TARGET_PRODUCT=magellan_tv010 mmm ./device/realtek/apps/Atv/ 将会在下面的目录下生成atv.apk Y:\Workspace\kernel\android\JB\out\target\product\magellan_tv010\system\app/atv.apk 2、编译jar档Y:\Workspace\kernel\android\JB\frameworks\base\services\java phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$ TARGET_PRODUCT=magellan_tv010 mmm ./ frameworks/base/services/java 将会在下面的目录下生成services.jar Y:\Workspace\kernel\android\JB\out\target\product\magellan_tv010\system\framework\ services.jar 为了每次都要输入TARGET_PRODUCT对应的产品编号可以做如下操作: phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$lunch You're building on Linux Lunch menu... pick a combo: …… 13.rtk_magellan_tv001-eng 14. magellan_tv010-eng ……. Which would you like? [full-eng] 14 …. phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$ 四、TvServer 简介 1、 TvServer源码编译 (1) 进入Y:\Workspace\system\src 目录 #make (2) 编译完成后进入Y:\目录Workspace\system\project\TvServer #make release (3) 会在Y:\Workspace\system\project\TvServer\bin目录下生成相应的Clienttest和TvServer 2、 TvServer 的启动 (1) TvServer 位于android 系统的\system\rtk_rootfs\usr\local\bin目录下 (2) TvServer服务系统如何设定自动启动 Init.rc中添加 service magellan-setup /system/bin/sh /init.magellan.sh class main oneshot init.magellan.sh 中添加 cd /usr/local/bin; ./TvServer >/dev/c**ole 2>&1 & 备注:最后一个“&”代表系统后台背景下运行 这样在init启动的过程中会自动启动TvServer服务 3、 TvServer 和android 关系 file:///C:/Users/LAIZHE~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 五、 Eclipse 使用注意事项 1、android 标准apijar包android.jar替换rtk平台android.jar ( 包含TvManager 等rtk平台自己的api) android.jar路径: Y:\Workspace\kernel\android\JB\out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\class.jar 2、编译依赖第三方jar包 工程目录下先建libs目录。第三方jar放进libs目录即可,编译过程第三方jar包会编进apk等。
六、常用知识汇总 1、使用am command #Am start –n packagename/ class name(可以从AndroidManifest.xml找到) //启动浏览器 #am start -ncom.android.browser/com.android.browser.BrowserActivity //启动图片播发器 #am start -ncom.skyworth.pictureplayer/com.skyworth.pictureplayer.activity.PlayerActivity 2、Clienttest 的使用 一款我们可以用来测试TvServer 功能android客户端的工具 Clienttest 工具的源码位于TVserver 源码目录中 Y:\Workspace\system\project\TvServer\ClientTestSrc Clienttest 工具存放于\system\rtk_rootfs\usr\local\bin目录下 Ps: 1、 切source #./clienttest –src 1 //切到atv 通道 #./clienttest –src 5 /切到hdmi1通道 2、 自动搜台 #./clienttest –san //自动搜台 3、 设置系统音量 #./Clienttest –vol 50 //设置系统音量50 详细的Clienttest 功能测试命令 可参考: Y:\Workspace\system\project\TvServer\ClientTestSrc\ParamParse.cpp中的 void ProcessParam(intargc, char **argv, RpcClient& client, int i) { // Test TvChannel API if (strstr(argv, "-first"))PlayFirstChannel(client); else if (strstr(argv,"-next")) PlayNextChannel(client); else if (strstr(argv,"-prev")) PlayPrevChannel(client); else if (strstr(argv, "-playHisCh")) PlayHistoryChannel(client); ……. ……. } 4、 遥控器设定 #setir –p 1 //设置rtk公版遥控器 #setir –p 5 //设置skyworth 遥控器 5、 input 模拟按键输入(详细键值可查看keyevent.java) #input keyevent 3//home 按键 #input keyevent 4 //返回按键 6、make update-api 修改了framework之后 全编ICS 需要make update-api 然后在全编 make update-api #如果你在Android源码中添加了自定义的包、类、方法或者你修改了Android源码中标识为@hide的方法、类, 你需要这些内容对 Application可见并且需要编译进SDK的Document中的话,这个命令是必须的
|