Skip to content

Commit 1981123

Browse files
author
minggo
authored
Merge pull request #389 from natural-law/tizen-cli
Support compile & run project on Tizen.
2 parents a256640 + 4e2d17e commit 1981123

File tree

5 files changed

+224
-25
lines changed

5 files changed

+224
-25
lines changed

bin/cocos_project.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ class Platforms(object):
199199
WP8 = "wp8"
200200
WP8_1 = "wp8_1"
201201
METRO = "metro"
202+
TIZEN = "tizen"
202203

203204
CFG_CLASS_MAP = {
204205
ANDROID : "cocos_project.AndroidConfig",
@@ -209,7 +210,8 @@ class Platforms(object):
209210
LINUX : "cocos_project.LinuxConfig",
210211
WP8 : "cocos_project.Wp8Config",
211212
WP8_1 : "cocos_project.Wp8_1Config",
212-
METRO : "cocos_project.MetroConfig"
213+
METRO : "cocos_project.MetroConfig",
214+
TIZEN : "cocos_project.TizenConfig"
213215
}
214216

215217
@staticmethod
@@ -239,10 +241,10 @@ def __init__(self, project, current, proj_dir = None):
239241
def _filter_platforms(self, platforms):
240242
ret = []
241243
platforms_for_os = {
242-
"linux" : [ Platforms.WEB, Platforms.LINUX, Platforms.ANDROID ],
243-
"mac" : [ Platforms.WEB, Platforms.IOS, Platforms.MAC, Platforms.ANDROID ],
244+
"linux" : [ Platforms.WEB, Platforms.LINUX, Platforms.ANDROID, Platforms.TIZEN ],
245+
"mac" : [ Platforms.WEB, Platforms.IOS, Platforms.MAC, Platforms.ANDROID, Platforms.TIZEN ],
244246
"win32" : [ Platforms.WEB, Platforms.WIN32, Platforms.ANDROID, Platforms.WP8,
245-
Platforms.WP8_1, Platforms.METRO]
247+
Platforms.WP8_1, Platforms.METRO, Platforms.TIZEN ]
246248
}
247249
for p in platforms:
248250
if cocos.os_is_linux():
@@ -261,22 +263,22 @@ def _gen_available_platforms(self, proj_info, proj_dir):
261263
# generate the platform list for different projects
262264
if self._project._is_lua_project():
263265
if self._project._is_native_support():
264-
platform_list = [ Platforms.ANDROID, Platforms.WIN32, Platforms.IOS, Platforms.MAC, Platforms.LINUX ]
266+
platform_list = [ Platforms.ANDROID, Platforms.WIN32, Platforms.IOS, Platforms.MAC, Platforms.LINUX, Platforms.TIZEN ]
265267
else:
266268
if self._project.has_android_libs():
267269
platform_list = [ Platforms.ANDROID ]
268270
else:
269271
platform_list = []
270272
elif self._project._is_js_project():
271273
if self._project._is_native_support():
272-
platform_list = [ Platforms.ANDROID, Platforms.WIN32, Platforms.IOS, Platforms.MAC, Platforms.WEB, Platforms.LINUX, Platforms.WP8, Platforms.WP8_1, Platforms.METRO ]
274+
platform_list = [ Platforms.ANDROID, Platforms.WIN32, Platforms.IOS, Platforms.MAC, Platforms.WEB, Platforms.LINUX, Platforms.WP8, Platforms.WP8_1, Platforms.METRO, Platforms.TIZEN ]
273275
else:
274276
if self._project.has_android_libs():
275277
platform_list = [ Platforms.ANDROID, Platforms.WEB ]
276278
else:
277279
platform_list = [ Platforms.WEB ]
278280
elif self._project._is_cpp_project():
279-
platform_list = [ Platforms.ANDROID, Platforms.WIN32, Platforms.IOS, Platforms.MAC, Platforms.LINUX, Platforms.WP8, Platforms.WP8_1, Platforms.METRO ]
281+
platform_list = [ Platforms.ANDROID, Platforms.WIN32, Platforms.IOS, Platforms.MAC, Platforms.LINUX, Platforms.WP8, Platforms.WP8_1, Platforms.METRO, Platforms.TIZEN ]
280282

