A built-in QML app is a QML app that is installed with the webOS OSE platform at build time.
Downloadable vs. Built-In
In webOS OSE, apps and services can be classified into two types based on how they are installed on the target device.
Downloadable apps/services are installed by the appinstalld service. The appinstalld service creates webOS configurations based on files created by developers. (such as trust level) Developers can modify only certain parts of the app/service settings.
Built-in apps/services are built and installed by developers. Developers can customize app/service’s configurations to suit their needs.
This tutorial shows a step-by-step guide for creating a built-in QML app from scratch.
Note In this section, there are a lot of contents about modifying recipe files. For more about the recipe files, refer to the Yocto Project Reference Manual.
Note You don’t need to go to the Step 03. Installing the App. You’ve already installed the app on the webOS OSE platform.
Step 03. Installing the App
This step describes how to install the .ipk file you’ve built in App Alone.
Copy the .ipk file to the target device.
scp <PATH TO IPK FILE> root@<TARGET DEVICE IP ADDRESS>:/media/internal/downloads/
Connect to the target device.
ssh root@<TARGET DEVICE IP ADDRESS>
Move into the /media/internal/downloads/ directory and install the .ipk file.
root@raspberrypi4-64:~# cd /media/internal/downloads/
root@raspberrypi4-64:/media/internal/downloads# opkg install com.example.app.qml_1.0.0-r0.local0_raspberrypi4_64.ipk
Installing com.example.app.qml (1.0.0) on root.
Configuring com.example.app.qml.
No image conversions needed for com.example.app.qml
Reboot the device.
reboot -f
After rebooting the device, you can see the app icon in the Launchpad.
Appendix. Code Explanation
This section briefly explains the sample codes used in this tutorial.
Line (2): The section where packages should be categorized.
Line (3~4): License information for the app.
Line (6): A list of build-time dependencies.
Line (7): A list of runtime dependencies.
Line (9): The version of the component. Every webOS component must contain this.
Line (10): The revision of the recipe. Unless you’re changing the WEBOS_VERSION or just adding a comment, you should increment this value each time you modify the recipe.
Line (12-14): Inherits from other classes.
Line (12): Sets QMake for configuration.
Line (13): Inherits webos_submissions to check the version information set correctly. This field is required if you develop your component on a local repository.
Line (14): For apps, this field is required.
Line (16): Defines files included in the package. ${webos_applicationsdir} indicates /usr/palm/applications. ${PN} is the package name (com.example.app.qml).
webos-local.conf
1
2
3
4
INHERIT += "externalsrc"
EXTERNALSRC:pn-<APP ID> = "<PATH TO THE APP DIRECTORY>/"
EXTERNALSRC_BUILD:pn-<APP ID> = "<PATH TO THE APP DIRECTORY>/build/"
PR:append:pn-<APP ID> =".local0"
A brief explanation of the above file:
Line (1): Inherits the externalsrc.bbclass file.
Line (2): Specifies the path to the app directory.
<APP ID>: The app ID specified in the appinfo.json file.
<PATH TO THE APP DIRECTORY>: The root directory of the app where the appinfo.json file is located. You must use the absolute path.
Line (3): Specifies the build directory. The build directory is located under the app directory.
Line (4): The revision for local source builds. This line is optional.
Line (2): Enables to call system services via luna-service.
Line (3): Enables the use of WebOSWindow QML components.
Line (4): Enables the use of PmLog for printing logs.
Line (6~62): Declares a WebOSWindow object with child objects.
Line (7 ~13): Sets the object’s properties.
Line (14): The app can be launched on the display that corresponds to the displayAffinity value passed as the launch parameter.
Line (16~22): Declares an object (Text).
Line (24~27): A QML app is launched and registered to SAM by qml-runner. This process allows the QML app to receive parameters passed with the launch method as params. onLaunchParamsChanged is called every time the launch method is called. For details of PmLogLib usage, refer to Using PmLogLib in QML.
Line (24): launchParams stores the parameters that are passed when the app is executed.
Line (25~27): onLaunchParamsChanged handler logs each time the launchParams changes.
Line (29~47): The Service component interacts with the system service. It defines an API call: API, method, response, and error handling
Line (49~52): When the user clicks on the screen, systemservice’s getTime method is called.
Line (54~56): windowState is a value that the WebOSWindow QML component sends to the app. Whenever the windowState value changes, onWindowStateChanged is called. Its value is 1 when the app is in the background and 4 when the app is in the foreground, following the definition of Qt::WindowState. For details, see enum Qt::WindowState | Qt Documentation.
Line (58~61): Declares an object (PmLog).
README.md
This file provides overall information about the app.
Caution
If the README.md file is missing, a build error occurs.
Make sure the ‘Summary’ section is a single line. Even any whitespace at the line above the ‘Description’ section is considered a part of the summary and can cause the build to fail.
Summary
-------
QML app sample
Description
-----------
QML app sample
How to Build on Linux
---------------------
## Dependencies
Below are the tools and libraries (and their minimum versions) required to build sample program:
* qmake
## Building
$ cd build-webos
$ source oe-init-build-env
$ bitbake com.example.app.qml
Copyright and License Information
=================================
Unless otherwise specified, all content, including all source code files and
documentation files in this repository are:
Copyright (c) 2020 LG Electronics, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
SPDX-License-Identifier: Apache-2.0