我们正在为Samsung Smart Watch和OS Tizen编写第一个应用程序

哈勃! 最近的出版物描述了在Tizen OS下运行的Samsung Galaxy Watch智能手表的第一印象。 下一步是找出如何在模拟器和真实手表上为该系统开发我们自己的应用程序。


尽管该过程有其自身的精妙之处,但从总体上看,该过程很简单(特别是当您编程超过一年时)。 谁在乎延续,细节在削减。

注意交通,许多截图。

步骤1.安装IDE和组件


第一步很简单明显。 我们转到Samsung网站并下载Tizen Studio ,我们根据操作系统选择版本。 在发布时,当前版本是2.5,我们将使用它。

安装后,程序包管理器启动,您需要使用该程序包安装开发所需的程序包。 我们选择3.0 Wearable



从屏幕截图中可以看到,4.0版仅以预览的形式提供,但是我们还是不会使用这些新功能,因此3.0版就足够了。 此外,您需要转到Extension SDK部分,然后在此处选择Samsung Certificate Extension 。 这很重要,因为 没有证书管理,将无法在手表上下载应用程序。 默认情况下,不选择此组件,并且至少花了半个小时来弄清楚为什么颁发了不正确的证书错误。

步骤2.创建一个项目


我们已经安装了IDE ,几乎可以成为真正的移动程序员,现在我们可以创建一个新项目。 启动Tizen Studio,然后选择File-> New Tizen Project 。 出现一个窗口,您可以在其中选择模板(用于新项目的模板)或样本(预定义的示例)。 选择模板,然后在所需平台的窗口中,选择可穿戴3.0。



下一段建议选择要写的内容-本机或Web应用程序,C ++或HTML5。



当然,只有铁杆,才选择C ++。 下一步是选择应用程序类型,其中有很多。 选择基本用户界面



其余的项目并不那么有趣,您需要选择应用程序名称,图标等。我选择了简单名称test1,默认情况下图标保留。 最后,向导将创建一个包含test1.c文件和tizen-manifest.xml文件的应用程序,该文件存储该应用程序的主要设置。

顺便说一下,开发环境本身是基于Eclipse的,看起来像这样。



现在,该应用程序可以在时钟仿真器上运行。 从菜单中选择工具-模拟器管理器。 出现一个窗口,您可以在其中选择并运行仿真器。



当模拟器运行时,从Tizen Studio启动应用程序。 进入Top 100不太可能,但是鉴于我们还没有编写任何代码,因此还不错:



步骤3.解析代码


让我们看看Tizen Studio为我们生成了什么。

appdata结构存储指向程序中使用的主要控件的指针。 在main函数中,调用系统函数ui_app_main,该函数由程序生命周期的所有主要回调函数(app_create,app_pause,app_terminate等)初始化。

typedef struct appdata { Evas_Object *win; Evas_Object *conform; Evas_Object *label; } appdata_s; static bool app_create(void *data) { appdata_s *ad = data; create_base_gui(ad); return true; } static void app_pause(void *data) { } ... int main(int argc, char *argv[]) { appdata_s ad = {0,}; int ret = 0; ui_app_lifecycle_callback_s event_callback = {0,}; app_event_handler_h handlers[5] = {NULL, }; event_callback.create = app_create; event_callback.terminate = app_terminate; event_callback.pause = app_pause; event_callback.resume = app_resume; event_callback.app_control = app_control; ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad); ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad); ... ret = ui_app_main(argc, argv, &event_callback, &ad); if (ret != APP_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "app_main() is failed. err = %d", ret); } return ret; } 

您可以在此处阅读有关Tizen程序生命周期的更多信息。

最后,我们转到创建所需的UI的函数:

 static void create_base_gui(appdata_s *ad) { /* Window */ /* Create and initialize elm_win. elm_win is mandatory to manipulate window. */ ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE); elm_win_autodel_set(ad->win, EINA_TRUE); if (elm_win_wm_rotation_supported_get(ad->win)) { int rots[4] = { 0, 90, 180, 270 }; elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4); } /* Conformant */ /* Create and initialize elm_conformant. elm_conformant is mandatory for base gui to have proper size when indicator or virtual keypad is visible. */ ad->conform = elm_conformant_add(ad->win); elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW); elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE); evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(ad->win, ad->conform); evas_object_show(ad->conform); /* Label */ /* Create an actual view of the base gui. Modify this part to change the view. */ ad->label = elm_label_add(ad->conform); elm_object_text_set(ad->label, "<align=center>Hello Tizen</align>"); evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_content_set(ad->conform, ad->label); /* Show window after base gui is set up */ evas_object_show(ad->win); } 