281283
# filter the available platform list
282284
platform_list = self._filter_platforms(platform_list)
@@ -342,6 +344,9 @@ def is_wp8_1_active(self):
342344
def is_metro_active(self):
343345
return self._current == Platforms.METRO
344346

347+
def is_tizen_active(self):
348+
return self._current == Platforms.TIZEN
349+
345350
def get_current_config(self):
346351
if self.none_active():
347352
return None
@@ -706,3 +711,18 @@ def _is_available(self):
706711
ret = super(MetroConfig, self)._is_available()
707712

708713
return ret
714+
715+
class TizenConfig(PlatformConfig):
716+
def _use_default(self):
717+
if self._is_script:
718+
self.proj_path = os.path.join(self._proj_root_path, "frameworks", "runtime-src", "proj.tizen")
719+
else:
720+
self.proj_path = os.path.join(self._proj_root_path, "proj.tizen")
721+
722+
def _parse_info(self, cfg_info):
723+
super(TizenConfig, self)._parse_info(cfg_info)
724+
725+
def _is_available(self):
726+
ret = super(TizenConfig, self)._is_available()
727+
728+
return ret

bin/strings.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,17 @@
156156
"COMPILE_ARG_LUA_ENCRYPT" : "Enable the encrypting of lua scripts.",
157157
"COMPILE_ARG_LUA_ENCRYPT_KEY" : "Specify the encrypt key for the encrypting of lua scripts.",
158158
"COMPILE_ARG_LUA_ENCRYPT_SIGN" : "Specify the encrypt sign for the encrypting of lua scripts.",
159+
"COMPILE_ARG_GROUP_TIZEN" : "Tizen Options",
160+
"COMPILE_ARG_TIZEN_ARCH" : "Determines the architecture type for the rootstrap.",
161+
"COMPILE_ARG_TIZEN_COMPILER" : "Set the compiler to the native project.",
162+
"COMPILE_ARG_TIZEN_PKGTYPE" : "Set the package type.",
163+
"COMPILE_ARG_TIZEN_PROFILE" : "Set the profile path for signing.",
164+
"COMPILE_ARG_TIZEN_SIGN" : "Set the profile name to use for signing.",
165+
"COMPILE_ARG_TIZEN_STRIP" : "Determines whether to strip the native binary.",
166+
"COMPILE_ERROR_TIZEN_PROFILE" : "Please specify the profile path by --tizen-profile.",
167+
"COMPILE_ERROR_TIZEN_NO_FILE_FMT" : "%s is not generated by 'tizen build-native'",
168+
"COMPILE_ERROR_TIZEN_NO_TYPE" : "Please specify the package type by --tizen-pkgtype.",
169+
"COMPILE_ERROR_TIZEN_BUILD_FAILED" : "Build tizen package failed!",
159170
"COMPILE_DETECT_CPU_FAILED" : "Failed to detect number of cpus, assume 1 cpu.",
160171
"COMPILE_INFO_BUILD_NATIVE" : "Building native...",
161172
"COMPILE_INFO_BUILD_APK" : "Building apk...",
@@ -485,6 +496,17 @@
485496
"COMPILE_ARG_LUA_ENCRYPT" : "开启 XXTEA 加密功能。",
486497
"COMPILE_ARG_LUA_ENCRYPT_KEY" : "指定 XXTEA 加密功能的 key 字段。",
487498
"COMPILE_ARG_LUA_ENCRYPT_SIGN" : "指定 XXTEA 加密功能的 sign 字段。",
499+
"COMPILE_ARG_GROUP_TIZEN" : "Tizen 相关参数",
500+
"COMPILE_ARG_TIZEN_ARCH" : "指定需要编译的 CPU 架构。",
501+
"COMPILE_ARG_TIZEN_COMPILER" : "指定 native 工程所需使用的编译器。",
502+
"COMPILE_ARG_TIZEN_PKGTYPE" : "指定最终生成安装包的类型。",
503+
"COMPILE_ARG_TIZEN_PROFILE" : "指定用于签名的 profile 文件路径。",
504+
"COMPILE_ARG_TIZEN_SIGN" : "指定用于签名的 profile 名称。",
505+
"COMPILE_ARG_TIZEN_STRIP" : "指定是否开启 native 库的 strip 功能。",
506+
"COMPILE_ERROR_TIZEN_PROFILE" : "请使用参数 --tizen-profile 指定用于签名的 profile 文件路径。",
507+
"COMPILE_ERROR_TIZEN_NO_FILE_FMT" : "'tizen build-native' 命令未生成路径 %s",
508+
"COMPILE_ERROR_TIZEN_NO_TYPE" : "请使用参数 --tizen-pkgtype 指定生成的安装包类型。",
509+
"COMPILE_ERROR_TIZEN_BUILD_FAILED" : "生成 tizen 安装包失败。",
488510
"COMPILE_DETECT_CPU_FAILED" : "检测机器 cpu 数量失败,使用 1 个 cpu 进行编译。",
489511
"COMPILE_INFO_BUILD_NATIVE" : "正在执行 ndk-build...",
490512
"COMPILE_INFO_BUILD_APK" : "正在生成 apk 文件...",
@@ -813,6 +835,17 @@
813835
"COMPILE_ARG_LUA_ENCRYPT" : "開啟 XXTEA 加密功能。",
814836
"COMPILE_ARG_LUA_ENCRYPT_KEY" : "指定 XXTEA 加密功能的 key 字段。",
815837
"COMPILE_ARG_LUA_ENCRYPT_SIGN" : "指定 XXTEA 加密功能的 sign 字段。",
838+
"COMPILE_ARG_GROUP_TIZEN" : "Tizen 相關參數",
839+
"COMPILE_ARG_TIZEN_ARCH" : "指定需要編譯的 CPU 架構。",
840+
"COMPILE_ARG_TIZEN_COMPILER" : "指定 native 工程所需使用的編譯器。",
841+
"COMPILE_ARG_TIZEN_PKGTYPE" : "指定最終生成安裝包的類型。",
842+
"COMPILE_ARG_TIZEN_PROFILE" : "指定用於簽名的 profile 檔路徑。",
843+
"COMPILE_ARG_TIZEN_SIGN" : "指定用於簽名的 profile 名稱。",
844+
"COMPILE_ARG_TIZEN_STRIP" : "指定是否開啟 native 庫的 strip 功能。",
845+
"COMPILE_ERROR_TIZEN_PROFILE" : "請使用參數 --tizen-profile 指定用於簽名的 profile 檔路徑。",
846+
"COMPILE_ERROR_TIZEN_NO_FILE_FMT" : "'tizen build-native' 命令未生成路徑 %s",
847+
"COMPILE_ERROR_TIZEN_NO_TYPE" : "請使用參數 --tizen-pkgtype 指定生成的安裝包類型。",
848+
"COMPILE_ERROR_TIZEN_BUILD_FAILED" : "生成 tizen 安裝包失敗。",
816849
"COMPILE_DETECT_CPU_FAILED" : "檢測機器 cpu 數量失敗,使用 1 個 cpu 進行編譯。",
817850
"COMPILE_INFO_BUILD_NATIVE" : "正在執行 ndk-build...",
818851
"COMPILE_INFO_BUILD_APK" : "正在生成 apk 檔案...",

