Alljoyn 概述(3)
开发工具
• scons:一个 Python写的自动化构建工具,是对 gnu make 改进的替代工具
• D-Feet:一个D-Bus调试工具
• C++ Code Generator Tool (ajcppgen)
– 根据 service interface 定义自动生成 C++ 框架代码的工具
– 输入是XML文件,描述 service object(s) and interface(s)
– 输出是C++ 文件,包括 service 端和 client 端
Ubuntu下 AllJoyn源码编译方法
• 预先准备工作:
– 成功编译过的完整 Android源码,假设路径为 /home/zhuangwf/android/
– 安装 JDK 1.6,假设安装到 /usr/java/jdk1.6.0_30/
– 设置如下环境变量(可加到 /etc/profile 或 ~/.bashrc 中):
export JAVA_HOME=/usr/java/jdk1.6.0_30
export CLASSPATH=JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar:/home/zhuangwf/android/out/host/linux-x86/framework/junit.jar
export PATH=JAVAHOME/bin:PATH
– 安装 Android NDK r7,假设安装路径为 /home/zhuangwf/android-ndk-r7/
– 安装 scons:apt-get install scons
– 安装 uncrustify (版本0.57 is OK)
– AllJoyn源码,假设路径为 /home/zhuangwf/alljoyn/
• 编译源码的命令:
scons OS=android CPU=arm ANDROID_NDK=/home/zhuangwf/android-ndk-r7/ ANDROID_SRC=/home/zhuangwf/android/ ANDROID_TARGET=generic WS=off
Ubuntu下AllJoyn sample app编译和运行方法
• 预先准备工作:
– 安装 eclipse 和 Android SDK
• 编译 sample应用程序:
– sample app 有C++写的(带java写的UI) 也有纯 Java 写的,其中 Java sample app 源码位于 /home/zhuangwf/alljoyn/alljoyn_java/samples/android/,经实际验证OK
– 用 eclipse 编译 sample app
• 运行 sample app方法:
– 安装 sample app 之 .apk 到各设备上
– adb push /home/zhuangwf/alljoyn/build/android/arm/debug/dist/bin/alljoyn-daemon
到各设备上
– 各设备连接 WiFi
– 在各设备 adb shell 下运行:alljoyn-daemon –internal –fork
– 在各设备上运行 sample app
AllJoyn应用案例
• NearVerse 公司,在其产品 LoKast 的 Android 版本上 使用了 Alljoyn 技术
• Aliph公司,音乐共享软件JamJoyn
• 一些 multi-player游戏:例如 QwikDraw、Spudball
• 国内公司:
– Tencent QQ Chat & Contact Share
– A-One Gaming
– Tapas Business Card Sharing
– DuoMi Music
– AliPay by Alibaba
• 此外,高通已在其参考设计 Qualcomm Reference Design (QRD)上将 AllJoyn集成到 Android中,作为 缺省的功能提供给设备制造商和应用开发者
存在的问题
• AllJoyn只 供了一个基本的通用的P2P框架,没有供针对特定应用类型的profile,例如象 DLNA 那样专门面向媒体应用的框架或者象 bluetooth 那样供各种应用profile,需应用程序自己实现
• AllJoyn框架中未定义类似于 UPnP 的设备 述、服务 述机制,service的命名、方法的定义等也都没有统一 的规范和标准,均需由应用程序自行约定(因此 service端和 client端应用程序需由同一开发者开发维 护)
• 在企业办公环境中因 WiFi AP 往往被设为禁止转发 IP 组播包,因而 AllJoyn 设备发现失效(其他类似技术例 如UPnP也存在同样问题)
• AllJoyn 主要解决设备发现和连接,比较适合基于简单 数据传输的控制类应用,不适合实时大数据量传输应用 (例如流媒体),对这类应用需与其他技术相结合。