基于Nano Pi硬件的AS项目开发

  • Andro Studio集成Nano Pi硬件资源库

打开AS,新建工程之后,打开app/src/main其目录结构应该是如下样式:

─ main

│   ├── AndroidManifest.xml

│   ├── java

│   │   └── com

│   │       └── friendlyarm

│   │           ├── FriendlyThings

│   │           │   ├── BoardType.java

│   │           │   ├── FileCtlEnum.java

│   │           │   ├── GPIOEnum.java

│   │           │   ├── HardwareControler.java

│   │           │   ├── SPIEnum.java

│   │           │   ├── SPI.java

│   │           │   └── WatchDogEnum.java

│   ├── jniLibs

│   │   ├── arm64-v8a

│   │   │   └── libfriendlyarm-things.so

│   │   └── armeabi

│   │       └── libfriendlyarm-things.so

└── res

这个是Nano Pi的资源目录,去官网下载源码之后,直接复制到app/src/main/java里面,不要做任何修改。

在java的同级目录下新建jniLibs文件夹,将Nano Pi的库引入

  • 系统签名

因为要开发的软件最终要访问Nano Pi的硬件资源,所以必须给软件打上系统签名。Nano Pi官方推荐的方式是在android 8.1的源码上进行编译,然后获取系统签名。因此这里提供两种方式,第一种是官方方式,第二种是个人方式。个人比较推崇第二种方式,因为android 8.1源码太大,下载慢。

  1. 官方方式

第一步:修改AndroidManifest.xml

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

android:sharedUserId="android.uid.system"

第二步:修改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)

最后一步:在 Android源代码中编译你的app

先在 Android源代码根目录调用 setenv.sh 导出环境变量,然后进入你的 app 目录,使用mm命令编译;

例子:编译 GPIO_LED_Demo,以RK3399平台为例:

cd rk3399-android-8.1

. setenv.sh

cd vendor/friendlyelec/apps/GPIO_LED_Demo

mm

更多请查看官方链接:FriendlyThings for RK3399/zh - FriendlyARM WiKi

  1. 个人方式

第一步打包apk

在进行这一步之前,首先应在AndroidManifest.xml中的manifest节点中加入以下属性:

android:sharedUserId="android.uid.system"

因为我们在调试软件的时候不能先加入这一节点,否则软件将会运行报错,无法安装也无法调试,所以我们先要把非访问硬件功能实现,在真机调试完毕之后,在加入这一节点。然后使用AS打包软件。具体如何打包请自行百度。

第二步:下载android 8.1 签名工具

在官方给出的资料里面,我们很轻易就能找到相对应的签名工具。具体链接在:

FriendlyELEC-RK3399àandroid-platform-key-filesàandroid8里面。

下载上图三个文件,然后将其复制到Ubuntu任意目录下。

第三步:在Ubuntu下安装jdk开发环境

首先查看是否已经安装jdk,ctrl+Alt+T打开终端,输入命令,如果出现如下所示,即说明已经安装过jdk开发环境了,所以跳过以下步骤,否则请按照以下步骤安装jdk。

kylin@ceoifung:~$ java -version

java version "13.0.2" 2020-01-14

Java(TM) SE Runtime Environment (build 13.0.2+8)

Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)

如果没有出现上述的内容,表明没有安装jdk开发环境,所以请跟随我接下来操作。

  • 首先进入以下网址下载jdk:

Java Downloads | Oracle

下载下图所框选的jdk。

  • 第二步:解压jdk包

将下载的jdk包复制到Ubuntu下,在终端中解压文件:

kylin@ceoifung:~$ tar -zxvf jdk-13.0.2_linux-x64_bin.tar.gz

  • 第三步:将解压后的文件移到/usr/lib目录下

cd /usr/lib

sudo mkdir –p jdk/jdk-13.0.2

sudo mv ~/jdk-13.0.2 /usr/lib/jdk

ll jdk/jdk-13.0.2

执行完之后,出现下图所示的内容,即表明移动成功。

  • 第四步:配置java环境变量

这里是将环境变量配置在etc/profile,即为所有用户配置JDK环境。

使用命令打开/etc/profile文件,进行编辑:

sudo vim /etc/profile

在末尾添加以下几行文字:

#set java env

export JAVA_HOME=/usr/lib/jdk/jdk-13.0.2

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

执行命令使修改立即生效

source /etc/profile

查看java开发环境是否安装完毕,终端中输入如下指令:

java -version

第四步:复制libconscrypt_openjdk_jni.so文件

libconscrypt_openjdk_jni.so文件存在于android8.1源码的以下路径中:

prebuilts/sdk/tools/linux/lib64/

取得libconscrypt_openjdk_jni.so文件之后,将其复制到签名工具所在的根目录下。

第五步签名

在签名工具的根目录下,将之前打包的apk文件复制到此,然后打开终端,输入以下命令:

java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk app-release-signed.apk

注意:app-release.apk,签名前的安装包

app-release-signed.apk,签名后的安装包

如果你待签名的apk文件名为app-release.apk,可以直接在终端运行start.sh文件进行签名

