Nie jesteś zalogowany/zarejestrowany na tej stronie. Prosimy zaloguj się lub zarejestruj. Aby się zarejestrować kliknij tutaj...


Ta strona korzysta z plików cookiesKorzystając z naszej strony internetowej wyrażasz zgodę na wykorzystanie przez nas plików cookies w celu zapewnienia Ci wygody podczas jej przeglądania.
Rozumiem. Nie pokazuj w przyszłości.
Panel użytkownika
     

Nie masz konta? Zarejestruj
Zapomniałeś hasła? Przypomnij

Forum Tizen OS!
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 2
 Anatomia "Hello World" - wstęp do programowania
1
Przyjaciel
Avatar użytkownika
Dołączył(a): 2010-06-18, 23:11
Online: 57d 23h 13m
Posty: 1925
Lokalizacja: Polska?
Podziękowań: 230
Podziękował: 12
Model: Wave&WaveM
Srebrny Puchar za osiągnięcia użytkownika Support: Srebrna gwiazda dla osób zaangażowanych w tworzenie forum. bada-os.info: Administrator oraz redaktor bloga bada-os.info
Napisane: 2012-05-21, 20:45 
[code]Autor: wit
Źródło: http://www.badadev.com/anatomy-of-hello-world-the-bada-way/
Tłumaczenie na podstawie Google Translatora, więc z góry przepraszam za błędy.[/code]

Każde środowisko potrzebuje aplikacji "Hello World!", która ma zobrazować jego działanie. Nie inaczej jest w wypadku platformy bada.

Pierwszą rzeczą jaką musisz znać jest język programistyczny C++. Podany tu przykładowy kod został opracowany w Visual Studio 2005 i kreatorze bada, a przetestowany został w symulatorze bada.
Stworzone zostaną następujące pliki:
[list] * HelloWorld.h
* HelloWorld.cpp
* HelloWorldEntry.cpp
[/list:u]

Istnieją również dwa pliki XML, które będą potrzebne do projektu o nazwie application.xml i manifest.xml, ale o nich nie będziemy mówić.

Na początek zajmiemy się główną klasą aplikacji. Zacznijmy od jej nagłówka

[b]HelloWorld.h[/b]
[code]#ifndef __HELLOWORLD_H__
#define __HELLOWORLD_H__

#include <FBase.h>
#include <FGraphics.h>;
#include <FLocales.h>
#include <FSystem.h>
#include <FApp.h>

using namespace Osp::Base;
using namespace Osp::Graphics;
using namespace Osp::Locales;
using namespace Osp::System;
using namespace Osp::App;

class HelloWorld :
public Application // must inherit from Application class
{
public:
// The application must have a factory method that creates an instance of the application.
static Application* CreateInstance(void);

public:
HelloWorld();
~HelloWorld();

public:
// The application must provide its name.
String GetAppName(void) const;

protected:
// The application must provide its ID.
AppId GetAppId(void) const;

AppSecret GetAppSecret(void) const;

public:
// This method is called when the application is initializing.
bool OnAppInitializing(AppRegistry& appRegistry);

// This method is called when the application is terminating.
bool OnAppTerminating(AppRegistry& appRegistry);

// Thie method is called when the application is brought to the foreground
void OnForeground(void);

// This method is called when the application is sent to the background.
void OnBackground(void);

// This method is called when the application has little available memory.
void OnLowMemory(void);

// This method is called when the device's battery level changes.
void OnBatteryLevelChanged(BatteryLevel batteryLevel);
};

#endif[/code]

Większość rzeczy w tym pliku nagłówkowym powinny być zrozumiałe, zwłaszcza dla tych z nas, którzy pracują często z C++. Jest kilka rzeczy, na które warto zwrócić uwagę:
[list]
# Base - podstawowe funkcje i interfejs (w szczególności poszczególnych typów danych)
# Graphics – pozwala "rysować" na ekranie (pamiętaj, że to zwykły rysunek na niskim poziomie działaĂą - funkcje User Interface są w innym pakiecie o nazwie Osp:: UI)
# Locales – funkcje związane z kulturą /informacjami (np. za prawidłowe daty, waluty i formaty liczb)
# System – podstawowe interakcje systemu (np. alarmy, poziom baterii itp.)
# App – pozwala na zarządzanie własną aplikację i jej ustawieniami, a także zakładania i wprowadzenia innych aplikacji [/list:u]

Klasa aplikacji musi dziedziczyć z klasy Application zdefiniowaną w Osp:: nazwę aplikacji. Ten zakłada również, że twoja klasa musi implementować niektóre funkcje, takie jak:
[list]
# Statyczna funkcja, która zwraca instancje klasy aplikacji
# Konstruktor i destruktor funkcji
# Informacje o niektórych podstawowych funkcjach, które zwracają nazwy, id lub tajny kod swojego app
# Niektóre obowiązkowe obsługi zdarzeĂą, które są wywoływane na ważne wydarzenia, takie jak zmiany poziomu baterii. [/list:u]

Jest to minimalny szkielet każdej aplikacji, który można rozwijać.

[b]HelloWorld.cpp[/b]
[code]#include "HelloWorld1.h"

HelloWorld1::HelloWorld()
{
}

HelloWorld1::~HelloWorld()
{
}

Application*
HelloWorld::CreateInstance(void)
{
// You can create the instance through another constructor.
return new HelloWorld();
}

