魔豆应用开发傻瓜书——helloworld
一、准备
对于使用Windows的朋友,请注意,你们的编译器⼀定要将Dos换⾏符设置变更为Unix换行符,否则在路由器里就会看到每行的最后有一个^M,对于部分命令的正确执⾏是有问题的。
二、建立项目
每一个魔豆路由器的应用都必须包含两个文件:init 和manifest.json 。init 文件是所有调用的接文件,manifest.json 则是一个说明文件。 我们先建立一个目录app-helloworld ,并且在目录中建立两个空的文件,文件名即是init 和manifest.json 。如下图所示:
这样我们就建立了一个空的app-helloworld 的项目。接下来我们编写manifest.json的内容。
三、MANIFEST.JSON
我们先来编写最简单的manifest.json ⽂件:
{
"package_id" : "com.modou.helloworld",
"name" : "app-helloworld",
"display_name" : " 魔⾖你好",
"author" : "⽼黄",
"author_forum_id" : "",
"author_mail" : "hd@mochui.net",
"homepage" : "modouwifi.cn",
"version" : "0.0.1",
"os_version" : "1.3.01",
"release_date" : "2015.03.28",
"location" : "internal",
"description" : " 这是⽼黄的hello world ⽰例",
"instruction" : " 这是第⼀个版本",
"autostart" : false,
"start_on_boot" : false
}
大多数的json 条⽬基本都可以一眼看明白。我讲几个要注意的:
package_id:这⾥的com.modou.helloworld要全局唯一,升级时就使用这个id 来知道替换之前已经安装的应用。如果提交到魔豆官方市场时,也会对package_id进行唯一性的检查。
• name:我们最后会将应用打包成为mpk 文件,mpk 文件的文件名与这个name必须一样。
• version:支持三级小数点,数字越大版本越高,升级就靠它了。
• os_version :这个应用运行所需要的ModouROM版本号,一般都是当前最新的稳定版。
• icon :指定一个图像文件好显示在触摸屏的启动界面里。
• autostart :安装完后是否启动。
• start_on_boot :是否在魔豆路由器启动时也启动这个应用。
在魔豆官方app-framework 文档(https://gitcafe.com/Modou/app-framework)
里,有很详细的manifest.json 文件的说明,可以自己去看更详细的说明。
四、INIT一下
init 这个文件是每一个魔豆应用的核心。它必须是一个可执行文件,可以是一个shell脚本,当然也可以是一个二进制可执行文件、Python、Lua 文件。按约定,这个init 需要⽀持以下参数的运行:
• start : 启动,实现启动本应用的操作
• stop : 停止, 停止本应用的操作
• status : 查询状态,查询本应用的状态
• set_config : 对本应用重新进行配置,生效配置数据应该进⾏的操作
• install : 安装,本应用安装后的一次性操作
• uninstall : 卸载,本应用被卸载前的一次性操作
我们将install 和uninstall 方法实现,其它的先不管。实现这两个方法的主要目的就是在系统 安装mpk 文件时将应用程序的图标加到到屏幕启动界面中去。为了简单,通常我们都使⽤shell来书写init ,我们先定义⼀些常⽤的变量:
#!/bin/sh
PWD="$(cd $(dirname $0) && pwd)"
TITLE=" 魔⾖你好"
PROGRAM_NAME="app-helloworld"
ICON="res/icon.png"
PRESSED_ICON="res/icon_p.png"
APPS_CONFIG_DIR="/data/conf"
LAUNCHER_CONFIG_DIR="$APPS_CONFIG_DIR/launcher/conf.d"
LAUNCHER_CONFIG_FILE="$LAUNCHER_CONFIG_DIR/$PROGRAM_NAME.conf"
INSTALL_BIN="/usr/bin/install"
REMOVE="/bin/rm -f"
这⾥我对部分变量的定义做下说明:
• PWD:这是得到init 这个脚本当前运行目录的变量,因为魔豆中的每一个app 在安装后都是一个随机数的变量名,所以需要用这样的方法来得到当前的目录。
• TITLE :这是显示于屏幕上的应用的名称
• ICON 和 PRESSED_ICON :在屏幕上显示和点按下去时显示图标图片,必须是PNG格式,大小为111x111。接着我们在init 中加入一个usage方法,当无聊的人不知道怎么用时我们好给他们一个提示,这是书写一个友好代码的开始:
usage() {
echo "ERROR: action missing"
echo "syntax: $0 <start|stop|restart|status|config|install|uninstall>"
}
接下来我们加入当应用被系统安装和删除时的调用方法:
install() {
echo "{" > "$PROGRAM_NAME.conf"
echo "\"name\" : \"$TITLE\"," >> "$PROGRAM_NAME.conf"
echo "\"icon\" : \"$PWD/$ICON\"," >> "$PROGRAM_NAME.conf"
echo "\"iconPressed\" : \"$PWD/$PRESSED_ICON\"," >> "$PROGRAM_NAME.conf"
echo "\"exec\" : \"$PWD/init run\"," >> "$PROGRAM_NAME.conf"
echo "\"msgNum\" : 4" >> "$PROGRAM_NAME.conf"
echo "}" >> "$PROGRAM_NAME.conf"
$INSTALL_BIN -d $LAUNCHER_CONFIG_DIR
$INSTALL_BIN "$PROGRAM_NAME.conf" "$LAUNCHER_CONFIG_FILE"
}
uninstall(){
$REMOVE "$LAUNCHER_CONFIG_FILE"
}
uninstall 方法就通常容易懂,删除对应的配置文件就好。 而 install 方法实质上就是先生成一个conf 文件,这个文件的文件名是 $PROGRAM_NAME.conf (app-helloworld.conf )。然后再将它安装到系统的/data/conf/launcher/conf.d目录中去。 这是在我的魔豆中生成的配置⽂件的内容:
{
"name" : " 魔⾖你好",
"icon" : "/data/apps/17229257/res/icon.png",
"iconPressed" : "/data/apps/17229257/res/icon_p.png",
"exec" : "/data/apps/17229257/init run",
"msgNum" :
}
我们可以看到,在exec 中指定了当这个图标被按下时执行的命令,它调用了init run 。所以我们也需要为我们的应当加上run 方法:
run(){
textview2 -t "hello" -m "hello world"
}
在run 方法中我们使用了魔⾖提供的一个控件textview2,它会在屏幕上显示出一个窗⼜,窗⼜的标题是hello,中间的内容是hello world ,你按左上角的<,就可以退出了。
方法都写好了,我们还需要为init 这个shell脚本写一个case ,读取init 的参数后去调用相应的方法:
case "$1" in
"start" )
start;;
"stop" )
stop;;
"run" )
run;;
"restart" )
start
stop;;
"install" )
install;;
"uninstall" )
uninstall;;
"set_config" )
set_config;;
* )
usage ;;
esac
这样⼀个基本的init 就准备好了。最后千万别忘记了,要给initl 加上招待权限:
chmod +x init
五、打包测试
写好了manifest.json 和init 后我们把相关资源文件加入后就可以打包mpk 上传到魔豆上玩玩了。刚才写init 时,我们设置了res⽬录中的icon.png 和icon_p.png为显示和按下去的图
标,建立相应的目录,将我们的png 文件放进去。这里要注意,这两个png 文件大小为111x111像素,暂不支持别的图片格式。
接下来我们打包出一个应用来,命令很简单:
tar czvf ../app-helloworld.0.0..mpk *
这样就在上一级目录中生成了一个app-helloworld.0.0.1.mpk的文件。接下来,进入魔豆的极客模式,上传这个mpk 文件,就可以看到在已安装应用中多出了一个app 叫“魔豆你好”:
接着点触摸屏右侧的向下箭头,也可以找到魔豆你好这个图标了:
我们来点击下这个图标来启动这个应用:
看来一切正常。这就是一个最为简单的Hello World应用。本章节的所有源代码都可以从gitcafe 获取,地址为:https://gitcafe.com/hdcola/ModouAppDevTutorial/tree/master/app-helloworld0.0.1
魔豆应用开发傻瓜书——helloworld的更多相关文章
- PHP和MySQL Web开发 原书第4版 高清文字版,有目录,附带源码
PHP和MySQL Web开发 原书第4版:http://yunpan.cn/QCWIS25zmYTAn 提取码 fd9b PHP和MySQL Web开发 原书第4版源码:http://yunp ...
- PHP和MySQL Web开发(原书第4版) 高清PDF+源代码
PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区 作者:Linux [字体:大 中 小] 内容简介 <PHP和My ...
- 学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用
http://www.importnew.com/13246.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 ...
- Laravel 5.4 快速开发简书:
Laravel 5.4 快速开发简书第1章 课程介绍 介绍课程的大体脉络和课程安排 第2章 Laravel 5.4介绍 本节课会带领大家介绍laravel的各个版本历史以及讨论php框架的未来发展趋势 ...
- Eclipse的tab键为4个空格完整方法 附:阿里代码开发规范书
开发规范书:http://pan.baidu.com/s/1dESdyox 1.点击 window->preference-,依次选择 General->Editors->Text ...
- django开发傻瓜教程-1-安装和HelloWorld
安装 sudo pip install Django 新建项目 django-admin startproject XXX 启动项目 进入主目录下 python manage.py runserver ...
- [Android]Android开发入门之HelloWorld
引言:在做Unity开发的时候,发现这么个问题,虽然Unity是跨平台的,能够进行Android,IOS,Web,PC等开发,但如果要实现一些稍微系统层的东西,还是需要通过通信,调用原系统的接口(自定 ...
- 使用Spring开发第一个HelloWorld应用
http://www.importnew.com/13246.html 让我们用Spring来写第一个应用程序吧. 完成这一章要求: 熟悉Java语言 设置好Spring的环境 熟悉简单的Eclips ...
- 1、搭建springMVC开发环境以及HelloWorld测试
一.下载spring-framework,采用简单的方式: http://repo.springsource.org/libs-release-local/org/springframework/sp ...
随机推荐
- github 多人协作
1.本地生成私钥: ssh-keygen -C "YourEmail@example.com" (这里的email使用github账号)生成公钥和私钥 2.查看私钥,并添加到自己的 ...
- RIP路由协议(一)
实验要求:使用RIPv2配置路由器,使路由器能接收到所有的路由条目 拓扑如下: 配置如下: R1enable 进入特权模式configure terminal 进入全局模式interface s0/0 ...
- 设计精美Power BI报告的五大秘诀
众所周知,Power BI可以帮助您创建交互式且信息丰富的报告,但使用Power BI 制作精美而实用的报告对我们这群IT人员而言,却是一个巨大的痛苦:但个人觉得不能就此止步,通过不断实践练习,小悦采 ...
- Ubuntu 12.04不能在華碩F81se系列電腦上安裝解决辦法
本人華碩F81se系列的電腦,剛開始是裝的ubuntu 10.04的系統,周末閑的無聊,就想把系統換成ubuntu 12.04的,從ubuntu官網上下載了12.04的安裝包,下了個usb insta ...
- sudo with no password
/********************************************************************************* * sudo with no pa ...
- 怎样用CMD命令强行删除文件?
如果你要删除的整个文件夹以及文件夹里面的所有内容的话rd/s/q 盘符:\某个文件夹 (这样整个文件夹所有的文件和文件夹都删除了)比如我想删除D盘的123文件夹以及123文件夹里面所有的内容rd/ ...
- Unity 3D-Navigation网格导航系统使用教程
Unity自带导航系统 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创 ...
- xdoj--1077: (循环节长度)
1077: 循环节长度 时间限制: 1 Sec 内存限制: 128 MB提交: 103 解决: 37[提交][状态][讨论版] 题目描述 数一有很多的有理数,然而有的是有限小数,如1/2=0.5, ...
- jeecg-org.jeecgframework.web.system.listener.InitListener
早上启动项目 发现报错 百度之后,发现这属于jeecg常见问题: http://www.jeecg.org/forum.php?mod=viewthread&tid=1830&extr ...
- Java异常处理的方法
1.异常概述在程序中,错误可能产生于程序员没有预料到的各种情况,或者是超出了程序员可控制范围的环境因素,如用户的坏数据.试图打开一个根本不存在的文件等.在Java中这种在程序运行是可能出现的一些错误称 ...