[編譯] 6、開源兩個簡單且有用的安卓APP命令行開發工具和nRF51822命令行開發工具


星期四, 27. 九月 2018 12:00上午 - BEAUTIFULZZZZ

一、前言

前幾天給大家介紹了如何手動搭建安卓APP命令行開發環境和nRF51822命令行開發環境,中秋這幾天我把上面篇文章的操作流程全部做成了shell腳本,使得可以讓其他人簡單運行下腳本、就能夠直接建立綠色開發環境,豈不美哉?


二、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介紹

第一個是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 ~

[1].nrf_linux_tool項目GITHUB地址
[2].android_app_linux_tool項目GITHUB地址
[3].在Linux下搭建nRF51822的開發燒寫環境
[4].在Linux下搭建安卓APP的開發燒寫環境

@beautifulzzzz
智能硬件、物聯網,熱愛技術,關注產品
博客:http://blog.beautifulzzzz.com
園友交流群:414948975


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM