Tags:
MeeGo

ถึงแม้ว่าปัจจุบันเราจะเห็น Intel AppUp Center มีแอพลิเคชันสำหรับระบบปฏิบัติการวินโดวส์เสียเป็นส่วนใหญ่ นอกจากวินโดวส์แล้ว Intel AppUp Center ยังต้องการต้องการวางตัวเองให้เป็นตลาดแอพลิเคชันบนหลายแพลตฟอร์มที่ใช้แพลตฟอร์มฮาร์ดแวร์ของอินเทลไปพร้อมๆ กัน โดยช่วงนี้ที่กำลังจะวางตลาดก็คือแท็บเล็ต MeeGo ที่จะเริ่มเปิดตัวในปลายปีนี้

เนื่องจากแอพลิเคชันสำหรับแท็บเล็ต MeeGo นั้นยังมีไม่มาก จึงเป็นโอกาสดีของนักพัฒนาที่ต้องการพัฒนาแอพลิเคชันสำหรับอุปกรณ์แบบพกพา แต่ไม่ต้องการต่อสู้กับคู่แข่งจำนวนมากในแพลตฟอร์มอื่นๆ นอกจากนี้เนื่องจากเป็นช่วงเริ่มต้น ทางอินเทลจึงมีโครงการอัดฉีดนักพัฒนา ด้วยการแจกรางวัลต่างๆ มากมาย

หน้าตาของ Intel AppUp Center รุ่นสำหรับแท็บเล็ต MeeGo

สำหรับแอพลิเคชันที่จะส่งเข้า Intel AppUp Center สำหรับระบบปฏิบัติการ MeeGo นั้นจะพัฒนาด้วยอะไรก็ได้ ขอเพียงแต่ให้แอพลิเคชันเรียกใช้ AppUp SDK เพื่อตรวจสอบสิทธิ์การใช้งาน และจัดชุดติดตั้งแอพลิเคชันให้อยู่ในรูปแบบ RPM ตามข้อตกลงที่กำหนดเท่านั้น

อย่างไรก็ตาม เนื่องจากในตอนที่ผ่านมา เราได้พัฒนาแอพลิเคชันบนระบบปฏิบัติการ MeeGo อย่างง่ายๆ ด้วย Qt Quick กันไปแล้ว ดังนั้นในตอนนี้เราจะนำแอพลิเคชันที่พัฒนาด้วย Qt Quick มาเตรียมส่งเข้า Intel AppUp Center กัน

การเตรียมแอพลิเคชันสำหรับส่งเข้า Intel AppUp Center

สำหรับการพัฒนาแอพลิเคชันสำหรับ Intel AppUp Center นั้น เราจะต้องเรียกใช้คำสั่งจาก AppUp SDK เพิ่มอีกเล็กน้อย เพื่อให้แอพลิเคชันของเราสามารถตรวจดูสิทธิ์การใช้งานของผู้ใช้ และรวบรวมข้อมูลต่างๆ กลับมายัง Intel AppUp Center ได้

ขั้นตอนการเตรียมแอพลิเคชันสำหรับ Intel AppUp Center สำหรับ MeeGo หลักๆ นั้นมีดังนี้

  1. ติดตั้ง AppUp SDK สำหรับ MeeGo
  2. ตั้งค่าโปรเจกต์
  3. เพิ่มการเรียกใช้ AppUp SDK
  4. แก้ไขที่อยู่ที่จะใช้ติดตั้งโปรแกรม และที่อยู่ของไฟล์ต่างๆ ในแอพลิเคชัน
  5. เพิ่มไฟล์ไอคอน และข้อมูลเกี่ยวกับแอพลิเคชัน
  6. เพิ่มไฟล์ spec
  7. ทดสอบแอพลิเคชัน
  8. ส่งแอพลิเคชัน

ขั้นตอนที่ 1 ติดตั้ง AppUp SDK สำหรับ MeeGo

ปัจจุบัน AppUp SDK สำหรับ MeeGo นั้นยังมีเฉพาะสำหรับผู้พัฒนาบนระบบปฏิบัติการวินโดวส์เท่านั้น โดยสามารถดาวน์โหลดได้ที่หน้าดาวน์โหลดเครื่องมือสำหรับ MeeGo

