上回已经把环境搭建起来了,模拟器可以运行,然后出现了Android的运行环境。由于当选择Lunch的时候,选择的是Car平台的,所以出现的是个基于车载的横向UI风格,而非通常手机的纵向风格。感觉跟Android电视有点像。
今天就在这个平台下实现一下程序员的第一步,Hello World。当然,咱们是Hello EEWorld。
1、进入到external目录下,新建hello目录,然后新建两个文件,hello.c和Android.mk
cd external
mkdir hello
一个是Android环境下编译用的,一个是源码,应该很好理解。由于本次的实装其实更多的属于笔记性质,先试探着实现功能,所以对其中的原理没有深入的研究,一切以机能实现为主。当有了一定的技术积累之后,再回过头来把其中的知识做个总结。现阶段就先这么整了吧。有疑问的欢迎留言积极探讨。
言归正传,两个文件:
hello.c
Android.mk
2、编译该模块
在aosp的根目录下 mmm ./external/hello或者在external/hello目录中执行mm
注意,环境要进行过source和lunch操作
编译完成,此时只是编译完成,并且将编译后的hello二进制文件安装到out目录中。
烧机用的是image文件,所以此处要执行make snod
会提示已经生成了system.img镜像。如果是Android真机调试的话,此时用fastboot将这个system.img烧写入机器中即可。但是咱们使用的是模拟器,所以此处还要再执行一次make,这里卡了我好久,一直都在bin下看不到hello文件,排查了多个原因之后,定位到了是这里出现的问题。
3、模拟运行
这时可以运行了。
运行emulator,由于没有做任何的UI改变,所以现在无需关注模拟器上的画面。
然后再开一个终端,运行adb shell,通过adb与模拟器连接。
然后cd到/system/bin/目录下,运行hello
达到目的。
在使用adb shell与模拟器进行连接的时候,会各种报错端口占用。我的解决办法是,adb shell 和 模拟器都退出然后再启动,反复几次就可以连上了。先mark一下,之后再回来研究这个具体原因。
其实到目前为止,没有用到关于Android的任何东西,一切都还是linux的那套东西。下一节,使用Android的进行间通信机制binder,来实现一个两个进程通信的例子。
此内容由EEWORLD论坛网友Bingqi23原创,如需转载或用于商业用途需征得作者同意并注明出处