./start.sh

如果apk名称不为app-release的话,打开start.sh文件进行修改

运行完该条指令之后,签名工具的根目录会生成签名之后的安装包

第六步:通过ADB安装apk 到开发板上

  • 首先查看是否已经安装了adb,终端输入以下命令:

adb version

如果出现下图所示的情况,表示adb没有安装。

如果没有出现上图所示情况,那么请略过下面的步骤:

  • 安装adb

sudo apt-get install android-tools-adb

adb version

  • 下载apk到开发板上

选择签名之后的apk文件,然后在终端输入指令下载

adb install-multiple -r -t app-release-signed.apk

出现下图所示情况表明安装完毕

我们提供了脚本,脚本内容即为下载指令终端中输入

./install.sh    //如果签名之后的文件不一致,请修改在运行

如果出现如下图所示的情况,请先到开发板中卸载之前的旧版本软件,因为之前调试时所用的签名与现在签名不一致。

  • 检验结果

自行检测硬件资源访问是否有效。

基于Nano Pi NEO4开发板的AS项目开发相关推荐

  1. [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建

    一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...

  2. 【华为云技术分享】基于小熊派开发板的智慧路灯开发版本更新

    1 主要功能 (1)光敏传感器感知光照强度并上发. (2)实现在云端对LED灯的开关控制. (3)通过设定传感器阈值,设定LED灯的自动开关. 2 目的及意义 (1)通过本次实验加深对于小熊派开发板的 ...

  3. 基于Arduino Uno开发板的红外遥控开发

    基于Arduino Uno开发板的红外遥控开发 1 准备 1.1 硬件与软件 1.2 走线 2 代码 2.1 ReceiveDump 2.2 SendRawDemo 1 准备 1.1 硬件与软件 单片 ...

  4. 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板环境搭建与点灯. 腾讯 TencentOS 团队于2021年1 ...

  5. ZYNQ RFSoc开发板-usrp软件无线电X410mini开发板-5G评估板

    RFSoc开发板-usrp软件无线电X410mini开发板-5G评估板 Zynq® UltraScale+™ RFSoC ZCU208 评估套件是面向开箱即用评估及前沿应用开发的理想 RF 测试平台. ...

  6. arm11 s3c6410 开发板比较 哪个公司的arm11开发板好? arm11开发板推荐

    代理arm11开发板已经几个月了,说下我自己的看法. 我首先用语言描述一下国内主流的arm开发板情况,个人对各个公司开发板的看法,仅代表个人意见,没有针对某个公司的意思,由于6410 的开发难度以及工 ...

  7. JAVA硬件开发板_用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? 这些都是怎么 ...

  8. [Intel Edison开发板] 02、Edison开发板入门

    一.前言 Start from the link: 开始学习的链接 上面链接是官网的教程,按照教程可以开发板入门: 其中第一步是了解开发板,涉及到如何组装.如何连线.一些主要的接口简单介绍等信息: 第 ...

  9. 开发板——在X210开发板上进行裸机开发的流程

    流程总结 本文以"LED流水灯"为例,说明在X210开发板上进行裸机开发的流程. 步骤一:搭建嵌入式Linux开发环境 在虚拟机中安装与配置Linux系统,并安装交叉编译工具链: ...

最新文章

  1. MATLAB基本操作(四):结构体struct元胞数组cell
  2. 跟我一起写 Makefile(十二)
  3. 第七章之main函数和启动例程
  4. Android之SharedPreferences 存储复杂对象
  5. 信息学奥赛一本通 1026:空格分隔输出 | OpenJudge NOI 1.1 06
  6. 时间机器(CDQ分治)
  7. ns-3 教程 —— 入门
  8. 最新版Eclipse下载及安装(详细)
  9. 计算机毕业设计JAVA图书个性化推荐系统mybatis
  10. 本科毕业论文外文文献翻译怎么找?
  11. qq空间已删信息服务器,qq空间恢复已删除的说说方法
  12. 通信原理(三)香农三大定理
  13. CleanMyMac X真正好用的Mac电脑系统优化软件应用工具
  14. Google大佬自述:天才程序员竟也有不为人知的秘密,看完真的学到了!
  15. nginxpcmobile
  16. 操作系统实验5 设备管理
  17. 锐龙r9 5900hx和i7 11800h哪个好 i711800h和锐龙r95900hx对比
  18. 工作小笔记——使用Cartographer建图和调优
  19. 基于51单片机16*32点阵显示屏的设计与实现
  20. MySQL安装包下载地址 各个版本的都有哦!

热门文章

  1. SQL server.数据库增删改查
  2. 【文献翻译】Epileptic Seizures Detection Using Deep Learning Techniques: A Review
  3. 一个点围绕另一个点旋转后的坐标
  4. PostGIS中的常用函数
  5. spark.read.option参数
  6. Windows注册服务的几种方式
  7. 如何清空python的IDLE?
  8. 字符串String s =sfds55d676455dfg32434eertre; 怎么样把非数字全部去除,只保留数字?
  9. JQuery - 反向选择器
  10. SNAT(源地址转换)