String
HelloWorld::GetAppName(void) const
{
static String appName(L"HelloWorld");
return appName;
}

AppId
HelloWorld::GetAppId(void) const
{
static AppId appId(L"93bt1p123e");
return appId;
}

AppSecret
HelloWorld::GetAppSecret(void) const
{
static AppSecret appSecret(L"9C645DDBA19C71BAD1204DA4DAA7A0B9");
return appSecret;
}

bool
HelloWorld::OnAppInitializing(AppRegistry& appRegistry)
{
// TODO:
// Initialization including UI construction can be done here.
// Load the application's latest data, if necessary.
// If this method is successful, return true; otherwise, return false.
return true;
}

bool
HelloWorld::OnAppTerminating(AppRegistry& appRegistry)
{
// TODO:
// Deallocate or close any resources still alive.
// Save the application's current states, if applicable.
// If this method is successful, return true; otherwise, return false.
return true;
}

void
HelloWorld::OnForeground(void)
{
result r = E_SUCCESS;

Canvas* pCanvas = GetAppFrame()->GetCanvasN();
if(pCanvas == null)
return;

Font* pFont = new Font();
pFont->Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50);
pCanvas->SetFont(*pFont);

r = pCanvas->DrawText(Point(30, 30), GetAppName());
if (IsFailed(r))
{
AppLog("pCanvas->DrawText() failed.\n");
delete pCanvas;
return;
}

r = pCanvas->Show();
if (IsFailed(r))
{
AppLog("pCanvas->Show() failed.\n");
delete pCanvas;
return;
}

delete pCanvas;

}

void
HelloWorld::OnBackground(void)
{
}

void
HelloWorld::OnLowMemory(void)
{
// TODO:
// Deallocate as many resources as possible.
}

void
HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel)
{
// TODO:
// It is recommended that the application save its data,
// and terminate itself if the application consumes much battery
}[/code]

Nie trzeba tu chyba nic wyjaśniać. Wreszcie punkt wejścia do aplikacji (np. [i]main (...)[/i]). Odbywa się to w oddzielnym pliku:

[b]HelloWorldEntry.cpp[/b]
[code]/**
* OSP Application entry point(OspMain) introduced.
*/
#include <fapp.h>
#include "HelloWorld.h"

using namespace Osp::Base::Collection;

extern "C"
{
__declspec(dllexport) void OspMain(int hInstance, int argc, char *argv[]);
}

/**
* Entry function of OSP Application which is called by the operating system.
*/
extern "C" {
void OspMain(int hInstance, int argc, char *argv[])
{
AppLog("OspMain() Started. \n");

result r = E_SUCCESS;

ArrayList* pArgs = new ArrayList();
pArgs->Construct();
for (int i = 0; i < argc; i++)
{
String* pEachArg = new String(argv[i]);
pArgs->Add(*pEachArg);
}

r = Osp::App::Application::Execute(HelloWorld::CreateInstance, pArgs);
if (IsFailed(r))
{
AppLog("Application execution has failed.\n");
}

if (pArgs)
{
pArgs->RemoveAll(true);
delete pArgs;
}

AppLog("OspMain() Ended. \n");
}
}[/code]

[b]OspMain ()[/b], która jest głównym punktem wejścia w bada OS, "jest widoczne" dzięki [b]__declspec(dllexport) [/b]. Drugą ciekawą sprawą są argumenty przekazania do programu. Podejrzewam, że można przekazać pewne dane tutaj, jeśli uruchomiona aplikacja w innym app. argumenty te są przechowywane w ArrayList, jednym z typów danych w bada, określonym w Osp:: namespace Base.



Zobacz profil Gadu-Gadu


 Anatomia "Hello World" - wstęp do programowania
2
Przyjaciel
Avatar użytkownika
Dołączył(a): 2010-08-08, 10:05
Online: 24d 6h 35m
Posty: 448
Podziękowań: 51
Podziękował: 63
Model: wave s8500
Firmware: bada 2.0
Operator: play
2 miejsce: 2 Miejsce w Wakacyjnym Konkursie Fotograficznym Bada Dev: Developer aplikacji dla systemu bada Dobroczyńca: Odznaczenie za pomoc dla Forum (2)
Napisane: 2012-06-22, 09:49 
Przyznam się szczerze że gość strasznie namieszał i skomplikował sprawę. Prościej jest używać dedykowanego środowiska Eclipse. Do tego zbagatelizował plik manifest.xml, który jest bardzo ważnym plikiem do działania aplikacji. Do tego dodaje pliki nagłówkowe, z których nie korzysta.

_________________
[url=http://goo.gl/AZyEE][img]http://senega.strefa.pl/ic_kropka_tv.png[/img] Kropka TV - program telewizyjny na system Android[/url]


Zobacz profil


Utwórz nowy temat Odpowiedz w temacie  [ Posty: 2
Wyświetl posty nie starsze niż:  Sortuj wg  


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Powered by phpBB © 2011 phpBB Group
Copyright © 2011 bada-WORLD.pl Wszelkie prawa zastrzeżone.
Kopiowanie lub rozpowszechnianie jakiejkolwiek części serwisu (grafiki czy tekstów) bez zgody właściciela jest całkowicie zabronione.
Nasi partnerzy: TizenOs.com.pl | gsmManiaK.pl | Smitebuild.pl | PaladinsDecks.pl
phpBB SEO
| Forum o systemie Tizen Forum TizenOs.com.pl
smite wymagania | smite download