plugins/plugin_compile/project_compile.py

Lines changed: 126 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ def _add_custom_options(self, parser):
115115
group.add_argument("--lua-encrypt-sign", dest="lua_encrypt_sign",
116116
help=MultiLanguage.get_string('COMPILE_ARG_LUA_ENCRYPT_SIGN'))
117117

118+
group = parser.add_argument_group(MultiLanguage.get_string('COMPILE_ARG_GROUP_TIZEN'))
119+
group.add_argument("--tizen-arch", dest="tizen_arch", default="x86", choices=[ "x86", "arm" ], help=MultiLanguage.get_string('COMPILE_ARG_TIZEN_ARCH'))
120+
# group.add_argument("--tizen-compiler", dest="tizen_compiler", choices=[ "llvm", "gcc" ], help=MultiLanguage.get_string('COMPILE_ARG_TIZEN_COMPILER'))
121+
# group.add_argument("--tizen-pkgtype", dest="tizen_pkgtype", default="tpk", choices=[ "tpk", "wgt" ], help=MultiLanguage.get_string('COMPILE_ARG_TIZEN_PKGTYPE'))
122+
group.add_argument("--tizen-profile", dest="tizen_profile", help=MultiLanguage.get_string('COMPILE_ARG_TIZEN_PROFILE'))
123+
group.add_argument("--tizen-sign", dest="tizen_sign", help=MultiLanguage.get_string('COMPILE_ARG_TIZEN_SIGN'))
124+
group.add_argument("--tizen-strip", dest="tizen_strip", action="store_true", help=MultiLanguage.get_string('COMPILE_ARG_TIZEN_STRIP'))
125+
118126
category = self.plugin_category()
119127
name = self.plugin_name()
120128
usage = "\n\t%%prog %s %s -p <platform> [-s src_dir][-m <debug|release>]" \
@@ -157,6 +165,15 @@ def _check_custom_options(self, args):
157165
if args.target_name is not None:
158166
self.xcode_target_name = args.target_name
159167

