Android things 开发需要注意的一些

一、 android things 简介:

2016年12月,谷歌第一次对外公布了物联网操作系统Android Things的开发者预览版本。新版操作系统将能够支持一系列物联网设备的计算平台。Android Things是安卓系统的一个分支版本,类似于面向智能手表和穿戴设备推出的Android Wear等。新版操作系统将能够支持一系列物联网设备的计算平台,其中包括英特尔公司的袖珍电脑“爱迪生”,NXP公司的Pico平台,以及全世界最小的板卡式电脑“树莓派3”。 一句话说,Android Things就是让开发者可以使用Android开发工具开发嵌入式设备。

1.1 Android Things的特性:
1.1.1 单一自启动APP,通常设备会只运行单一的程序,即开发者的APP会自动启动,系统APP不会呈现出来。
1.1.2 显示是可选的,设备可以没有屏幕,通过按钮、触摸、LED灯、语音或其他形式与用户交互。
1.1.3 提供了通过I/O驱动外设的接口,让开发者可以与传感器和执行器进行通讯交互,支持GPIO、PWM、I2C、SPI和UART。
1.1.4 用户驱动API,用户驱动继承Android Framework Services,允许APP将硬件事件注入到Framework中,使得其他APP可以使用标准的Android API访问。
1.1.5 物联网云,通过Google物联网云平台,开发者可以方便且安全的连接、管理数百万计遍布全球的设备,并从中获取数据。Google物联网云平台和一些其他的Google服务,提供了包括数据采集、处理分析和可视化物联网数据的完整解决方案。
1.2 Android Things的优势:
1.2.1 更统一的开发框架和接口
传统的单片机开发智能硬件的方式,开发工具、开发接口多而杂,不同的单片机厂商甚至型号,都有特定的开发工具,学习成本高,不统一,程序的可移植性差、可管理性差。Android Things提供更完善的开发框架,更方便好用的开发工具(而且是免费的)。
1.2.2 更适合Android开发者进行智能设备的创新
智能硬件通常都要实现与服务器交互、与手机交互,这些领域都是Android开发者熟悉的领域,通过Android Things开发智能设备,可以将Android开发者在移动开发方面的经验更深入的体现在智能设备开发中。传统的硬件、单片机开发者,对移动开发不熟悉,自然会在智能设备创新中落后于对移动开发了如指掌的Android开发者。
1.2.3 更先进的基础框架
Android Things相较于传统的设备平台,就如同Android手机与Nokia功能机的区别。尤其在有触摸屏人机交互的设备中,Android的优势明显,Android对UI线程的优先和保障机制,使得传统设备人机界面操作卡顿的问题可以很好解决。Android基于Java的面向对象开发,也使得程序更容易封装和管理。众多的Android开源资源,也可以方便的应用到Android Things中来。我们开发的Android工业设备智能操作终端,在应用中给用户提供了更好的操作体验,受到了用户的广泛好评。
1.2.4 更安全的物联网云
传统的物联网方案,由于设备端、服务端往往由不同的开发团队完成,设备端开发往往还停留在比较古老的开发阶段,对一些新的安全物联网协议了解较少,使得很多物联网设备,还在采用TCP协议明码传输数据,很容易被截获和篡改。而有信息安全概念和经验的服务端开发者,由于不了解硬件开发也无能为力。新闻报道过的一些智能摄像头被入侵的案例,很多与这方面有关。而Android Things彻底改变了这种状况,手机APP与服务端通讯安全方面的经验,Android开发者可以直接应用在设备开发中。很多新的物联网协议,如MQTT,都有Android的客户端实现可以方便使用。
1.2.5 更丰富的云服务资源
使用Android Things,有丰富的云服务资源可以使用,可以基于TensorFlow实现人工智能(如图像识别),可以通过Google Assistant获得智能服务。国内访问Google服务目前还有一些问题,不过想一些办法解决。同时,阿里、腾讯也都有一些智能服务(如图像识别、人脸识别等)通过云提供,使用Android Things也可以方便集成。
1.2.6 更低的入门门槛
传统的智能硬件开发,通常需要购买昂贵的开发套件,而Android Things只需要几百块钱买个开发套件接上显示器或电视机就可以玩起来。如果你手上有树莓派3,下载最新镜像烧录就可以玩了。
1.3 Android Things的劣势:
1.3.1 成本
对于低成本的智能小设备,Android Things可能不适合,一个能流畅运行Android Things的硬件环境,成本也要200+。
1.3.2 硬件控制实时性
通过Android层对硬件进行控制,实时性肯定不及运行在单片机中的主程序进程,所以直接用Android Things做一些对传感器高实时的扫描轮询,或是对电机进行伺服控制,这不是Android Things的优势。
1.3.3 已有熟悉的硬件开发平台
如果开发者已经有自己熟悉的硬件开发平台,有单片机开发经验,但对Android开发并不熟悉,使用Android Things就有些得不偿失

