魔豆应用开发傻瓜书——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" : "4",
    "author_mail"     : "[email protected]",
    "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" : 4
}

我们可以看到,在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.1.mpk *

这样就在上一级目录中生成了一个app-helloworld.0.0.1.mpk的文件。接下来,进入魔豆的极客模式,上传这个mpk 文件,就可以看到在已安装应用中多出了一个app 叫“魔豆你好”:

接着点触摸屏右侧的向下箭头,也可以找到魔豆你好这个图标了:

我们来点击下这个图标来启动这个应用:

看来一切正常。这就是一个最为简单的Hello World应用。本章节的所有源代码都可以从gitcafe 获取,地址为:https://gitcafe.com/hdcola/ModouAppDevTutorial/tree/master/app-helloworld0.0.1

时间: 2024-12-20 00:30:46

魔豆应用开发傻瓜书——helloworld的相关文章

Eclipse 下搭建pyDev python开发环境及helloworld

一,安装基础环境 1,安装jdk7,并配置环境变量(pyDev要求jdk7及以上版本,否则安装好也不显示) 2,下载Eclipse并解压 3,安装python3.X 二,Eclipse下配置pyDev 1,安装插件:help -> Install new Software.. ->输入PyDev Update Site - http://pydev.org/updates 然后下一步.同意等等. 2,配置python编译器:Window -> perferences -> pyDe

学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用

http://www.importnew.com/13246.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - iOS - Python - Android - Web前端 跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用 2014/10/10 | 分类: 教程 | 5 条评论 | 标签: SPRING, 教程 分享到

线段树区间更新 费马小定理|魔豆传奇

程序设计:魔豆传奇 <魔豆传奇>是2004年的一部动画片.里面有很多奇怪的魔豆,具有奇特且强大的能力. 偶然间,蒜头君获得了一排已经发芽的魔豆,每株的最初高度为ai . 蒜头君每天都会选择对一段区间的魔豆浇水,或查看一段区间魔豆的高度和. 魔豆每一次被浇水,其高度会变为之前高度的立方. 也就是说,蒜头君有两种操作: 1.使序列中下标在区间[L,R] 中的每个数变成自己的立方. 2.查询序列中下标在区间[L,R]中的数值和. 由于魔豆高度过大,查询时你需要输出数值和对1046513837 取模的

使用Spring开发第一个HelloWorld应用

http://www.importnew.com/13246.html 让我们用Spring来写第一个应用程序吧. 完成这一章要求: 熟悉Java语言 设置好Spring的环境 熟悉简单的Eclipse IDE的操作 如果你还没有设置好环境,请参考Spring开发环境的配置. 我们第一个程序是打印”Hello World”语句,这个语句通过Spring的配置文件来设置. 1 – 新建Java项目: 第一步用Eclipse IDE新建一个项目. 点击 > File > New > Java

给大家介绍一本开发的书

一本仍然在创作中的关于开源和软件开发的图书--<利用开源项目,学习软件开发>可以下载阅读了,国内社区合力创作,内容涵盖如何从一个开源项目入手,循序渐进的学习开发,乃至有详尽的"Hacking"的实例. 本书最大的特色就是其本身也是开源的,代码托管在GitHub上,是由国内开源活跃人士庄表伟发起,有多人共同开发. 在书的开始,作者明确了本书的读者以及学习软件,学习开源软件的开发的几个前提条件,以及诠释了古希腊太阳庙神殿的铭语"认识你自己!",不是所有人都适

JNI/NDK开发指南(一)—— JNI开发流程及HelloWorld

转载请注明出处:http://blog.csdn.net/xyang81/article/details/41777471 JNI全称是Java Native Interface(Java本地接口)单词首字母的缩写,本地接口就是指用C和C++开发的接口.由于JNI是JVM规范中的一部份,因此可以将我们写的JNI程序在任何实现了JNI规范的Java虚拟机中运行.同时,这个特性使我们可以复用以前用C/C++写的大量代码. 开发JNI程序会受到系统环境的限制,因为用C/C++语言写出来的代码或模块,编

全志A33 lichee 搭建Qt App开发环境编写helloworld

开发平台 芯灵思SinlinxA33开发板 淘宝店铺: [https://sinlinx.taobao.com/]() 嵌入式linux 开发板交流 QQ:641395230 Step 1 在虚拟机(CentOS7)上安装Qt Creator 将qt-creator-opensource-linux-x86_64-3.5.1.run 拷贝到虚拟机中,双击安装,全部点下一步即可. Step 2 Qt Creater 设置 打开Qt Creator (Applications->Programmin

学习python-20191203(1)Python Flask高级编程开发鱼书_第01章 Flask的基本原理与核心知识

视频01: 做一个产品时,一定要对自己的产品有一个明确的定位.并可以用一句话来概括自己产品的核心价值或功能. 鱼书网站几个功能 1.选择要赠送的书籍,向他人赠送书籍(价值功能,核心价值的主线): 2.书籍搜索(价值辅助功能): 3.选择自己想要的书籍,向他人索要书箱(价值辅助功能). ———————————————————————————————————————————————————————————— 视频02: 一.开始flask项目的步骤: 1.安装python环境: 2.检验python

WinForm项目开发傻瓜教程

开发环境:Win7 64Bit简体中文版,VS2012简体中文版. 主要内容: 登录页面与主页面 背景资源的使用 控件程序集 制作安装包 打开VS2012,选择文件|新建|项目,弹出新建项目对话框: 注:项目是一个实体,可以是一个执行文件,一个程序集,解决方案就是若干个项目的集合,如果只想做一个简单的工具,只有一个项目,可以把为解决方案创建目录去掉,可以省掉一集目录:本例子的解决方案中有一个执行程序,两个程序集,所以要选上,项目名称与解决方案名称也可以不一样. 点击确定之后,项目就生成了. 生成