168+
# Tizen arguments
169+
self.tizen_arch = args.tizen_arch
170+
# self.tizen_compiler = args.tizen_compiler
171+
# self.tizen_pkgtype = args.tizen_pkgtype
172+
self.tizen_pkgtype = 'tpk'
173+
self.tizen_sign = args.tizen_sign
174+
self.tizen_strip = args.tizen_strip
175+
self.tizen_profile = args.tizen_profile
176+
160177
if args.compile_script is not None:
161178
self._compile_script = bool(args.compile_script)
162179
else:
@@ -1160,24 +1177,7 @@ def build_win32(self):
11601177
shutil.copy(file_path, output_dir)
11611178

11621179
# copy lua files & res
1163-
build_cfg_path = self._build_cfg_path()
1164-
build_cfg = os.path.join(build_cfg_path, CCPluginCompile.BUILD_CONFIG_FILE)
1165-
if not os.path.exists(build_cfg):
1166-
message = MultiLanguage.get_string('COMPILE_ERROR_FILE_NOT_FOUND_FMT', build_cfg)
1167-
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_PATH_NOT_FOUND)
1168-
f = open(build_cfg)
1169-
data = json.load(f)
1170-
1171-
if data.has_key(CCPluginCompile.CFG_KEY_MUST_COPY_RESOURCES):
1172-
if self._no_res:
1173-
fileList = data[CCPluginCompile.CFG_KEY_MUST_COPY_RESOURCES]
1174-
else:
1175-
fileList = data[CCPluginCompile.CFG_KEY_COPY_RESOURCES] + data[CCPluginCompile.CFG_KEY_MUST_COPY_RESOURCES]
1176-
else:
1177-
fileList = data[CCPluginCompile.CFG_KEY_COPY_RESOURCES]
1178-
1179-
for cfg in fileList:
1180-
cocos.copy_files_with_config(cfg, build_cfg_path, output_dir)
1180+
self._copy_resources(output_dir)
11811181

11821182
# check the project config & compile the script files
11831183
if self._project._is_js_project():
@@ -1524,6 +1524,113 @@ def build_metro(self):
15241524
build_mode = 'Debug' if self._is_debug_mode() else 'Release'
15251525
self.build_vs_project(projectPath, self.project_name, build_mode, self.vs_version)
15261526