二、树莓派3简介:

树莓派是世界上最流行的单板计算机,3 Model B是最新的版本,我们后面就使用它给大家介绍Android Things。它提供了如下配置:
树莓派

1.一个双核64位ARM Cortext-A53 1.2GHz CPU(512M的内存,在背面);
2.400 MHz GPU;
3.电源接口;
4.HDMI和DSI视频接口;
5.音频接口;
6.有线、无线网络和蓝牙4.1模块;
7.4个USB 2.0接口;
8.40-针GPIO连接器用于连接外设;
9.SD卡存储(在侧边);

三、 用树莓派开发android things:
:
3.1 连接系统:
连接好树莓派开发板,启动Android Things系统,并在开发电脑中使用adb connect命令连接到开发板(这样你就可以在构建运行的时候选择树莓派开发板进行安装了 );
连接ip

3.2使用advanced ip scanner 查看所连接的树莓派的ip
查看ip

如图:制造商为Raspberry Pi Foundation 对应的IP 即为网络内连接树莓派开发版。

3.3 连接出现错误
如果在连接时出现以下错误
连接出错
一般出现这种情况都是因为其他其他程序占用了5037端口(比如豌豆荚,刷机精灵等),
方法1:
通过以下命令可以找出哪个进程占用了5037端口

netstat -ano | findstr "5037"
 TCP    127.0.0.1:5037         127.0.0.1:60478        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60479        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60480        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60481        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60482        ESTABLISHED     6312

我这边找到的进程号是6312, 然后我们在任务管理器里找到这个进程
端口对应进程
如果这个进程不是adb, 结束它,再重启adb就会成功了。
方法2:
如果使用方法一说的可能是5037端口被占用,杀进程的方法不行,因为查看Windows任务管理器中没有发现5037端口被占用

【解决方案一:】
1.输入命令:adb nodaemon server,则dos页面上显示静止,表示此命令正在执行
2.再打开一个新的dos命令行窗口cmd
3.输入adb devices,成功显示目前连接的设备
【解决方案二:】
1.请解压ADB包里面的所有文件,复制到C:\Windows\SysWOW64目录下
2.输入adb devices,成功显示目前连接的设备
备注:貌似这个方法是针对WIN7 64位用户,这个方法整完以后,解决方案一就失效啦

3.4 编译gradle文件配置要求:

dependencies {
    //添加依赖
    provided 'com.google.android.things:androidthings:1.0'    
}
 **android things 要求SDK Tools为24或者更高版本;
 Android SDK为7.0(API 24)或者更高版本;**
compileSdkVersion 25
    buildToolsVersion  "25.0.2"
    defaultConfig {
        applicationId "com.example.androidthings.simpleui"
        minSdkVersion 25
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }

3.5 . android things 没有像手机那样的launcher ,所以app要设置开机自启动

        <activity android:name=".SimpleUiActivity">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

           <!--在系统启动的时候自动启动app-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.IOT_LAUNCHER"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>

        </activity>

以上就是需要注意的,其他的就跟普通的android app一样。

猜你喜欢

转载自blog.csdn.net/zhangxy0605/article/details/80763638