ถึงแม้ว่าปัจจุบันเราจะเห็น Intel AppUp Center มีแอพลิเคชันสำหรับระบบปฏิบัติการวินโดวส์เสียเป็นส่วนใหญ่ นอกจากวินโดวส์แล้ว Intel AppUp Center ยังต้องการต้องการวางตัวเองให้เป็นตลาดแอพลิเคชันบนหลายแพลตฟอร์มที่ใช้แพลตฟอร์มฮาร์ดแวร์ของอินเทลไปพร้อมๆ กัน โดยช่วงนี้ที่กำลังจะวางตลาดก็คือแท็บเล็ต MeeGo ที่จะเริ่มเปิดตัวในปลายปีนี้
เนื่องจากแอพลิเคชันสำหรับแท็บเล็ต MeeGo นั้นยังมีไม่มาก จึงเป็นโอกาสดีของนักพัฒนาที่ต้องการพัฒนาแอพลิเคชันสำหรับอุปกรณ์แบบพกพา แต่ไม่ต้องการต่อสู้กับคู่แข่งจำนวนมากในแพลตฟอร์มอื่นๆ นอกจากนี้เนื่องจากเป็นช่วงเริ่มต้น ทางอินเทลจึงมีโครงการอัดฉีดนักพัฒนา ด้วยการแจกรางวัลต่างๆ มากมาย
สำหรับแอพลิเคชันที่จะส่งเข้า Intel AppUp Center สำหรับระบบปฏิบัติการ MeeGo นั้นจะพัฒนาด้วยอะไรก็ได้ ขอเพียงแต่ให้แอพลิเคชันเรียกใช้ AppUp SDK เพื่อตรวจสอบสิทธิ์การใช้งาน และจัดชุดติดตั้งแอพลิเคชันให้อยู่ในรูปแบบ RPM ตามข้อตกลงที่กำหนดเท่านั้น
อย่างไรก็ตาม เนื่องจากในตอนที่ผ่านมา เราได้พัฒนาแอพลิเคชันบนระบบปฏิบัติการ MeeGo อย่างง่ายๆ ด้วย Qt Quick กันไปแล้ว ดังนั้นในตอนนี้เราจะนำแอพลิเคชันที่พัฒนาด้วย Qt Quick มาเตรียมส่งเข้า Intel AppUp Center กัน
สำหรับการพัฒนาแอพลิเคชันสำหรับ Intel AppUp Center นั้น เราจะต้องเรียกใช้คำสั่งจาก AppUp SDK เพิ่มอีกเล็กน้อย เพื่อให้แอพลิเคชันของเราสามารถตรวจดูสิทธิ์การใช้งานของผู้ใช้ และรวบรวมข้อมูลต่างๆ กลับมายัง Intel AppUp Center ได้
ขั้นตอนการเตรียมแอพลิเคชันสำหรับ Intel AppUp Center สำหรับ MeeGo หลักๆ นั้นมีดังนี้
ปัจจุบัน AppUp SDK สำหรับ MeeGo นั้นยังมีเฉพาะสำหรับผู้พัฒนาบนระบบปฏิบัติการวินโดวส์เท่านั้น โดยสามารถดาวน์โหลดได้ที่หน้าดาวน์โหลดเครื่องมือสำหรับ MeeGo
เมื่อติดตั้งแล้ว อย่าลืมรีสตาร์ทเครื่องก่อนเริ่มขั้นตอนต่อไป
เราจะต้องเพิ่มไลบรารีของ AppUp SDK เข้าไปในโปรเจกต์ โดย
เปิดไฟล์โปรเจกต์ของ Qt Creator (ไฟล์ *.pro) แล้วเพิ่มการตั้งค่าต่อไปนี้
{syntaxhighlighter brush:plain}
INCLUDEPATH += "$$(IADP_SDK_DIR_MEEGO)Cpp/include"
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"
{/syntaxhighlighter}
เลือกโหมด Projects จากแถบซ้ายมือ ที่ส่วนการตั้งค่า MeeGo Build ให้นำเครื่องหมายถูกในหัวข้อ Shadow build ออก เนื่องจาก AppUp SDK ยังไม่สนับสนุนความสามารถนี้
AppUp SDK จะอำนวยความสะดวกให้นักพัฒนาแอพลิเคชันในการตรวจสอบผู้ใช้ว่ามีสิทธิ์ใช้โปรแกรมหรือไม่ (ได้ซื้อแอพลิเคชันของเราอย่างถูกต้องหรือไม่) รวมทั้งติดตามข้อผิดพลาดของแอพลิเคชันเพื่อรายงานกลับมาให้นักพัฒนาทราบ อย่างไรก็ตาม ในบทความนี้จะยกตัวอย่างเฉพาะส่วนที่จำเป็นต้องมีในแอพลิเคชันเท่านั้น นั่นคือส่วนตรวจสอบผู้ใช้ โดยเปิดไฟล์ Sources/main.cpp แล้วแก้ไขซอร์สโค้ดตามด้านล่าง โดยอ่านคำอธิบายการทำงานได้จากคอมเมนต์ในซอร์สโค้ด
ดูรายละเอียดเกี่ยวกับการใช้งาน AppUp SDK เพิ่มเติมได้จากบทความ ทำความรู้จักกับ AppUp SDK, เริ่มต้นพัฒนาแอพลิเคชันลง Intel AppUp Center และเอกสารของ AppUp SDK
{syntaxhighlighter brush: cpp}
// เพิ่ม Header file ของ Intel AppUp Center
// ระบุหมายเลขแอพลิเคชัน ซึ่งต้องระบุในการใช้งาน AppUp SDK
// ในการทดสอบเบื้องต้น สามารถใช้หมายเลขแอพลิเคชันสำหรับทดสอบก่อนได้
const com::intel::adp::ApplicationId APPLICATION_ID = ADP_DEBUG_APPLICATIONIDว
// เมื่อลงทะเบียนแอพลิเคชันใน Intel AppUp Center แล้ว จะต้องสร้างแอพลิเคชันที่ใช้หมายเลขแอพลิเคชันจริง โดยเปลี่ยนซอร์สโค้ดด้านบนเป็นนี้ (อย่าลืมแก้ไขหมายเลขแอพลิเคชัน)
// const com::intel::adp::ApplicationId APPLICATION_ID = ApplicationId(0x01234567, 0x89ABCDEF, 0x02468ACE, 0x13579BDF);
int main(int argc, char *argv[]) {
bool isAuthorized = false;
QString errorMessage;
com::intel::adp::Application *pApp = NULL;
// ทดสอบว่าผู้ใช้มีสิทธิ์เปิดแอพลิเคชันหรือไม่ (ซื้อแอพลิเคชันของเราหรือยัง)
try {
pApp = new Application(APPLICATION_ID);
isAuthorized = true;
}
catch (com::intel::adp::AdpException& e) {
message = QString::fromAscii(e.message());
isAuthorized = false;
}
if (pApp != NULL) {
delete pApp;
}
if (isAuthorized) {
// เปิดแอพลิเคชันได้ (ส่วนนี้ใช้ซอร์สโค้ดเดิมจาก QtCreator)
QApplication app(argc, argv);
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/hellomeego/main.qml"));
viewer.showExpanded();
return app.exec();
}
else {
// ผู้ใช้ไม่มีสิทธิ์เปิดแอพลิเคชัน แสดงข้อความแจ้งผู้ใช้ก่อนจบแอพลิเคชัน
QMessageBox messageBox(QMessageBox::Information, "Error", message, QMessageBox::Ok);
messageBox.exec();
return false;
}
}
{/syntaxhighlighter}
เนื่องจากในข้อตกลงการส่งแอพลิเคชันของ Intel AppUp Center กำหนดให้โปรแกรมที่ส่งเข้ามาต้องติดตั้งในไดเรกทอรี /opt/{ชื่อแพคเกจของแอพลิเคชัน} เราจะตั้งค่าโปรเจกต์ให้ไปติดตั้งในตำแหน่งดังกล่าว ดังนี้
เปิดไฟล์ qmlapplicationviewer/qmlapplicationviewer.pri จากนั้นแก้ไขซอร์สโค้ดที่กำหนดค่าตัวแปร installPrefix ของระบบปฏิบัติการ unix จาก
{syntaxhighlighter brush:cpp first-line:104 highlight:109}
} else:unix {
maemo5 {
installPrefix = /opt/usr
desktopfile.path = /usr/share/applications/hildon
} else {
installPrefix = /usr/local
desktopfile.path = /usr/share/applications
{/syntaxhighlighter}
เป็น
{syntaxhighlighter brush:cpp first-line:104 highlight:109}
} else:unix {
maemo5 {
installPrefix = /opt/usr
desktopfile.path = /usr/share/applications/hildon
} else {
installPrefix = /opt/{ชื่อแพคเกจของแอพลิเคชัน}
desktopfile.path = /usr/share/applications
{/syntaxhighlighter}
ตัวอย่างเช่น
{syntaxhighlighter brush:cpp first-line:104 highlight:109}
} else:unix {
maemo5 {
installPrefix = /opt/usr
desktopfile.path = /usr/share/applications/hildon
} else {
installPrefix = /opt/com.blognone.reader
desktopfile.path = /usr/share/applications
{/syntaxhighlighter}
แก้ไขไฟล์ Other files/*.desktop และแก้ไขซอร์สโค้ด จาก
{syntaxhighlighter brush:plain first-line:7 highlight:7}
Exec=/opt/usr/bin/qml-ui-app
{/syntaxhighlighter}
เป็น
{syntaxhighlighter brush:plain first-line:7 highlight:7}
Exec=/opt/{ชื่อแพคเกจของแอพลิเคชัน}/bin/qml-ui-app
{/syntaxhighlighter}
ตัวอย่างเช่น
{syntaxhighlighter brush:plain first-line:7 highlight:7}
Exec=/opt/com.blognone.reader/bin/qml-ui-app
{/syntaxhighlighter}
แก้ไขซอร์สโค้ดของแอพลิเคชัน เพื่อให้เก็บไฟล์ต่างๆ ถูกตำแหน่งตามที่กำหนด ดังนี้
เนื่องจากในข้อตกลงการส่งแอพลิเคชันเข้าสู่ Intel AppUp Center กำหนดให้โปรแกรมที่ส่งเข้ามาต้องมีไอคอนรูปแบบ PNG หรือ SVG ขนาด 16x16, 32x32, 64x64 และ 128x128 พร้อมทั้งตั้งค่าไฟล์ *.desktop ให้ชี้ไปยังไอคอนนั้น เราจึงต้องเตรียมไฟล์พวกนี้ไว้ด้วย โดย
เปิดไฟล์ Other files/*.desktop จากนั้นแก้ไข/เพิ่มข้อมูลต่อไปนี้ (สำหรับฟิลด์ Categories สามารถเลือกหมวดหมู่ที่ต้องการได้จากมาตรฐานของ freedesktop.org)
{syntaxhighlighter brush:plain}
[Desktop Entry]
Encoding=UTF-8
Version={ใช้ 1.0 เหมือนเดิม (เป็นเวอร์ชันของไฟล์นี้ ไม่ใช่เวอร์ชันของแอพลิเคชัน)}
Name={ชื่อแอพลิเคชัน}
GenericName={ชื่อแอพลิเคชัน}
Comment={คำอธิบายแอพลิเคชันอย่างสั้นๆ}
Exec={แก้ไขไปแล้วในขั้นตอนที่ 4}
Categories={หมวดหมู่ของแอพลิเคชัน}
Icon={ชื่อไอคอน จะระบุเฉพาะชื่อโดยไม่ใส่นามสกุล หรือระบุที่อยู่เต็มก็ได้}
Type=Application
Terminal=false
StartupNotify=true
{/syntaxhighlighter}
ตัวอย่างเช่น
{syntaxhighlighter brush:plain}
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Name=Blognone Reader
GenericName=Blognone Reader
Comment=Tech news from Blognone
Exec=/opt/com.blognone.reader/
Categories=Accessories
Icon=blognone-reader
Type=Application
Terminal=false
StartupNotify=true
{/syntaxhighlighter}
เปิดไฟล์โปรเจกต์ของ Qt Creator (ไฟล์ *.pro) แล้วเพิ่มการตั้งค่าต่อไปนี้
{syntaxhighlighter brush:plain}
target.path = /opt/{ชื่อแพคเกจของแอพลิเคชัน}/
icon.files = hellomeego.svg
icon.path = /usr/share/icons
icon16.files = icons/16x16/hellomeego.svg
icon16.path = /usr/share/icons/hicolor/16x16/apps
icon32.files = icons/32x32/hellomeego.svg
icon32.path = /usr/share/icons/hicolor/32x32/apps
icon64.files = icons/64x64/hellomeego.svg
icon64.path = /usr/share/icons/hicolor/64x64/apps
icon128.files = icons/128x128/hellomeego.svg
icon128.path = /usr/share/icons/hicolor/128x128/apps
desktop.files = hellomeego.desktop
desktop.path = /usr/share/applications
desktop.files = hellomeego.desktop
desktop.path = /usr/share/applications
INSTALLS += target icon16 icon32 icon64 icon128 desktop
{/syntaxhighlighter}
หากมีไฟล์อื่นๆ ที่จำเป็นต้องใช้ในแอพลิเคชัน ให้เพิ่มข้อมูลในไฟล์นี้เข้าไปด้วยเช่นเดียวกัน โดยให้ไฟล์นี้อยู่ในไดเรกทอรี /etc/opt/{ชื่อแพคเกจของแอพลิเคชัน}
คัดลอกไฟล์ไอคอนเข้ามาในโปรเจกต์
ในการสร้างชุดติดตั้งแบบ RPM นั้นจำเป็นต้องมีไฟล์ spec อยู่ในชุดติดตั้ง ดังนั้นเราจะเพิ่มไฟล์ spec โดยสร้างไฟล์ชื่อ spec ในโฟลเดอร์โปรเจกต์ และแก้ไขข้อมูลเบื้องต้น
{syntaxhighlighter brush:plain}
# Define package name
%define app_name com.blognone.reader
Name: blognone-reader
Version: 0.1
Release: 1
License: Intel
Summary: News reader from blognone.com
Url: http://www.blognone.com
Group: Applications/Productivity
Requires: libqt >= 4.7.0
%description
News reader from blognone.com
%prep
%setup -q
%build
# Add commands here 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
{/syntaxhighlighter}
สำหรับรายละเอียดการสร้างไฟล์ spec ดูรายละเอียดเพิ่มเติมได้จากวิกิของ MeeGo หรือบทความการสร้างแพคเกจ RPM
ในการทดสอบแอพลิเคชันนั้น เราจะต้องติดตั้งแอพลิเคชัน AppUp Center บนแท็บเล็ต MeeGo ก่อน ดังนี้
เปิดเทอร์มินัลในแท็บเล็ต MeeGo จากนั้นพิมพ์คำสั่งต่อไปนี้ (รหัสผ่านสำหรับผู้ใช้ root คือ meego)
{syntaxhighlighter brush:bash}
su
rpm -i Downloads/com.intel.appup-tablet-2.5.22438.27-1.1.i586.rpm
exit
{/syntaxhighlighter}
ดีบั๊กแอพลิเคชันลงในแท็บเล็ตตามปกติ โดยแอพลิเคชันควรจะเริ่มทำงานได้ตามปกติ
เมื่อทุกอย่างเรียบร้อยแล้วก็ส่งแอพลิเคชันเข้าสู่ Intel AppUp Center ได้แล้ว โดย
เมื่อสร้างแอพลิเคชันในระบบเรียบร้อยแล้ว นำหมายเลข GUID มาใส่เป็นหมายเลขแอพลิเคชันสำหรับ AppUp SDK (ดูบรรทัดที่ 12 ของซอร์สโค้ดในขั้นตอนที่ 3)
สั่ง deploy โปรเจกต์เพื่อสร้างชุดติดตั้ง โดยเรียกเมนู Build > Deploy Project
สำหรับขั้นตอนการส่งแอพลิเคชันต่อจากนี้สามารถอ่านได้ในบทความ แนะนำขั้นตอนส่งแอพลิเคชันเข้า Intel AppUp Center
บทความในชุด Intel AppUp Developer Program เป็นบทความที่ได้รับการสนับสนุนจากบริษัทอินเทล ไมโครอิเล็กทรอนิกส์ (ประเทศไทย) จำกัดเพื่อสนับสนุนให้นักพัฒนาสามารถเข้าร่วมกับ Intel AppUp Center ได้ง่ายยิ่งขึ้น ท่านสามารถเข้าดูข้อมูลเพิ่มเติมของโครงการได้ที่ Intel AppUp Developer Program
Comments
เป็น C++ ?
เฉพาะตอนเช็คสิทธิ์ผู้ใช้ตอนแรกครับ ถ้าเช็คผ่านมันก็จะไปเรียกส่วนที่เขียนด้วย QML มาทำงานตามปกติ
Meego นี่มันจะโกจริงเหรอ