1527+
def _build_tizen_proj(self, tizen_cmd_path, build_mode, proj_path):
1528+
build_native_cmd = "%s build-native -- \"%s\"" % (tizen_cmd_path, proj_path)
1529+
build_native_cmd += " -C %s" % build_mode
1530+
build_native_cmd += " -a %s" % self.tizen_arch
1531+
1532+
# if self.tizen_compiler is not None:
1533+
# build_native_cmd += " -c %s" % self.tizen_compiler
1534+
# TODO now only support gcc
1535+
build_native_cmd += " -c gcc"
1536+
1537+
self._run_cmd(build_native_cmd)
1538+
1539+
def build_tizen(self):
1540+
if not self._platforms.is_tizen_active():
1541+
return
1542+
1543+
tizen_studio_path = cocos.check_environment_variable("TIZEN_STUDIO_HOME")
1544+
tizen_proj_path = self._platforms.project_path()
1545+
tizen_cmd_path = cocos.CMDRunner.convert_path_to_cmd(os.path.join(tizen_studio_path, "tools", "ide", "bin", "tizen"))
1546+
build_mode = 'Debug' if self._is_debug_mode() else 'Release'
1547+
1548+
# build library projects
1549+
build_cfg_data = self._get_build_cfg()
1550+
if build_cfg_data.has_key('depend_projs'):
1551+
lib_projs = build_cfg_data['depend_projs']
1552+
for proj in lib_projs:
1553+
proj_path = os.path.normpath(os.path.join(self._build_cfg_path(), proj))
1554+
self._build_tizen_proj(tizen_cmd_path, build_mode, proj_path)
1555+
1556+
# build the game project
1557+
self._build_tizen_proj(tizen_cmd_path, build_mode, tizen_proj_path)
1558+
1559+
# copy resources files
1560+
res_path = os.path.join(tizen_proj_path, 'res')
1561+
self._copy_resources(res_path)
1562+
1563+
# check the project config & compile the script files
1564+
if self._project._is_js_project():
1565+
self.compile_js_scripts(res_path, res_path)
1566+
1567+
if self._project._is_lua_project():
1568+
self.compile_lua_scripts(res_path, res_path, False)
1569+
1570+
# config the profile path
1571+
if self.tizen_profile is not None:
1572+
config_cmd = "%s cli-config -g \"default.profiles.path=%s\"" % (tizen_cmd_path, self.tizen_profile)
1573+
self._run_cmd(config_cmd)
1574+
1575+
# invoke tizen package
1576+
build_cfg_path = os.path.join(tizen_proj_path, build_mode)
1577+
if not os.path.isdir(build_cfg_path):
1578+
raise cocos.CCPluginError(MultiLanguage.get_string('COMPILE_ERROR_TIZEN_NO_FILE_FMT', build_cfg_path))
1579+
1580+
package_cmd = "%s package -- \"%s\" -t %s" % (tizen_cmd_path, build_cfg_path, self.tizen_pkgtype)
1581+
if self.tizen_sign is not None:
1582+
package_cmd += " -s \"%s\"" % self.tizen_sign
1583+
1584+
if self.tizen_strip:
1585+
package_cmd += " -S"
1586+
1587+
self._run_cmd(package_cmd)
1588+
1589+
# get the package path
1590+
from xml.dom import minidom
1591+
doc = minidom.parse(os.path.join(tizen_proj_path, "tizen-manifest.xml"))
1592+
pkgid = doc.getElementsByTagName("manifest")[0].getAttribute("package")
1593+
version = doc.getElementsByTagName("manifest")[0].getAttribute("version")
1594+
1595+
if self.tizen_arch == "arm":
1596+
arch_str = "arm"
1597+
else:
1598+
arch_str = "i386"
1599+
1600+
pkg_file_name = "%s-%s-%s.%s" % (pkgid, version, arch_str, self.tizen_pkgtype)
1601+
tizen_pkg_path = os.path.join(tizen_proj_path, build_mode, pkg_file_name)
1602+
if not os.path.isfile(tizen_pkg_path):
1603+
raise cocos.CCPluginError(MultiLanguage.get_string('COMPILE_ERROR_TIZEN_BUILD_FAILED'))
1604+
1605+
# copy the package into output dir
1606+
if not os.path.exists(self._output_dir):
1607+
os.makedirs(self._output_dir)
1608+
shutil.copy(tizen_pkg_path, self._output_dir)
1609+
self.tizen_pkg_path = os.path.join(self._output_dir, pkg_file_name)
1610+
1611+
def _get_build_cfg(self):
1612+
build_cfg_dir = self._build_cfg_path()
1613+
build_cfg = os.path.join(build_cfg_dir, CCPluginCompile.BUILD_CONFIG_FILE)
1614+
if not os.path.exists(build_cfg):
1615+
message = MultiLanguage.get_string('COMPILE_ERROR_FILE_NOT_FOUND_FMT', build_cfg)
1616+
raise cocos.CCPluginError(message, cocos.CCPluginError.ERROR_PATH_NOT_FOUND)
1617+
f = open(build_cfg)
1618+
return json.load(f)
1619+
1620+
def _copy_resources(self, dst_path):
1621+
data = self._get_build_cfg()
1622+
1623+
if data.has_key(CCPluginCompile.CFG_KEY_MUST_COPY_RESOURCES):
1624+
if self._no_res:
1625+
fileList = data[CCPluginCompile.CFG_KEY_MUST_COPY_RESOURCES]
1626+
else:
1627+
fileList = data[CCPluginCompile.CFG_KEY_COPY_RESOURCES] + data[CCPluginCompile.CFG_KEY_MUST_COPY_RESOURCES]
1628+
else:
1629+
fileList = data[CCPluginCompile.CFG_KEY_COPY_RESOURCES]
1630+
1631+
for cfg in fileList:
1632+
cocos.copy_files_with_config(cfg, self._build_cfg_path(), dst_path)
1633+
15271634
def checkFileByExtention(self, ext, path):
15281635
filelist = os.listdir(path)
15291636
for fullname in filelist:
@@ -1557,6 +1664,7 @@ def run(self, argv, dependencies):
15571664
self.build_wp8()
15581665
self.build_wp8_1()
15591666
self.build_metro()
1667+
self.build_tizen()
15601668