เมื่อติดตั้งแล้ว อย่าลืมรีสตาร์ทเครื่องก่อนเริ่มขั้นตอนต่อไป

ขั้นตอนที่ 2 ตั้งค่าโปรเจกต์

เราจะต้องเพิ่มไลบรารีของ AppUp SDK เข้าไปในโปรเจกต์ โดย

  1. เปิดไฟล์โปรเจกต์ของ Qt Creator (ไฟล์ *.pro) แล้วเพิ่มการตั้งค่าต่อไปนี้

    # Add path to Intel 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"
    
  2. เลือกโหมด Projects จากแถบซ้ายมือ ที่ส่วนการตั้งค่า MeeGo Build ให้นำเครื่องหมายถูกในหัวข้อ Shadow build ออก เนื่องจาก AppUp SDK ยังไม่สนับสนุนความสามารถนี้

ขั้นตอนที่ 3 เพิ่มการเรียกใช้ AppUp SDK

AppUp SDK จะอำนวยความสะดวกให้นักพัฒนาแอพลิเคชันในการตรวจสอบผู้ใช้ว่ามีสิทธิ์ใช้โปรแกรมหรือไม่ (ได้ซื้อแอพลิเคชันของเราอย่างถูกต้องหรือไม่) รวมทั้งติดตามข้อผิดพลาดของแอพลิเคชันเพื่อรายงานกลับมาให้นักพัฒนาทราบ อย่างไรก็ตาม ในบทความนี้จะยกตัวอย่างเฉพาะส่วนที่จำเป็นต้องมีในแอพลิเคชันเท่านั้น นั่นคือส่วนตรวจสอบผู้ใช้ โดยเปิดไฟล์ Sources/main.cpp แล้วแก้ไขซอร์สโค้ดตามด้านล่าง โดยอ่านคำอธิบายการทำงานได้จากคอมเมนต์ในซอร์สโค้ด

ดูรายละเอียดเกี่ยวกับการใช้งาน AppUp SDK เพิ่มเติมได้จากบทความ ทำความรู้จักกับ AppUp SDK, เริ่มต้นพัฒนาแอพลิเคชันลง Intel AppUp Center และเอกสารของ AppUp SDK

#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"

// เพิ่ม Header file ของ Intel AppUp Center
#include "adpcppf.h"

// ระบุหมายเลขแอพลิเคชัน ซึ่งต้องระบุในการใช้งาน 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;
    }
}

ขั้นตอนที่ 4 แก้ไขที่อยู่ที่จะใช้ติดตั้งโปรแกรม และที่อยู่ของไฟล์ต่างๆ ในแอพลิเคชัน

