Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 144: Line 144:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===Step2) 让你的app拥有system权限===
 
===Step2) 让你的app拥有system权限===
需要将你的 app提升至 system权限,否则会无法访问硬件,需要修改你的 app 的 AndroidManifest.xml 和 Android.mk这两个文件,同时,你的app需要到Android源码中编译,参考示例的方式部署即可。
+
你的app需要拥有system权限,才能访问硬件资源; <br />
 +
请参考下面的方法修改你 app 的 AndroidManifest.xml 和 Android.mk这两个文件; <br />
 +
并且最好将你的app放到Android源码中去编译,这一步不是必需的,但是建议这么做,如果你的app在外部编译,你需要对apk进行签名才能让你的app拥有system权限(新手不太建议,过程比较繁琐)。<br />
 
====修改AndroidManifest.xml====
 
====修改AndroidManifest.xml====
 
在应用程序的AndroidManifest.xml中的manifest节点中加入以下属性:
 
在应用程序的AndroidManifest.xml中的manifest节点中加入以下属性:

Revision as of 08:26, 20 October 2018

English

1 简介

友善电子开发了一个名为libfriendlyarm-hardware.so的函数库,用于Android应用程序访问开发板上的硬件资源,该函数库基于Android-NDK技术开发,提供便利的硬件访问接口,开发者无需掌握过多的嵌入式知识便可使用,有效提高开发进度。

本篇文章仅适用于RK3399开发板,包括 NanoPi-NEO4, NanoPi-M4 和 NanoPC-T4。
其他平台也有相应的支持,请移步这里查看:Android Thing: Android Hardware Programming

2 支持如下RK3399官方Android BSP

  • Android 7.1.2
  • Android 8.1

3 支持如下RK3399硬件资源

  • Serial Port
  • GPIO
  • ADC
  • PWM
  • I2C
  • RTC
  • Watch dog
  • SPI

等等, 接口包括I2C, SPI, GPIO常用的接口。
Smart4418SDK+OLED

4 支持的开发板

5 开源Android示例

所有硬件访问的示例程序均已集成到 Android 的源代码当中,位于 Android7.1.2 和 Android8.1 源代码的以下目录:vendor/friendlyelec/apps,也可以单独网上下载,下表中列出各个 Demo 的源代码地址:

5.1 Android8.1

Android8.1示例
Serial Port

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SerialPortDemo

GPIO

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/GPIO_LED_Demo

ADC

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/ADCDemo

PWM

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/PWMDemo

I2C

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/I2C_LCD1602_Demo

RTC

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/RTC_Demo

Watch dog

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/WatchDogDemo

SPI

https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/SPI_OLED_Demo

5.2 Android7.1.2

Android7.1.2示例
Serial Port

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SerialPortDemo

GPIO

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/GPIO_LED_Demo

ADC

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/ADCDemo

PWM

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/PWMDemo

I2C

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/I2C_LCD1602_Demo

RTC

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/RTC_Demo

Watch dog

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/WatchDogDemo

SPI

https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/SPI_OLED_Demo


6 如何在自已的程序中使用硬件访问库

6.1 Step1) 集成libfriendlyarm-hardware.so到你的工程目录

克隆以下仓库到本地:

git clone https://github.com/friendlyarm/android-libfriendlyarm-hardware.git

接着复制 libs 目录下的所有内容到你的工程目录下,然后在你的Android项目的src目录下创建com/friendlyarm目录,将java/AndroidSDK目录拷贝进去即可,最后的目录的结构看上去是这样的 (注:AndroidStudio的项目可能会稍有不同,但大致如此):

YourProject/
├── AndroidManifest.xml
├── libs
│   ├── arm64-v8a
│   │   └── libfriendlyarm-hardware.so
│   └── armeabi
│       └── libfriendlyarm-hardware.so
├── src
│   └── com
│       └── friendlyarm
│           ├── AndroidSDK
│           │   ├── BoardType.java
│           │   ├── FileCtlEnum.java
│           │   ├── GPIOEnum.java
│           │   ├── HardwareControler.java
│           │   ├── SPIEnum.java
│           │   ├── SPI.java
│           │   └── WatchDogEnum.java

使用以下方法导入它们,主要的接口都集中在 HardwareControler.java文件中:

import com.friendlyarm.AndroidSDK.HardwareControler;
import com.friendlyarm.AndroidSDK.SPIEnum;
import com.friendlyarm.AndroidSDK.GPIOEnum;
import com.friendlyarm.AndroidSDK.FileCtlEnum;
import com.friendlyarm.AndroidSDK.BoardType;

6.2 Step2) 让你的app拥有system权限

你的app需要拥有system权限,才能访问硬件资源;
请参考下面的方法修改你 app 的 AndroidManifest.xml 和 Android.mk这两个文件;
并且最好将你的app放到Android源码中去编译,这一步不是必需的,但是建议这么做,如果你的app在外部编译,你需要对apk进行签名才能让你的app拥有system权限(新手不太建议,过程比较繁琐)。

6.2.1 修改AndroidManifest.xml

在应用程序的AndroidManifest.xml中的manifest节点中加入以下属性:

android:sharedUserId="android.uid.system"

6.2.2 修改Android.mk

编写一个Android.mk文件(最简单的方法就是拷贝示例中的Android.mk文件),修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
 
LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
LOCAL_PACKAGE_NAME := 你的项目名
 
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS := -lfriendlyarm-hardware
 
include $(BUILD_PACKAGE)

6.3 Step3) 在 Android源代码中编译你的app

先进入 Android源代码目录,调用 setenv.sh 导出环境变量,然后再进入你的 app 目录,使用mm命令编译;
举例说明:编译 GPIO_LED_Demo:

cd rk3399-android-8.1
. setenv.sh
cd vendor/friendlyelec/apps/GPIO_LED_Demo
mm

7 RK3399平台Android硬件资源的程序访问

7.1 Serial Port

目前可用的串口是UART4,设备名称为/dev/ttyS4,其他串口资源如下表所示,你也可以使用USB转串口来扩展:

串口设备 串口资源占用情况
UART0 已被蓝牙占用
UART1 已被千兆以太网占用
UART2 已被作为调试串口
UART3 已被千兆以太网占用
UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)

Android硬件库为串口提供的开发接口如下:


7.2 GPIO

7.3 ADC

7.4 PWM

7.5 I2C

7.6 RTC

7.7 Watch dog

7.8 SPI

8 开发资料