15611669
# invoke the custom step: post-build
15621670
self._project.invoke_custom_step_script(cocos_project.Project.CUSTOM_STEP_POST_BUILD, target_platform, args_build_copy)

plugins/plugin_deploy.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,31 @@ def deploy_android(self, dependencies):
185185
adb_install = "%s install \"%s\"" % (adb_path, apk_path)
186186
self._run_cmd(adb_install)
187187

188+
def deploy_tizen(self, dependencies):
189+
if not self._platforms.is_tizen_active():
190+
return
191+
192+
tizen_proj_path = self._platforms.project_path()
193+
from xml.dom import minidom
194+
doc = minidom.parse(os.path.join(tizen_proj_path, "tizen-manifest.xml"))
195+
self.tizen_packageid = doc.getElementsByTagName("manifest")[0].getAttribute("package")
196+
197+
# uninstall old app
198+
tizen_studio_path = cocos.check_environment_variable("TIZEN_STUDIO_HOME")
199+
tizen_cmd_path = cocos.CMDRunner.convert_path_to_cmd(os.path.join(tizen_studio_path, "tools", "ide", "bin", "tizen"))
200+
try:
201+
uninstall_cmd = "%s uninstall -p %s" % (tizen_cmd_path, self.tizen_packageid)
202+
self._run_cmd(uninstall_cmd)
203+
except Exception:
204+
pass
205+
206+
# install app
207+
compile_dep = dependencies["compile"]
208+
pkg_path = compile_dep.tizen_pkg_path
209+
pkg_dir, pkg_file_name = os.path.split(pkg_path)
210+
install_cmd = "%s install -- \"%s\" -n \"%s\"" % (tizen_cmd_path, pkg_dir, pkg_file_name)
211+
self._run_cmd(install_cmd)
212+
188213
def get_filename_by_extention(self, ext, path):
189214
filelist = os.listdir(path)
190215

@@ -204,3 +229,4 @@ def run(self, argv, dependencies):
204229
self.deploy_win32(dependencies)
205230
self.deploy_linux(dependencies)
206231
self.deploy_wp8(dependencies)
232+
self.deploy_tizen(dependencies)

plugins/plugin_run/project_run.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,17 @@ def run_linux(self, dependencies):
324324
with cocos.pushd(run_root):
325325
self._run_with_desktop_options(os.path.join(run_root, exe))
326326

327+
def run_tizen(self, dependencies):
328+
if not self._platforms.is_tizen_active():
329+
return
330+
331+
deploy_dep = dependencies['deploy']
332+
tizen_packageid = deploy_dep.tizen_packageid
333+
tizen_studio_path = cocos.check_environment_variable("TIZEN_STUDIO_HOME")
334+
tizen_cmd_path = cocos.CMDRunner.convert_path_to_cmd(os.path.join(tizen_studio_path, "tools", "ide", "bin", "tizen"))
335+
336+
startapp = "%s run -p %s" % (tizen_cmd_path, tizen_packageid)
337+
self._run_cmd(startapp)
327338

328339

329340
def run(self, argv, dependencies):
@@ -336,4 +347,5 @@ def run(self, argv, dependencies):
336347
self.run_win32(dependencies)
337348
self.run_linux(dependencies)
338349
self.run_wp8(dependencies)
350+
self.run_tizen(dependencies)
339351

0 commit comments

Comments
 (0)