原作者:bydmitry-rizshkov (米9网翻译,转载请注明出处)
您或许更愿意看原文。
本文将演示如何准备您的MeeGo应用程序,并通过Intel AppUp Center审核。本文项目案例来自我的另一篇文章Modern mobile applications with Qt and QML,将对代码不做任何变更。感谢Qt,使我们的Windows程序无需做任何变动,即可在meego上运行,所需的只是重新编译一次。
整合AppUp SDK
启动随MeeGo SDK一起安装的Qt Creator。如果你没有安装MeeGo SDK在这里下载。在这个页面你可以找到任何你需要的MeeGo应用程序开发工具。打开项目,打开项目文件(4Tooddler.pro)并添加以下几行代码:
引用
- # Add path to AppUp SDK headers directory
- INCLUDEPATH += "$(IADP_SDK_DIR_MEEGO)Cpp/include"
- # Add required libraries
- LIBS += -lxml2 -lpthread
- LIBS += "$(IADP_SDK_DIR_MEEGO)Cpp/lib/libadpruntime.a" / "$(IADP_SDK_DIR_MEEGO)Cpp/lib/libadpcore.a" / "$(IADP_SDK_DIR_MEEGO)Cpp/lib/libxerces-c.a" / "$(IADP_SDK_DIR_MEEGO)Cpp/lib/libxml-security-c.a" / "$(IADP_SDK_DIR_MEEGO)Cpp/lib/libcrypto.a"
下一步,打开main.cpp文件。加入AppUp SDK头文件。
- #include "adpcppf.h"
并添加新函数:
引用
- bool IsAuthorized()
- {
- #ifdef QT_DEBUG // Do not check authorization for debug version
- return true;
- #endif
- bool authorized = false;
- QString message;
- com::intel::adp::Application *pApp = NULL;
- try
- {
- pApp = new Application(ADP_DEBUG_APPLICATIONID);
- // Authorized successfully
- authorized = true;
- }
- catch (com::intel::adp::AdpException& e)
- {
- // Got some error
- message = QString::fromAscii(e.message());
- }
- if(pApp != NULL)
- {
- delete pApp;
- }
- if(authorized == false)
- {
- QMessageBox msgBox(QMessageBox::Information, "4 Toddler", message, QMessageBox::Ok); msgBox.exec();
- }
- return authorized;
- }
从main() 调用此函数:
引用
- if(IsAuthorized() == false) { // Quit application a.quit(); return 0; }
制作RPM包
把应用程序安装并运行在meego上我们需要构建RPM包。RPM包是一些二进制文件、图标、库文件以及程序信息的集合,你可以在www.rpm.org找到更多关于RPM包的相关信息。
AppUp对于制作RPM包有一些具体的要求,在这里有详细的描述(MeeGo Packaging and Compliance Guidelines)
首先我们需要制作一些PNG格式的图标,尺寸为:16x16, 32x32, 64x64, 和 128x128。
然后为我们的程序制作 .desktop 文件。这个文件包含着应用程序的分类、图标、二进制文件路径的信息。创建一个新的名为 4Toddler.desktop 的文件。
引用
- [Desktop Entry]
- Name=4 Toddler
- GenericName=4 Toddler
- Comment=4 Toddler
- application Exec=/opt/com.company.4toddler/4Toddler
- Categories=Games
- Icon=4toddler
- Type=Application
- Terminal=false
- StartupNotify=true
Name - specific name of the application
GenericName - generic name of the application
Comment - tooltip for the entry
Exec - path to program to execute, possibly with arguments
Categories - categories in which the entry should be shown in a menu. Information about all categories could be found here
Icon - icon file name
Type - type of desktop entry. Could be Application, Link or Directory
Terminal - whether the program runs in a terminal window
完整的关于.desktop文件的参数信息可以在这里找到。
下面我们对外部工程文件做一些修改,我们需要告诉Qt Creator哪个外部文件应该被打包到PRM文件中。
引用
- # Files to be packed and installed
- target.path = /opt/com.company.4toddler/
- icon.files = Icon/4toddler.png
- icon.path = /usr/share/icons/
- icon16.files = Icon/16/4toddler.png
- icon16.path = /usr/share/icons/hicolor/16x16/apps/
- icon32.files = Icon/32/4toddler.png
- icon32.path = /usr/share/icons/hicolor/32x32/apps/
- icon64.files = Icon/64/4toddler.png
- icon64.path = /usr/share/icons/hicolor/64x64/apps/
- icon128.files = Icon/128/4toddler.png
- icon128.path = /usr/share/icons/hicolor/128x128/apps/
- desktop.files = 4Toddler.desktop
- desktop.path = /usr/share/applications
- sounds.files = Sounds/*.wav
- sounds.path = /var/opt/com.company.4toddler/sounds/
- ui.files = UI/*.*
- ui.path = /var/opt/com.company.4toddler/UI/
- stars.files = UI/Stars/*.png
- stars.path = /var/opt/com.company.4toddler/UI/Stars/
- icons.files = UI/Icons/*.png
- icons.path = /var/opt/com.company.4toddler/UI/Icons/
- INSTALLS += target icon icon16 icon32 icon64 icon128 desktop sounds ui stars icons
为什么我选择 /opt/com.company.4toddler/ 目录存放二进制文件,而选择 /var/opt/com.company.4toddler/sounds/ 存放程序文件,这些在MeeGo Packaging and Compliance Guidelines都有详细描述。
最后一件事,我们应该在添加 一个spec 文件到我们的项目中,来指定哪些工程文件用来构建RPM包。添加新文件 4.Toddler.spec :
引用
- # Define package name
- %define app_name com.company.4toddler
- Name: 4toddler
- Version: 1.0.1
- Release: 1 License:
- Intel Summary: 4 Toddler Application
- Url: http://you_company_website.com
- Group: Amusements/Games
- Requires: libqt >= 4.7.0
- %description
- Application description
- %prep
- %setup -q
- %build
- # Add here commands to compile the package.
- make
- %install
- make install INSTALL_ROOT=%{buildroot}
- %files
- %defattr(-,root,root,-)
- /opt/%{app_name}
- %{_datadir}/applications/*.desktop
- %{_datadir}/icons/*.png
- %{_datadir}/icons/hicolor/16x16/apps/*.png
- %{_datadir}/icons/hicolor/32x32/apps/*.png
- %{_datadir}/icons/hicolor/64x64/apps/*.png
- %{_datadir}/icons/hicolor/128x128/apps/*.png /var/opt/
- %{app_name}/sounds/*.wav
- /var/opt/%{app_name}/UI/*.*
- /var/opt/%{app_name}/UI/Stars/*.*
- /var/opt/%{app_name}/UI/Icons/*.*
Name - package name. Name of your application
Version - software version
Release - package version
Url - Url to your application web site
Group - package group
Requires - package requirements
你可以从这里阅读到更多关于 spec 文件的信息。
正如你所看到的spec文件包含了几个部分,并以 % 标记开头。非常有趣的是%files 部分,在这部分你将指定所有安装文件的路径,如果你忘记包含某些文件的话,那么这些文件将不会被打包并安装。
提示:要确保所有文件都包含在RPM包中并且路径有效,你可以使用7-zip解压缩工具来查看。
大功告成!现在你的应用程序已准备好被安装到设备中并提交到intel AppUp center了。但是,在提交到com.companyname.appname.rpm 之前不要忘记重新命名你的RPM包。
相关链接:
MeeGo Packaging and Compliance Guidelines
Integrating the Intel AppUp™ SDK Suite in a MeeGo app
Building a MeeGo Application for AppUp using Windows Development Environment
Installing the MeeGo SDK for Windows
Packaging/Guidelines - MeeGo Wiki
Packaging/Tutorial - MeeGo Wiki
Desktop file specifications
http://www.rpm.org/max-rpm/index.html