เนื่องจากในข้อตกลงการส่งแอพลิเคชันของ Intel AppUp Center กำหนดให้โปรแกรมที่ส่งเข้ามาต้องติดตั้งในไดเรกทอรี /opt/{ชื่อแพคเกจของแอพลิเคชัน} เราจะตั้งค่าโปรเจกต์ให้ไปติดตั้งในตำแหน่งดังกล่าว ดังนี้

  1. เปิดไฟล์ qmlapplicationviewer/qmlapplicationviewer.pri จากนั้นแก้ไขซอร์สโค้ดที่กำหนดค่าตัวแปร installPrefix ของระบบปฏิบัติการ unix จาก

    } else:unix {
        maemo5 {
            installPrefix = /opt/usr
            desktopfile.path = /usr/share/applications/hildon
        } else {
            installPrefix = /usr/local
            desktopfile.path = /usr/share/applications
    

    เป็น

    } else:unix {
        maemo5 {
            installPrefix = /opt/usr
            desktopfile.path = /usr/share/applications/hildon
        } else {
            installPrefix = /opt/{ชื่อแพคเกจของแอพลิเคชัน}
            desktopfile.path = /usr/share/applications
    

    ตัวอย่างเช่น

    } else:unix {
        maemo5 {
            installPrefix = /opt/usr
            desktopfile.path = /usr/share/applications/hildon
        } else {
            installPrefix = /opt/com.blognone.reader
            desktopfile.path = /usr/share/applications
    
  2. แก้ไขไฟล์ Other files/*.desktop และแก้ไขซอร์สโค้ด จาก

    Exec=/opt/usr/bin/qml-ui-app
    

    เป็น

    Exec=/opt/{ชื่อแพคเกจของแอพลิเคชัน}/bin/qml-ui-app
    

    ตัวอย่างเช่น

    Exec=/opt/com.blognone.reader/bin/qml-ui-app
    
  3. แก้ไขซอร์สโค้ดของแอพลิเคชัน เพื่อให้เก็บไฟล์ต่างๆ ถูกตำแหน่งตามที่กำหนด ดังนี้

    • ไฟล์ล็อก หรือไฟล์แคช เก็บไว้ที่ /var/opt/{ชื่อแพคเกจของแอพลิเคชัน}
    • ไฟล์ตั้งค่าสำหรับใช้ทั้งเครื่อง เก็บไว้ที่ /etc/opt/{ชื่อแพคเกจของแอพลิเคชัน}
    • ไฟล์ตั้งค่าสำหรับผู้ใช้แต่ละคน เก็บไว้ที่ ~/.config/{ชื่อแพคเกจของแอพลิเคชัน}

ขั้นตอนที่ 5 เพิ่มไฟล์ไอคอน และข้อมูลเกี่ยวกับแอพลิเคชัน

เนื่องจากในข้อตกลงการส่งแอพลิเคชันเข้าสู่ Intel AppUp Center กำหนดให้โปรแกรมที่ส่งเข้ามาต้องมีไอคอนรูปแบบ PNG หรือ SVG ขนาด 16x16, 32x32, 64x64 และ 128x128 พร้อมทั้งตั้งค่าไฟล์ *.desktop ให้ชี้ไปยังไอคอนนั้น เราจึงต้องเตรียมไฟล์พวกนี้ไว้ด้วย โดย

  1. เปิดไฟล์ Other files/*.desktop จากนั้นแก้ไข/เพิ่มข้อมูลต่อไปนี้ (สำหรับฟิลด์ Categories สามารถเลือกหมวดหมู่ที่ต้องการได้จากมาตรฐานของ freedesktop.org)

    [Desktop Entry]
    Encoding=UTF-8
    Version={ใช้ 1.0 เหมือนเดิม (เป็นเวอร์ชันของไฟล์นี้ ไม่ใช่เวอร์ชันของแอพลิเคชัน)}
    Name={ชื่อแอพลิเคชัน}
    GenericName={ชื่อแอพลิเคชัน}
    Comment={คำอธิบายแอพลิเคชันอย่างสั้นๆ}
    Exec={แก้ไขไปแล้วในขั้นตอนที่ 4}
    Categories={หมวดหมู่ของแอพลิเคชัน}
    Icon={ชื่อไอคอน จะระบุเฉพาะชื่อโดยไม่ใส่นามสกุล หรือระบุที่อยู่เต็มก็ได้}
    Type=Application
    Terminal=false
    StartupNotify=true
    

    ตัวอย่างเช่น

    [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
    
  2. เปิดไฟล์โปรเจกต์ของ Qt Creator (ไฟล์ *.pro) แล้วเพิ่มการตั้งค่าต่อไปนี้

    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
    

    หากมีไฟล์อื่นๆ ที่จำเป็นต้องใช้ในแอพลิเคชัน ให้เพิ่มข้อมูลในไฟล์นี้เข้าไปด้วยเช่นเดียวกัน โดยให้ไฟล์นี้อยู่ในไดเรกทอรี /etc/opt/{ชื่อแพคเกจของแอพลิเคชัน}

  3. คัดลอกไฟล์ไอคอนเข้ามาในโปรเจกต์

ขั้นตอนที่ 6 เพิ่มไฟล์ spec

ในการสร้างชุดติดตั้งแบบ RPM นั้นจำเป็นต้องมีไฟล์ spec อยู่ในชุดติดตั้ง ดังนั้นเราจะเพิ่มไฟล์ spec โดยสร้างไฟล์ชื่อ spec ในโฟลเดอร์โปรเจกต์ และแก้ไขข้อมูลเบื้องต้น

<pre>{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 &gt;= 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}</pre>

สำหรับรายละเอียดการสร้างไฟล์ spec ดูรายละเอียดเพิ่มเติมได้จากวิกิของ MeeGo หรือบทความการสร้างแพคเกจ RPM

ขั้นตอนที่ 7 ทดสอบแอพลิเคชัน

ในการทดสอบแอพลิเคชันนั้น เราจะต้องติดตั้งแอพลิเคชัน AppUp Center บนแท็บเล็ต MeeGo ก่อน ดังนี้

  1. ดาวน์โหลดไฟล์ติดตั้ง AppUp Center โดยใช้เว็บเบราว์เซอร์ในแท็บเล็ต MeeGo
  2. เปิดเทอร์มินัลในแท็บเล็ต MeeGo จากนั้นพิมพ์คำสั่งต่อไปนี้ (รหัสผ่านสำหรับผู้ใช้ root คือ meego)

    su
    rpm -i Downloads/com.intel.appup-tablet-2.5.22438.27-1.1.i586.rpm
    exit
    
  3. ดีบั๊กแอพลิเคชันลงในแท็บเล็ตตามปกติ โดยแอพลิเคชันควรจะเริ่มทำงานได้ตามปกติ

ขั้นตอนที่ 8 ส่งแอพลิเคชัน

เมื่อทุกอย่างเรียบร้อยแล้วก็ส่งแอพลิเคชันเข้าสู่ Intel AppUp Center ได้แล้ว โดย

  1. เข้าไปยังหน้าแดชบอร์ดของนักพัฒนา จากนั้นกดปุ่ม Start A New Application เพื่อสร้างแอพลิเคชันใหม่
  2. เมื่อสร้างแอพลิเคชันในระบบเรียบร้อยแล้ว นำหมายเลข GUID มาใส่เป็นหมายเลขแอพลิเคชันสำหรับ AppUp SDK (ดูบรรทัดที่ 12 ของซอร์สโค้ดในขั้นตอนที่ 3)

    หน้าแดชบอร์ดเมื่อสร้างแอพลิเคชัน และได้ GUID แล้ว

  3. สั่ง deploy โปรเจกต์เพื่อสร้างชุดติดตั้ง โดยเรียกเมนู Build > Deploy Project

  4. เข้าไปยังไดเรกทอรีที่เก็บโปรเจกต์ ในไดเรกทอรีย่อย rrpmbuild จะมีไฟล์ RPM ซึ่งเป็นชุดติดตั้งของแอพลิเคชันที่จะใช้ส่งเข้าสู่ Intel AppUp Center ให้คัดลอกและเปลี่ยนชื่อเป็น {ชื่อแพคเกจของแอพลิเคชัน}.rpm ตัวอย่างเช่น com.blognone.reader.rpm จากนั้นจึงนำไปส่งในระบบต่อไป

สำหรับขั้นตอนการส่งแอพลิเคชันต่อจากนี้สามารถอ่านได้ในบทความ แนะนำขั้นตอนส่งแอพลิเคชันเข้า Intel AppUp Center

ลิงก์ที่น่าสนใจ

บทความก่อนหน้า

บทความในชุด Intel AppUp Developer Program เป็นบทความที่ได้รับการสนับสนุนจากบริษัทอินเทล ไมโครอิเล็กทรอนิกส์ (ประเทศไทย) จำกัดเพื่อสนับสนุนให้นักพัฒนาสามารถเข้าร่วมกับ Intel AppUp Center ได้ง่ายยิ่งขึ้น ท่านสามารถเข้าดูข้อมูลเพิ่มเติมของโครงการได้ที่ Intel AppUp Developer Program

Comments

By: nextman13
Ubuntu
nextman13's blog
on 01/07/11 12:12 #306222 toggle
nextman13's picture

เป็น C++ ?


This is a pen.

By: champjss
ContributorAndroid
champjss's blog
on 02/07/11 1:48 #306566 Reply to:306222 toggle
champjss's picture

เฉพาะตอนเช็คสิทธิ์ผู้ใช้ตอนแรกครับ ถ้าเช็คผ่านมันก็จะไปเรียกส่วนที่เขียนด้วย QML มาทำงานตามปกติ

By: hikid
iPhoneBlackberry
hikid's blog
on 08/07/11 17:14 #308742 toggle
hikid's picture

Meego นี่มันจะโกจริงเหรอ


หมดตัวกับ Gadget