Sample Native Application development using Command Line Interface
PUBLISHED
Introduction
The Command Line Interface (CLI) provide functionalities for developing Tizen applications by issuing commands in the form of successive lines instead of Tizen Studio IDE. This interface supports the entire development process from creating the project to running an application.
The previous tip document ‘Sample Web Application development using Command Line Interface’ already covers basics of web application development environment using CLI. But for developing in CLI native environment, changes in parameters and commands are required. So in this document, we will focus on sample native application development using CLI from scratch.
Step 1. Download & Install CLI
Download Tizen Studio 1.2 with CLI (command line interface) installer for appropriate platform.
Link: https://developer.tizen.org/development/tizen-studio/download
To Install, enter chmod +x command to apply the execute permission to installer file. (On Ubuntu and Mac OS® X)
Then, execute the installer by entering command based on following syntax:
tizen-web-cli-<version> [options] [<directory path>]
Example command:
$ tizen-web-cli_TizenSDK_2.4.0_Rev8_ubuntu-64.bin --accept-license ~/tizen-sdk
Developer has to install ‘web-cli’ first, then update the CLI for native development environment
Prerequisites: https://developer.tizen.org/development/tizen-studio/download/installing-tizen-studio/prerequisites
Installation Guide: https://developer.tizen.org/development/tizen-studio/download/installing-tizen-studio#cli
Updating Tizen Studio: https://developer.tizen.org/development/tizen-studio/download/installing-tizen-studio/updating-tizen-studio
Step 2. Updating CLI for Native development environment
Native application development environment is generally not set up with default installer. Developer has to update the CLI using package-manager-cli located on <Tizen SDK Directory>/package-manager.
‘show-pkgs’ command is used to display package information.
Example command:
$ cd ~/tizen-studio/package-manager ~/tizen-studio/package-manager$ ./package-manager-cli.bin show-pkgs
Output:
Display installed packages information
Tizen Package Manager (0.2.29)
Status Package Name Package Version Component Name
------------------------------------------------------------------------------------------------------------------------
ni MOBILE-2.4 2.4.74 2.4 Mobile
i MOBILE-2.4-Emulator 2.4.74 Emulator
ni MOBILE-2.4-NativeAppDevelopment-CLI 2.4.74 Native app. development (CLI)
ni MOBILE-2.4-NativeAppDevelopment 2.4.74 Native app. development (IDE)
…………..
………….
ni WEARABLE-2.3.1 2.3.19 2.3.1 Wearable
ni WEARABLE-2.3.1-Emulator 2.3.19 Emulator
ni WEARABLE-2.3.1-NativeAppDevelopment-CLI 2.3.19 Native app. development (CLI)
ni WEARABLE-2.3.1-NativeAppDevelopment 2.3.19 Native app. development (IDE)
…………..
………
ni TOOLS 2.4.68 Tizen SDK tools
i Emulator 2.4.68 Emulator manager
ni NativeCLI 2.4.68 Native CLI
ni NativeIDE 2.4.68 Native IDE
ni NativeToolchain 2.4.68 Native toolchain
ni NativeToolchain-Gcc-4.6 2.4.68 Gcc 4.6 toolchain
ni NativeToolchain-Gcc-4.9 2.4.68 Gcc 4.9 toolchain
ni PlatformIDE 2.4.68 Platform IDE
ni EXTRAS 0.0.0 Extras
i cert-add-on 1.0.42 Samsung Certificate Extension
Install packages required to develop native application. Example command is shown to update the environment for development in wearable native.
-p parameter takes the OS admin login password
$ cd ~/tizen-studio/package-manager ~/tizen-studio/package-manager$ ./package-manager-cli.bin install WEARABLE-2.3.1 --accept-licence -p ******
Output:
Tizen Package Manager (0.2.29)
****************************************
******* Start SDK Update *******
****************************************
Nothing to update.
****************************************
******* Start SDK Installation *******
****************************************
Under packages are will be installed.
* WEARABLE-2.3.1-Emulator
* NativeToolchain-Gcc-4.6
* WEARABLE-2.3.1-NativeAppDevelopment-CLI
* WEARABLE-2.3.1-NativeAppDevelopment
* WEARABLE-2.3.1-WebFramework-TAU-CLI
* WEARABLE-2.3.1-WebAppDevelopment
* WEARABLE-2.3.1-WebFramework-TAU
[WEARABLE-2.3.1-Emulator]
0% [----------------------------------------] 100 %
Step 3. Add CLI directory path to the $PATH environment variable
The CLI is located in $<TIZEN_SDK_HOME>/tools/ide/bin/ directory. For developing an application using CLI, add CLI directory path to the $PATH environment variable using following command:
$ export PATH=$PATH:~/tizen-sdk/tools/ide/bin $ tizen version Tizen CLI 1.2.3
Step 4. List down Available Application templates
‘list’ command is used to list down available project templates:
tizen list <option> :
native-project Show native project template list
web-project Show web project template list
list native-project command would list down all the native project templates available.
Example Command:
~$ tizen list native-project
Output:
----------------------------------------------------- Starting native-project ----------------------------------------------------- [PROFILE] [TEMPLATE] mobile-2.4 IMEApplication mobile-2.4 ServiceApp mobile-2.4 SharedLibrary ……… wearable-2.3.1 ServiceApp wearable-2.3.1 SharedLibrary wearable-2.3.1 StaticLibrary wearable-2.3.1 basic-edc-ui wearable-2.3.1 basic-ui wearable-2.3.1 watchapp ----------------------------------------------------- Finished native-project
Step 5. Create Tizen native project
To create a tizen native project ‘tizen create’ command is used with the parameters:
-p Profile name.
-t Template name.
-n Project name.
-- Destination directory
Example Command:
~$ tizen create native-project -p wearable-2.3.1 -t basic-ui -n ProjectA -- ~/cli-workspace/
Output:
----------------------------------------------------- Starting native-project ----------------------------------------------------- Project Location: ~/cli-workspace/ProjectA ----------------------------------------------------- Finished native-project
Step 6. Build native project
‘build’ command builds the Tizen native project.
-- Specifies the project directory
Example Command:
~$ tizen build-native -- ~/cli-workspace/ProjectA
Output:
----------------------------------------------------- Starting build-native ----------------------------------------------------- [ARCHITECTURE]: x86 [COMPILER]: llvm [CONFIGURATION]: Debug "~/tizen-studio/tools/smart-build-interface/bin/sbi_make" -v "Wearable 2.3.1" -a i386 -t LLVM-3.6 -c Debug -p app Checking prerequisite... Checking make... ok make: Nothing to be done for `all'. PLATFORM_VER : Wearable 2.3.1 ARCHITECTURE : i386 TOOLCHAIN : LLVM-3.6 BUILD_CONFIG : Debug PROJECT_TYPE : app PROJECT_PATH : ~/cli-workspace/ProjectA SDK_PATH : ~/cli APPLICATION_ID : org.example.projecta ----------------------------------------------------- Finished build-native Total time: 00:00:00.216
Step 7. Clean native project
‘clean’ command cleans the Tizen project. If you clean the project, all build output directories under the project root path will be removed (Debug, Release, and .buildResult).
Example Command:
~$ tizen clean -- ~/cli-workspace/ProjectA
Output:
----------------------------------------------------- Starting clean ----------------------------------------------------- ~/tizen-studio/tools/smart-build-interface/bin/sbi_make -v "Wearable 2.3.1" -a i386 -t LLVM-3.6 -c Debug -p app clean Checking prerequisite... APPLICATION_ID: org.example.projecta ----------------------------------------------------- Finished clean
Step 8. Edit Source Code
To edit the ‘.c’, '.h', ’.xml’ files or to create new files you have to change the directory to the project directory. Then open the files using editor to edit source code. Example Command:
~$ cd ~/cli-workspace/ProjectA ~/cli-workspace/ProjectA$ ls Build data inc lib project_def.prop res shared src tizen-manifest.xml ~/cli-workspace/ProjectA$ cd src ~/cli-workspace/ProjectA/src$ ls projecta.c ~/cli-workspace/ProjectA/src$ nano projecta.c
Step 9. Generating Certificate
‘certificate’ command generates a Tizen certificate for the application. To upload the application to Tizen store or install to a Tizen device, Tizen certificate must be generated.
-a alias name* -p password* -c country code -s state -ct city
-o organization -u unit -n username -e email -f filename*
-- output path
(*) marked parameters are mandatory.
Example Command:
~$ tizen certificate -a testCertA -p 12345678 -f testCert
Output:
----------------------------------------------------- Starting certificate ----------------------------------------------------- No path option. Will be generated on '~/cli-data/keystore/author'. Working path: ~/cli-data/keystore/author Generating a certificate with File name = testCert Container Password = ******** Alias = testCertA Key Password = ******** Internal Certificates Directory = ~/tizen-studio/tools/certificate-generator 'testCert' has been generated in '~/cli-data/keystore/author'. ----------------------------------------------------- Finished certificate
Step 10. Managing Security Profiles
Tizen packages an application with signing profile.
‘security-profiles’ command manages security profiles, which is a set of signing certificates (author certificate, distributor certificate). Sub commands for tizen security profiles are Add, list and remove.
Security-profiles Add command takes the parameters:
-n profile name -a author certificate path -p password
-d distributor certificate path -dp distributor password
Example Command:
~$ tizen security-profiles add -n ProfileA -a ~/cli-data/keystore/author/testCert.p12 -p 12345678
Output:
----------------------------------------------------- Starting add ----------------------------------------------------- Loaded in '~/cli-data/ide/keystore/profiles.xml'. author path: ~/cli-data/keystore/author/testCert.p12 author password: ******** distributor1 path: ~/tizen-studio/tools/certificate-generator/certificates/distributor/tizen-distributor-signer.p12 distributor1 password: ************************* distributor1 CA path: ~/tizen-studio/tools/certificate-generator/certificates/distributor/tizen-distributor-ca.cer Wrote to '~/cli-data/ide/keystore/profiles.xml'. Succeed to add 'ProfileA' profile. If want to sign by this, add the file of security profiles in CLI configuration like 'tizen cli-config "profiles.path=~/cli-data/ide/keystore/profiles.xml"'. ----------------------------------------------------- Finished add If want to sign by this, add the file of security profiles in CLI configuration like 'tizen cli-config "profiles.path~/cli-data/ide/keystore/profiles.xml"'. ----------------------------------------------------- Finished add
To list down security profiles ‘list’ command is used.
Example Command:
~$ tizen security-profiles list
Output:
----------------------------------------------------- Starting list ----------------------------------------------------- Loaded in '~/cli-data/ide/keystore/profiles.xml'. ======================================== Name ======================================== MyProfile123 pro9 ProfileA ----------------------------------------------------- Finished list
Step 11. Packaging the native application with Signing
Tizen native application is packed as .tpk file. Package is used to install, uninstall or update application. Package is zip archive file, and it includes source codes of application and signature data. To publish application in the app store, application should be packed inside .tpk file.
tizen package command takes following parameters:
-t Package type
-s Security profile name for signing.
-- Build output path
~$ tizen package -t tpk -s ProfileA -- ~/cli-workspace/ProjectA/Debug
Output:
----------------------------------------------------- Starting package ----------------------------------------------------- Initialize... OK Copying files... OK Signing... OK Zip path: ~/cli-workspace/ProjectA/Debug/org.example.projecta-1.0.0-i386.tpk adding: signature1.xml (in=4175) (out=1938) (deflated 54%) adding: res/ (in=0) (out=0) (stored 0%) adding: bin/ (in=0) (out=0) (stored 0%) adding: bin/projecta (in=18886) (out=7845) (deflated 58%) adding: shared/ (in=0) (out=0) (stored 0%) adding: shared/res/ (in=0) (out=0) (stored 0%) adding: shared/res/projecta.png (in=57662) (out=18633) (deflated 68%) adding: shared/data/ (in=0) (out=0) (stored 0%) adding: shared/trusted/ (in=0) (out=0) (stored 0%) adding: tizen-manifest.xml (in=396) (out=232) (deflated 41%) adding: lib/ (in=0) (out=0) (stored 0%) adding: author-signature.xml (in=4118) (out=2159) (deflated 48%) total bytes=85237, compressed=30807 -> 64% savings Zipping... OK Package File Location: ~/cli-workspace/ProjectA/Debug/org.example.projecta-1.0.0-i386.tpk ----------------------------------------------------- Finished package
Step 12: Create and Run an Emulator for app deployment
Emulator Manager allows the developer to easily generate emulator instances from a pre-defined platform and template. Emulator manager can be launched from
<Tizen Studio dir>/tools/emulator/bin/em-cli
Emulator manager cli commands to list available platforms:
list-platform list of available platforms
list-template list of available device templates
list-vm list of all virtual machines created
~$ cd ~/tizen-sdk/tools/emulator/bin
list available platform & templates:
~/tizen-studio/tools/emulator/bin$ ./em-cli list-platform mobile-2.4 wearable-2.3.1-circle wearable-2.3.1 ~/tizen-studio/tools/emulator/bin$ ./em-cli list-template 360x480 Wearable Wearable Circle 320x320 Wearable HD Mobile
Create emulator:
-p platform -t template -n emulator name
~/tizen-studio/tools/emulator/bin$ ./em-cli create -n WearEmulator -p wearable-2.3.1-circle -t Wearable-Circle New virtual machine is created
List VM and Launch:
~/tizen-studio/tools/emulator/bin$ ./em-cli list-vm CLI1 testDevice WearEmulator ~/tizen-studio/tools/emulator/bin$ ./em-cli launch -n WearEmulator Launch command : "~/tizen-studio/platforms/tizen-2.3.1/common/emulator/bin/emulator.sh" --conf "~/cli-data/emulator/vms/WearEmulator/vm_launch.conf" The VM is launched
Step 13: Install the app package on a target
‘install’ command is used to install a tizen application package to device or emulator.
-n tizen package file name
-t target name
-- directory path of the package file.
Example command:
~$ tizen install -n org.example.projecta-1.0.0-i386.tpk -- ~/cli-workspace/ProjectA/Debug
Output:
----------------------------------------------------- Starting install ----------------------------------------------------- Transferring the package... Transferred the package: ~/cli-workspace/ProjectA/Debug/org.example.projecta-1.0.0-i386.tpk -> /opt/usr/apps/tmp Installing the package... -------------------- Platform log view -------------------- path is /opt/usr/apps/tmp/org.example.projecta-1.0.0-i386.tpk __return_cb req_id[30000002] pkg_type[coretpk] pkgid[org.example.projecta] key[start] val[install] __return_cb req_id[30000002] pkg_type[coretpk] pkgid[org.example.projecta] key[install_percent] val[30] __return_cb req_id[30000002] pkg_type[coretpk] pkgid[org.example.projecta] key[install_percent] val[60] __return_cb req_id[30000002] pkg_type[coretpk] pkgid[org.example.projecta] key[install_percent] val[100] __return_cb req_id[30000002] pkg_type[coretpk] pkgid[org.example.projecta] key[end] val[ok] spend time for pkgcmd is [2293]ms Installed the package: Id(org.example.projecta) Tizen application is successfully installed. ----------------------------------------------------- Finished install
Step 14: Running the Application on a Target
tizen run command is used to run a tizen application package on a target. Package Id is required to run the application on device.
-p Package ID installed on the target.
-t target device name
Example command:
~$ tizen run -p org.example.projecta
Output:
----------------------------------------------------- Starting run ----------------------------------------------------- [Name]: projecta [Type]: rpm [appId]: org.example.projecta Launching the Tizen application... org.tizen.sdblib.exception.SdbCommandRejectedException: closed at org.tizen.sdblib.SdbHelper.sendServiceRequest(SdbHelper.java:576) at org.tizen.sdblib.PlatformCapability.loadPlatformCapability(PlatformCapability.java:136) at org.tizen.sdblib.PlatformCapability.(PlatformCapability.java:132) at org.tizen.ncli.ide.subcommands.RunCLICommand.runApp(RunCLICommand.java:185) at org.tizen.ncli.ide.subcommands.RunCLICommand.call(RunCLICommand.java:80) at org.tizen.ncli.ide.subcommands.RunCLICommand.call(RunCLICommand.java:42) at org.tizen.ncli.ide.subcommands.AbstractSubCommand.runCommand(AbstractSubCommand.java:76) at org.tizen.ncli.ide.shell.RunCLI.execute(RunCLI.java:66) at org.tizen.ncli.ide.shell.AbstractCLI.execute(AbstractCLI.java:90) at org.tizen.ncli.ide.shell.Main.run(Main.java:141) at org.tizen.ncli.ide.shell.Main.main(Main.java:73) -------------------- Platform log view -------------------- ... successfully launched Tizen application is successfully launched. ----------------------------------------------------- Finished run
Screenshot of the Tizen native project :
Reference:
[1] https://developer.tizen.org/development/tools/common-tools/smart-development-bridge
[2] https://developer.tizen.org/development/tools/native-tools/command-line-interface
[3] https://developer.tizen.org/development/tools/common-tools/emulator#manager
[4] https://developer.tizen.org/development/tools/download/installing-sdk#cli