[编译] 6、开源两个简单且有用的安卓APP命令行开发工具和nRF51822命令行开发工具
星期四, 27. 九月 2018 12:00上午 - BEAUTIFULZZZZ

一、前言
前几天给大家介绍了如何手动搭建安卓APP命令行开发环境和nRF51822命令行开发环境,中秋这几天我把上面篇文章的操作流程全部做成了shell脚本,使得可以让其他人简单运行下脚本、就能够直接建立绿色开发环境,岂不美哉?
- 《[编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP》
- 《[编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)》
二、nrf_linux_tool开源项目介绍
2.1)项目简介
The project provides a nRF51 APP command-line development environment based on Linux system.
You can directly write、build、install APP(HEX/BIN) without using IDE.
git clone git@github.com:nbtool/nrf_linux_tool.git
2.2)如何使用
If it is the first time to compile, It is recommended to run goto tool directly, and then run the './run.sh tool' to download gcc、SDK、build-tools etc.
cd ./tool
./run.sh tool
Build the project(for example:app_nrf51_hids_keyboard):
cd ./app/app_nrf51_hids_keyboard/build
make clean
make all
Install the APP:
make erase
make flash_flash_softdevice
make flash
2.3)DEMO介绍
- app_nrf51_peri_blinky > 简单工程,主要用nRF51的GPIO外设控制一个LED闪烁;
- app_nrf51_ble_hrs > BLE工程,心律计,BLE DEMO级工程,展示心律、电池电量等特征;
- app_nrf51_hids_mouse > BLE工程,蓝牙鼠标DEMO级工程,了解HID;
- app_nrf51_hids_keyboard > BLE工程,蓝牙键盘DEMO级工程,按动按键给上位机发送hello;
2.4)工程结构介绍
未运行run.sh构建环境前的目录结构:(可见,当前app层只有4个简单的DEMO,tool里面只有一个run.sh脚本)
➜ nrf_linux_tool git:(master) tree -L 2
.
├── app
│ ├── app_nrf51_ble_hrs
│ ├── app_nrf51_hids_keyboard
│ ├── app_nrf51_hids_mouse
│ └── app_nrf51_peri_blinky
├── README.md
└── tool
└── run.sh
构建之后的目录结构:(比未构建多了一个sdk/nRF5_SDK_12.3.0_d7731ad、gcc-arm编译器、和nRF5x命令行工具)
➜ nrf_linux_tool git:(master) tree -L 2
.
├── app
│ ├── app_nrf51_ble_hrs
│ ├── app_nrf51_hids_keyboard
│ ├── app_nrf51_hids_mouse
│ └── app_nrf51_peri_blinky
├── README.md
├── sdk
│ └── nRF5_SDK_12.3.0_d7731ad
└── tool
├── gcc-arm-none-eabi-5_4-2016q3
├── nRF5x-Command-Line-Tools_9_7_3
└── run.sh
注: 之所以将SDK和GCC等工具通过构建产生,是为了减少git仓库的大小!
2.5)run.sh构建脚本介绍
run.sh脚本比较长,其最核心的在于tool函数,在该函数内是分别判断GCC、nRF5_Command_Lind、nRF5_SDK是否存在,如果不存在则下载:(以下载安装nRF5x command line tool为例)
echo "> install nRF5x command line tool ..."
if [ ! -d $NRF5X_COMMAND_LINE_PATH ]; then
pack=nRF5x-Command-Line-Tools_9_7_3_Linux-x86_64.tar
wget -O $pack $NRF5X_COMMAND_LINE_LINK
mkdir $NRF5X_COMMAND_LINE_PATH
tar -xvf $pack -C $NRF5X_COMMAND_LINE_PATH
rm -rf $pack
fi
特殊的,在博客《编译4》中介绍:SDK安装好之后需要更新/components/toolchain/gcc/Makefile.posix,这里我们也用脚本实现:
echo "> update the *.posix file, when the project root is changed ..."
t_arm_gcc_path=`pwd`/gcc-arm-none-eabi-5_4-2016q3
posix_file=$NRF5_SDK_12_3_0_PATH"/components/toolchain/gcc/Makefile.posix"
echo "GNU_INSTALL_ROOT := $t_arm_gcc_path" > $posix_file
echo "GNU_VERSION := 5.4.1" >> $posix_file
echo "GNU_PREFIX := arm-none-eabi" >> $posix_file
由于这里GNU_INSTALL_ROOT采用的是绝对路径,因此一旦整个工程的根目录发生变化,需要运行./run.sh tool更新posix文件。
2.6)典例DEMO介绍
BLE工程太过复杂,我们还是看看闪灯工程吧:
➜ app_nrf51_peri_blinky git:(master) tree
.
├── build
│ ├── blinky_gcc_nrf51.ld
│ ├── Makefile
│ ├── objects.mk
│ ├── sdk_config.h
│ └── sources.mk
└── main.c
其中main.c是唯一一个APP层代码文件,build目录下是一个简单的makefile框架,用来编译、烧写、擦除程序:
#include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"
#include "boards.h"
/**
* @brief Function for application main entry.
*/
int main(void)
{
/* Configure board. */
bsp_board_leds_init();
/* Toggle LEDs. */
while (true)
{
for (int i = 0; i < LEDS_NUMBER; i++)
{
bsp_board_led_invert(i);
nrf_delay_ms(500);
}
}
}
注: APP中的4个DEMO是从SDK的example中移植上来的,改动比较小,后续会把更多DEMO移到APP里,并写博客介绍~
三、android_app_linux_tool开源项目介绍
3.1)项目简介
The project provides a Android APP command-line development environment based on Linux system.
You can directly write、build、install Android APP without using IDE.
git clone git@github.com:nbtool/android_app_linux_tool.git
3.2)如何使用
Enter the root directory of an example (for example: HelloAndroid).
If it is the first time to compile, It is recommended to run make tool to download platform、SDK、build-tools etc.
cd ./example/HelloAndroid
make tool
Build the project:
make build
Install the APP:
make program
3.3)DEMO介绍
- HelloAndroid: hello world demo
- BluetoorhScan: bluetooth scan + surface(canvas) + handler + bundle
- FlyGame: surface(canvas) + fly game demo
第一个是hello world;第二个是蓝牙scan周边设备的信号强度;第三个是几年前做的一款小游戏:

3.4)工程结构介绍
类似上一个开源项目,未构建前只有DEMO:
➜ android_app_linux_tool git:(master) tree -L 3
.
├── example
│ ├── BluetoothScan
│ │ ├── run.sh
│ │ └── ...
│ ├── FlyGame ...
│ └── HelloAndroid ...
└── readme.md
构建之后多了安卓SDK:
➜ android_app_linux_tool git:(master) tree -L 3
.
├── example
│ ├── BluetoothScan
│ │ ├── run.sh
│ │ └── ...
│ ├── FlyGame ...
│ └── HelloAndroid ...
├── readme.md
└── tool
└── android-sdk
├── build-tools
├── licenses
├── platforms
├── platform-tools
└── tools
注: 安卓工程里的run.sh不是放在tool中,而是放在每个DEMO里面,因为每个DEMO所依赖的SDK和build工具的版本可能不一样!
3.5)run.sh构建脚本介绍
和上一个类似,tool函数用来下载相关SDK、编译工具、plantform-tool等,同时这里也把编译build、烧写program、和清除clean也集成进run.sh中了。真正用的时候是通过makefile调用run.sh实现:
➜ HelloAndroid git:(master) cat makefile
tool:
./run.sh tool
clean:
./run.sh clean
build:
./run.sh build
program:
./run.sh program
all:
./run.sh all
3.6)典例DEMO介绍
以Hello World为例:
➜ HelloAndroid git:(master) tree
.
├── AndroidManifest.xml
├── bin
├── libs
├── makefile
├── mykey.keystore
├── obj
├── res
│ ├── layout
│ │ └── activity_main.xml
│ └── values
│ └── strings.xml
├── run.sh
└── src
└── com
└── example
└── helloandroid
└── MainActivity.java
麻雀虽小、五脏俱全,该工程包含一个MainActivity.java文件、两个资源文件、一个Manifest.xml文件,最终生成的apk会存放到bin文件中。
同样的,今后我还会在Example中增加更多DEMO,并在博客中进行介绍。同时,也欢迎其他人来贡献DEMO ~

