这里要说的是Plugin,而不是Module,这是两个不同的东西!
在Titanium Mobile 的Kitchen Sink Demo中,可以发现有一个叫做plugins的文件夹,其中在子文件夹 ti.log 中,有一个名字为plugin.py的Python脚本文件。
plugins/ti.log/plugin.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# example compiler plugin
# the config object is a set of properties
# that are passed (dependent on platform)
# that will allow you to hook into the compiler tooling
#
def compile(config):
print "[INFO] Compiler plugin loaded and working for %s" % config['platform']
试着去查找Appcelerator的各种公开文档,目前还没有对于plugin开发的特别说明,基本上就没有提到过这个东西。但是庆幸的是,我们可以在GitHub上找到有人做的
Titanium中CoffeeScript的plugin,可以看出的是确实有人真的做出来了plugin(这个目前是一个针对让Titanium支持CoffeeScript的plugin)。
如下我们查看create命令的帮助说明,和Module的做法相同,我们也可以通过titanium.py来创建plugin的模板工程:
引用
$ titanium help create
Appcelerator Titanium
Copyright (c) 2010-2011 by Appcelerator, Inc.
Usage: titanium.py create [--platform=p] [--type=t] [--dir=d] [--name=n] [--id=i] [--ver=v]
--platform=p1,p2 platform: iphone, ipad, android, blackberry, etc.
--type=t type of project: project, module, plugin
--dir=d directory to create the new project
--name=n project name
--id=i project id (ie com.companyName.project
--ver=i platform version
--android=sdk_folder For android module - the Android SDK folder
可以很明显看出,它提供了type为plugin的这么一个接口,也就是说它本身是具备这个功能的。那么我们就试着利用这条命令来创建一个plugin模板工程:
引用
$ titanium create --type=plugin --name=myplugin --id=jp.isisredirect.myplugin
Created plugin project
命令执行后,我们就能够发现plugin模板工程被成功创建好了。在jp.isisredirect.myplugin文件夹下可以找到该工程。
引用
$ ls -l jp.isisredirect.myplugin
total 40
-rw-r--r-- 1 <username> staff 77 12 24 11:56 LICENSE
-rw-r--r-- 1 <username> staff 681 12 24 11:56 README
-rwxr-xr-x 1 <username> staff 3034 12 24 11:56 build.py
-rw-r--r-- 1 <username> staff 363 12 24 11:56 manifest
-rwxr-xr-x 1<username> staff 185 12 24 11:56 plugin.py
这里的几个文件中,build.py是用来生成plugin的脚本,我们进入jp.isisredirect.myplugin文件夹中,然后运行build.py脚本。
引用
$ ./build.py
[WARN] please update the manifest key: 'copyright' to a non-default value
[WARN] please update the manifest key: 'license' to a non-default value
[WARN] please update the LICENSE file with your license text before distributingPlugin
packaged at jp.isisredirect.myplugin-0.1.zip
这里由于是默认的模板工程,没有修改manifst和LICENSE文件。所以有警告,不过没有关系,它还是成功的创建出来了plugin(jp.isisredirect.myplugin-0.1.zip)。
我们打开README 看看里边的具体内容,可以看出的是,和Module一样,我们也可以将这个plugin放到我们工程的plugins/jp.isisredirect.myplugin/之下。但是要想正确的运行包含有这个plugin的Titanium工程,我们还需要和Module一样,在tiapp.xml中追加一下设置来导入该plugin.
<plugins>
<plugin version="0.1">jp.isisredirect.myplugin</plugin>
</plugins>
这样一来,我们在Build这个Titanium工程的时候,plugin.py文件就能够被执行了。
这里我们没有修改plugin.py文件,至于怎么样修改?什么时候该文件被执行?等等问题还需要进一步的了解Titanium的编译构建过程(目前还没有这方面的资料)。
我们先来看看刚才运行的那个build.py文件:
for plugin in ti.properties['plugins']:
local_plugin_file = os.path.join(local_compiler_dir,plugin['name'],'plugin.py')
plugin_file = os.path.join(tp_compiler_dir,plugin['name'],plugin['version'],'plugin.py')
if not os.path.exists(local_plugin_file) and not os.path.exists(plugin_file):
o.write("+ Missing plugin at %s (checked %s also)\n" % (plugin_file,local_plugin_file))
print "[ERROR] Build Failed (Missing plugin for %s). Please see output for more details" % plugin['name']
sys.stdout.flush()
sys.exit(1)
o.write("+ Detected plugin: %s/%s\n" % (plugin['name'],plugin['version']))
print "[INFO] Detected compiler plugin: %s/%s" % (plugin['name'],plugin['version'])
code_path = plugin_file
if os.path.exists(local_plugin_file):
code_path = local_plugin_file
o.write("+ Loading compiler plugin at %s\n" % code_path)
compiler_config['plugin']=plugin
fin = open(code_path, 'rb')
m = hashlib.md5()
m.update(open(code_path,'rb').read())
code_hash = m.hexdigest()
p = imp.load_source(code_hash, code_path, fin)
p.compile(compiler_config)
fin.close()
依据在tiapp.xml中设置的<plugins><plugin>内容,来选择应该启动的plugin.py。
如果不能启动的话,输出“Build Failed (Missing plugin for %s)”错误信息。
如果能启动的话,调用plugin.py 中的compile 函数。
再来看看通过titanium.py 做成的 plugin.py 文件:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Titanium Compiler plugin
# jp.isisredirect.myplugin
#
def compile(config):
print "[INFO] jp.isisredirect.myplugin plugin loaded"
这里基本上就是只是生成了一个空的compile函数,如果有需要的处理可以在这里编写代码实现。其中的参数config是在调用它的地方被设置为:
compiler_config = {
'platform':'ios',
'devicefamily':devicefamily,
'simtype':simtype,
'tiapp':ti,
'project_dir':project_dir,
'titanium_dir':titanium_dir,
'appid':appid,
'iphone_version':iphone_version,
'template_dir':template_dir,
'project_name':name,
'command':command,
'deploytype':deploytype,
'build_dir':build_dir,
'app_name':app_name,
'app_dir':app_dir,
'iphone_dir':iphone_dir
}
各个值的含义的话,仔细阅读build.py的脚本内容就能明白(这些参数的值,在Build的时候可能会有很多的处理)。
关于Titanium的plugin,可以看出它是作为Build的预处理来执行的,在Build之前,他需要验证文件的整合型,以及代码,资源文件等等的预处理。目前来说CoffeeScript的plugin就是最好的例子,应该继续的再深入研究研究。
分享到:
相关推荐
**Titanium中文版开发手册** Titanium中文版开发手册是一份专门为中文用户编译的开发者指南,旨在帮助熟悉中文的开发者充分利用Titanium框架进行移动应用的开发。Titanium是一个开源的JavaScript平台,允许开发者...
这篇博客“使用Titanium来开发“Path”的一些创新UI布局 - 左右菜单”可能探讨了如何利用 Titanium 创建类似 Path 应用的界面设计,其中包含了左右滑动切换菜单的实现。Path 是一款知名的社交应用,其用户界面以其...
[Packt Publishing] Appcelerator Titanium 移动应用开发教程 (英文版) [Packt Publishing] Creating Mobile Apps with Appcelerator Titanium (E-Book) ☆ 图书概要:☆ Develop fully-featured mobile ...
### TITANIUM智能手机应用开发教程知识点概览 #### 一、TITANIUM系统简介与特点 **TITANIUM系统**是一种基于云的移动应用程序开发平台,它支持跨平台开发,允许开发者使用JavaScript来编写原生移动应用程序。...
Titanium Mobile SDK 3.1.0 是一个用于构建原生移动应用的开发工具,尤其针对iOS和Android平台。这个版本的Apidoc是开发者的重要参考资料,它包含了完整的API文档,帮助开发者理解并使用Titanium框架的各种功能。...
Titanium是一个开源的移动开发框架,它允许开发者使用JavaScript语言来构建原生的iOS、Android以及Windows应用程序。这个框架的核心理念是提供一个跨平台的解决方案,让开发者可以用一种语言编写代码,然后在多个...
Titanium Mobile API 是一款由 Appcelerator 公司提供的用于跨平台移动应用开发的强大工具包。该工具允许开发者使用 JavaScript 编写应用程序,并通过一套统一的 API 接口访问原生移动设备功能,如 GPS 定位、摄像头...
[Packt Publishing] Appcelerator Titanium 商业应用开发经典实例 (英文版) [Packt Publishing] Appcelerator Titanium Business Application Development Cookbook (E-Book) ☆ 出版信息:☆ [作者信息] ...
使用基于javascript的Titanium Mobile 技术跨平台开发原生iOS和Android 应用培训教程
前端开发领域中,`node-titanium-sdk`是一个重要的开源库,它基于Node.js环境,为开发者提供了一种使用JavaScript开发原生移动应用的途径。`node-titanium-sdk`是Appcelerator Titanium SDK的一部分,允许开发者利用...
《TitaniumBackup_6.0.5.1:专业版的安卓备份与恢复解决方案》 在安卓设备的管理和维护中,数据备份与恢复是至关重要的环节。TitaniumBackup_6.0.5.1,这款专业版应用,以其强大的功能和高效的操作,为用户提供了...
而Titanium打破了这一限制,开发者可以用自己熟悉的语言进行开发,同时保持接近原生性能的表现。 - **跨平台开发**:无论是移动设备还是桌面系统,开发者都能通过单一代码库实现跨平台的应用开发。 - **强大的API...
Titanium 是一个强大的开源JavaScript框架,专为开发原生移动应用而设计。它允许开发者使用JavaScript编写代码,同时能够利用iOS、Android等平台的原生功能。在涉及到“titanium 打开本地网络”的话题时,我们主要...
Titanium 是一个开源的移动应用开发框架,它允许开发者使用 JavaScript 来构建原生的 iOS 和 Android 应用。这个“Titanium 资料”压缩包包含了几个关键的学习资源,帮助开发者深入理解和掌握 Titanium Studio 开发...
**Titanium**是由Appcelerator公司开发的一款跨平台移动应用开发框架。它通过一套统一的API接口,允许开发者用JavaScript编写一次代码就能在iOS、Android等多个平台上运行。这大大简化了移动应用的开发流程,并降低...