Titanium 的Module的开发
针对Titanium中需要特定的功能可能需要开发者定制,如二维码等。所以需要自己开发相关的module在项目中使用。
开发环境准备
下载titanium studio
下载eclipse + ant
下载android sdk
下载android ndk
官方推荐:
注意:必须参考下面的官方网址, python在windows环境下不用安装,本身titanium studio已经装了
https://wiki.appcelerator.org/display/guides/Android+Module+Development+Guide
关于titanium自动生成module的模板在:
${Titanium SDK}\mobilesdk\win32\1.8.2\module\android\templates\src\___MODULE_ID_AS_FOLDER___
本文将简单一下关于titanium module的描述。
ant编译module工程
1)将此工程放到eclipse下(带有ant环境),编辑builder.properties文件,加上android ndk路径。如下:
android.ndk=C:\android-ndk\android-ndk-r8
针对android的NDK如果在环境变量中设置,那么就可以不再builder.properties文件中设置,否则必须设置。
模块代理类如下:
/** * This file was auto-generated by the Titanium Module SDK helper for Android * Appcelerator Titanium Mobile * Copyright (c) 2009-2010 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. * */ package com.easyway; import org.appcelerator.kroll.KrollDict; import org.appcelerator.kroll.KrollProxy; import org.appcelerator.kroll.annotations.Kroll; import org.appcelerator.titanium.TiC; import org.appcelerator.titanium.util.Log; import org.appcelerator.titanium.util.TiConfig; import org.appcelerator.titanium.util.TiConvert; import org.appcelerator.titanium.proxy.TiViewProxy; import org.appcelerator.titanium.view.TiCompositeLayout; import org.appcelerator.titanium.view.TiCompositeLayout.LayoutArrangement; import org.appcelerator.titanium.view.TiUIView; import android.app.Activity; // This proxy can be created by calling Hellomodule.createExample({message: "hello world"}) @Kroll.proxy(creatableInModule=HellomoduleModule.class) public class ExampleProxy extends TiViewProxy { // Standard Debugging variables private static final String LCAT = "ExampleProxy"; private static final boolean DBG = TiConfig.LOGD; private class ExampleView extends TiUIView { public ExampleView(TiViewProxy proxy) { super(proxy); LayoutArrangement arrangement = LayoutArrangement.DEFAULT; if (proxy.hasProperty(TiC.PROPERTY_LAYOUT)) { String layoutProperty = TiConvert.toString(proxy.getProperty(TiC.PROPERTY_LAYOUT)); if (layoutProperty.equals(TiC.LAYOUT_HORIZONTAL)) { arrangement = LayoutArrangement.HORIZONTAL; } else if (layoutProperty.equals(TiC.LAYOUT_VERTICAL)) { arrangement = LayoutArrangement.VERTICAL; } } setNativeView(new TiCompositeLayout(proxy.getActivity(), arrangement)); } @Override public void processProperties(KrollDict d) { super.processProperties(d); } } // Constructor public ExampleProxy() { super(); } @Override public TiUIView createView(Activity activity) { TiUIView view = new ExampleView(this); view.getLayoutParams().autoFillsHeight = true; view.getLayoutParams().autoFillsWidth = true; return view; } // Handle creation options @Override public void handleCreationDict(KrollDict options) { super.handleCreationDict(options); if (options.containsKey("message")) { Log.d(LCAT, "example created with message: " + options.get("message")); } } // Methods @Kroll.method public void printMessage(String message) { Log.d(LCAT, "printing message: " + message); } @Kroll.getProperty @Kroll.method public String getMessage() { return "Hello World from my module"; } @Kroll.setProperty @Kroll.method public void setMessage(String message) { Log.d(LCAT, "Tried setting module message to: " + message); } }
/** * This file was auto-generated by the Titanium Module SDK helper for Android * Appcelerator Titanium Mobile * Copyright (c) 2009-2010 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. * */ package com.easyway; import org.appcelerator.kroll.KrollModule; import org.appcelerator.kroll.annotations.Kroll; import org.appcelerator.titanium.TiApplication; import org.appcelerator.kroll.common.Log; import org.appcelerator.kroll.common.TiConfig; @Kroll.module(name="Hellomodule", id="com.easyway") public class HellomoduleModule extends KrollModule { // Standard Debugging variables private static final String LCAT = "HellomoduleModule"; private static final boolean DBG = TiConfig.LOGD; // You can define constants with @Kroll.constant, for example: // @Kroll.constant public static final String EXTERNAL_NAME = value; public HellomoduleModule() { super(); } @Kroll.onAppCreate public static void onAppCreate(TiApplication app) { Log.d(LCAT, "inside onAppCreate"); // put module init code that needs to run when the application is created } // Methods @Kroll.method public String example() { Log.d(LCAT, "example called"); return "hello world"; } // Properties @Kroll.getProperty public String getExampleProp() { Log.d(LCAT, "get example property"); return "hello world"; } @Kroll.setProperty public void setExampleProp(String value) { Log.d(LCAT, "set example property: " + value); } }
编译成功后会在dist目录下生成相应的zip包。
如何调用的module
1.配置tiapp.xml文件中模块
<modules> <module version="1.1">com.easyway</module> </modules>
2.将zip解压之后的modules拷贝到对应的titanium module应用的根目录中。
如下:
3.调用:
// This is a test harness for your module // You should do something interesting in this harness // to test out the module and to provide instructions // to users on how to use it by example. // open a single window var win = Ti.UI.createWindow({ backgroundColor:'white' }); var label = Ti.UI.createLabel(); win.add(label); win.open(); // TODO: write your module tests here var hellomodule = require('com.easyway'); Ti.API.info("module is => " + hellomodule); label.text = hellomodule.example(); Ti.API.info("module exampleProp is => " + hellomodule.exampleProp); hellomodule.exampleProp = "This is a test value"; if (Ti.Platform.name == "android") { var proxy = hellomodule.createExample({ message: "Creating an example Proxy", backgroundColor: "red", width: 100, height: 100, top: 100, left: 150 }); proxy.printMessage("Hello world!"); proxy.message = "Hi world!. It's me again."; proxy.printMessage("Hello world!"); win.add(proxy); }