无需深入探讨,您可以看到在此处创建了elm_win应用程序窗口,这是Tizen应用程序所必需的。 在窗口内部创建一个Conformant对象,该对象控制可变大小内容的创建(例如,拔出键盘时大小可以更改)。 在我们的应用程序中,可能没有它,因为 我们不使用键盘,但既然如此,那就顺其自然了。 最后,最后一步是创建标签对象。 指向所有对象的指针存储在我们上面检查过的appdata结构中。 最后,最后一个函数evas_object_show在监视屏幕上显示创建的窗口。

这可以完成,但是编写自己的东西很有趣。 我们显示按钮,单击后标签文本将更改。

该示例中使用的elm_object_content_set函数仅显示一个控件。 但是,我们需要添加一些内容,因此我们将使用Box组件,然后将其插入Naviframe容器中。

我们从上面的代码中删除创建标签,然后将其替换为以下代码:

  // Naviframe ad->nf = elm_naviframe_add(ad->conform); evas_object_show(ad->nf); elm_naviframe_prev_btn_auto_pushed_set(ad->nf, EINA_TRUE); elm_object_content_set(ad->conform, ad->nf); // Box ad->box = elm_box_add(ad->nf); evas_object_show(ad->box); elm_naviframe_item_push(ad->nf, "My app", NULL, NULL, ad->box, NULL); // Label ad->label = elm_label_add(ad->box); elm_object_text_set(ad->label, "<align=center>Hello <b>Tizen</b></align>"); evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(ad->label); elm_box_pack_end(ad->box, ad->label); // Button ad->btn = elm_button_add(ad->box); elm_object_text_set(ad->btn, "Click me!"); evas_object_smart_callback_add(ad->btn, "clicked", btn_clicked_cb, ad); evas_object_size_hint_weight_set(ad->btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(ad->btn, EVAS_HINT_FILL, 0.5); evas_object_show(ad->btn); elm_box_pack_end(ad->box, ad->btn); 

如您所见,我们创建了2个控件标签和按钮。 系统带来的好处是-设置标签文本时,您可以使用HTML格式标签。 对于按钮,我们还创建了btn_clicked_cb处理程序:

 static void btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = (appdata_s*)data; elm_object_text_set(ad->label, "Hello habr!"); } 

作为处理程序的参数,我们传递一个指向appdata的指针,其中存储了所有控件。 顺便说一下,还应该在此处添加新的控件:

 typedef struct appdata { Evas_Object *win; Evas_Object *nf, *conform, *box; Evas_Object *label; Evas_Object *btn; } appdata_s; 

现在,一切就绪,运行应用程序,并看到带有已创建标签和按钮的窗口。



我们单击按钮,然后将标签的文本替换为“ Hello habr!”,如处理程序中所述(我们不会在此处将文本放入资源中以免使程序复杂化,当然,这不应在真实代码中完成)。

步骤4.在手表上启动应用程序


到目前为止,我们的应用程序仅可在仿真器上运行,在真正的手表上运行它很有趣。 这个过程并不完全是琐碎的,尽管这里也没有根本上复杂的事情。

-开启时钟“调试”功能并重新启动时钟。

-我们在手表上激活了持续连接WiFi的模式。

-当时钟连接到WiFi时,启动设备管理器,然后在其中选择远程设备管理器 。 在打开的窗口中,单击“扫描”按钮,如果正确完成了前面的步骤,我们将看到手表的IP地址。



单击连接→打开,如​​果一切正确完成,手表将要求您确认连接,然后将建立连接。 实际上,要连接到手表,甚至无需将其从手上移开。

一切准备就绪后,转到Tizen Studio,然后在下拉列表中选择在时钟上或模拟器中运行应用程序的位置。 我们选择时钟,开始...并得到一个错误,如“错误消息::使用了非可信证书 。 注册有效证书:<-32>“。

las,在现代世界中,您不能只在自己的设备上运行该应用程序-没有数字签名和证书就无法正常工作(如果像Apple这样,您不需要每年为此类证书支付99美元,这很好,他们只是最近才取消)。

但是,顺便说一下,这里的所有问题都可以轻松解决,如果没有忘记的话,第一步我们安装了Samsung Certificate Extension组件并不是白费。 我们启动工具-证书管理器,然后选择创建证书。



在此窗口中,选择“三星证书”。 接下来,填写所有字段,并确认进入三星帐户的步骤以创建证书(感谢上帝,没有验证短信并指明信用卡的凭证)。

最后,完成该过程后,再次在Tizen Studio中单击“运行”,该应用程序将按计划按时启动。



混淆证书和连接需要花费一些时间,但这仅执行一次,然后只需单击“运行”即可照常开始编译程序。

结论


这并不是说该过程是完全直观的。 但是,尤其是对于那些熟悉iOS或Android开发的人来说,这里没有什么至关重要的复杂问题,总体思路大致相同。

这里有一个很好的文档,希望那些人可以更详细地研究它。

有趣的是,除了手表以外,还有其他带有Tizen OS的设备,例如电视。
祝大家对成功的实验感兴趣。

Source: https://habr.com/ru/post/zh-CN423417/


All Articles