[編譯] 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 [email protected]: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 [email protected]: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 ~
LINKS
@beautifulzzzz
智慧硬體、物聯網,熱愛技術,關注產品
部落格:http://blog.beautifulzzzz.com
園友交流群:414948975