LINKS
[1].nrf_linux_tool项目GITHUB地址
[2].android_app_linux_tool项目GITHUB地址
[3].在Linux下搭建nRF51822的开发烧写环境
[4].在Linux下搭建安卓APP的开发烧写环境

@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975
[编译] 6、开源两个简单且有用的安卓APP命令行开发工具和nRF51822命令行开发工具的更多相关文章
- 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http: ...
- 【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位网友补充完善
链接地址:http://www.tuicool.com/articles/jyA3MrU 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http://blog.cs ...
- Android之史上最全最简单最有用的第三方开源库收集整理
Android开源库 自己一直很喜欢Android开发,就如博客签名一样, 我是程序猿,我为自己代言 . 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者, ...
- 大型项目使用Automake/Autoconf完成编译配置(标准的编译过程已经变成了简单的三部曲:configure/make/make install,)
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefi ...
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...
- Android混淆、反编译以及反破解的简单回顾
=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...
- 我的Android进阶之旅】GitHub 上排名前 100 的 Android 开源库进行简单的介绍
GitHub Android Libraries Top 100 简介 本文转载于:https://github.com/Freelander/Android_Data/blob/master/And ...
- 开源两个spring api项目
开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...
- 两个简单的Loading
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<JavaScript并非"按值传递"> 作者主页:myvin 博主QQ:85139 ...
随机推荐
- 利用 v-html 将后台数据中的换行符在页面输出
在拿到后台传入的数据时:有些换行符,空格等会直接输出在页面 (/n .<br/> 等) 用 v-html 来解决: <div v-html="message" ...
- caffe服务器搭建血泪记录
装过很多次caffe了,但这个还是遇到了很多奇葩问题,不过以前都是在ubuntu上,这次是在centos上. 1.import error _caffe.so: undefined symbol: ...
- 学习日志1 :java 三大框架 了解
1.spring--------利用它的IOC和AOP来处理控制业务(负责对数据库的操作) https://blog.csdn.net/yu616568/article/details/7073997 ...
- Java读取证书
import java.io.FileInputStream; import java.security.Key; import java.security.KeyFactory; import ja ...
- VIM中的特殊字符
0.简介 在linux中vim查看一个windows下的文本文件, 经常在行尾有一个 ^M. 这其实是windows/linux/mac系统中文本换行不一致的原因导致的, 系统类别 文本换行符 转义字 ...
- 在SOUI中使用窗口自適應大小
SOUI 2.5.0.3開始支持窗口大小自適應. 2.5.0.3以前,宿主窗口要適應顯示內容大小比較麻煩,因爲一般都是佈局內容適應宿主. SOUI 2.5.+開始支持線性佈局,線性佈局是借鑑的Andr ...
- 给JS包写TypeScript用的类型申明文件
TS (TypeScript)区别于JS (JavaScript)一个最大的不同是TS增加了类型.当一些TS代码要使用JS包的时候,最好这些JS包都有类型介绍,比如这个变量是什么类型,那个函数参数的什 ...
- UOJ#291. 【ZJOI2017】树状数组 树套树
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ291.html 题解 结论:这个写错的树状数组支持的是后缀加和后缀求和.这里的后缀求和在 x = 0 的时 ...
- C语言作业06--结构体&文件
1.本章学习总结 1.1 思维导图 1.2学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.定义结构体可以使代码整个练习更加紧密,非常实用,当我们需要在对一个个体的不同属性调用时可以更加系统 ...
- 团队作业第六次—团队Github实战训练
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 团队作业第六次-团队Github实战训练 团队目标 搭建一个相对公平公正的抽奖系统,根据QQ聊天记录,完成从统计参与抽 ...