AndroidThings系列之三:AndroidThings工程入门
本文将为大家演示如何给i.MX7D安装Android Things以及介绍具体开发过程中非常重要的Peripheral交互API。
和MCU的裸机开发模式不同,Android Things开发需要先在硬件平台上安装Android Things系统。首要的准备工作就是先在硬件上安装Android Things系统。在Android Things的大一统之下,硬件细节被抽象了,开发者使用Android Things提供的API来对硬件进行操作。至于开发工具,Google官方推荐使用Android Studio。在Google的努力下,Android Studio已逐渐蚕食了原本Eclipse占据的市场,基本成了为Android平台独树一帜的开发工具。
最新的Androd Studio版本为3.1.3,Android Studio提供了许多新的特性,主要包括Instant Run,更快的模拟器等特性。AS支持Windows/Linux/MacOS平台,本文使用Windows平台。
具体安装过程就不赘述了,先介绍具体开发过程中非常重要的Peripheral交互API。
我们平时说安装Android Studio,其实有点简单化了。这个过程除了编辑器之外,最重要的就是SDK,另外当然还有一系列的工具的安装。其中真正的核心是SDK,有了SDK,甚至不需要图形化的GUI也能用来开发Android程序。
我们对Android设备应该不会陌生,毕竟现在基于Android的产品太多,例如手机、平板及机顶盒,各种播放器等等。这些产品都有一个共同的特征:需要一个显示设备!而Android Things对于显示设备则不是必备的,一般称为Headless工作模式。
Android Things是Android的一个子集,继承了Android的大部分核心功能,而将与Android Things不相关的部分去掉了。另外Android Things中添加了与外设操作相关的一组API,也就是所谓的Peripheral API。
Android Things核心主题包括上图中的一些内容,我们可以看到,除了网络、摄像头等组件,GUI仍然是一个不可或缺的要素,毕竟,许多Android Things应用也是需要界面的。
Peripheral I/O功能提供了Android Things与传感器进行交互的接口及操作,主要包括如下几类
• GPIO,在嵌入式领域,GPIO提供了简单的开/关操作,另外GPIO也复用为其它设备如I2C/SPI等设备的实际物理接口
• PWM,PWM主要在电机控制,调光等应用中广泛使用,这是使用数字信号在模拟领域的另外一种用法。
• 串行通信,该应用主要包括I2C、SPI及串口通信,下面是三种常见接口的主要特点
Android Things集Android与Peripheral I/O于一体,在Google强大的技术支持背景下,以统一的平台,统一的API接口来进行嵌入式或物联网产品开发的新方式。
i.MX7D上布署了Android Things系统,在PC端也安装好了Android Studio开发工具后,接下来就可以开始真正的Android Things程序开发了!
正如Arduino降低了硬件入门的门槛一样,Android Things也将这一技术向菜鸟及软件工程师打开了一道全新的大门!
接下来我们建立一个空白的AndroidThings工程。
启动Android Studio,首次启动会弹出如下对话框
点击“Start a new Android Studio project”,就可以创建一个新的AS工程,这里也可以打开已有的工程文件,其它的一些设置例如配置AS的工作环境,也可以在此进行。如果以前打开过工程,那么可以使用主窗口的File/New/New Project...菜单来新建一个全新的工程。
这里指定工程文件的名称,公司域名及工程所在的位置,需要注意的是工程名称及公司域名将会组合起来生成Package name,这是不同的APP之间的唯一标识,例如Google Player市场就是以此来区别不同的APP。
平台选择,AS支持手机、平板、可穿戴、电视及AndroidThings等不同类型的硬件平台,此处一定要选中AndroidThings选项。
这里选择添加的Activity类型,目前可用的类型只有空白和外设两种类型的Activity。Activity是Android设备与用户交互的区域,但是许多AndroidThings设备是不连接显示器的,不过这不影响APP的运行,在HEADLESS模式下,Activity主要用来管理生命期的一些操作如初始化硬件设备、释放设备等操作。
这里选择空白Activity。
接下来设置Activity的名称及是否生成layout文件,layout用来对显示界面进行布局。这是典型的UI与代码分离的设计模式,在Android开发中几乎都是如此。
点击Finish按钮,就完成了一个空白工程的建立,新工程的代码主要位于MainActivity类里面,如下
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Android的Activity组件包含一系列的生命期函数,如默认创建的OnCreate()函数,在Activity创建时会调用该函数,我们一般在该函数内部初始化AndroidThings硬件。
通常我们在使用完设备后需要释放设备,这个任务我们放在Activity的另一个生命期函数内,该函数名为OnDestroy()。典型的用法如下
@Override
protected void onDestroy() {
super.onDestroy();
if(mGpio != null) {
try {
mGpio.close();
mGpio = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
接下来我们开始连接硬件设备,准备先点个灯,牛刀小试!