$npm install -g nativescript
或者下载github上项目代码进行构建(不推荐)
JAVA_HOME D:/program file/java/jdk_1.7.34/ path D:/program file/java/jdk_1.7.34/bin classpath D:/program file/java/jdk_1.7.34/lib
测试方法:java -version
ANT_HOME C:/ apache-ant-1.9.5 path C:/ apache-ant-1.9.5/bin classpath C:/apache-ant-1.9.5/lib
测试方法:ant -version
ANDROID_HOME D:/android-sdk-windows path D:/androidandroid-sdk-windowstools classpath D:/androidandroid-sdk-windowstoolslib
测试方法:android
必须掌握的两个命令:abd start-server/ adb kill-server,用于启动android debug服务,adb使用与启动模拟器或是通过手机的自动安装调试,并可以看到log信息。这两个命令会经常用到
然后 命令行运行一下tns,如果看到以下提示信息,就可以开始第一个开发了。
# NativeScript
┌─────────┬─────────────────────────────
───────────────────────────────────┐
│ Usage │ Synopsis │
│ General │ $ tns <Command> [Command Parameters] [--command <Options>] │
│ Alias │ $ nativescript <Command> [Command Parameters] [--command │
│ │ <Options>] │
└─────────┴─────────────────────────────
───────────────────────────────────┘
$ tns create demo $ cd demo $ tns platform add andrdoi/ios ├── app // bower dependencies ├── App_Resources // bower dependencies ├── Android // android项目的drawble静态图片等文件,项目转换的时候直接拷贝到android项目下 ├── iOS //ios项目用到的图片文件 ├── tns_modules //tns node模块,可以用来调用移动设备功能 ├── app.css // 内部控件样式 ├── app.js // 页面配置入口配置 ├── LICENSE ├── main-page.js // 页面js文件 ├── main-page.xml // 页面布局文件 ├── main-view-model.js // vm对象生成文件 ├── package.json // bower dependencies ├── node_module // node插件忽略 ├── platforms // 转换后的移动端平台代码 ├── android // 标准的可移植android项目代码 ├── ios //标准的可移植ios项目代码 └──package.json //项目信息配置文件
从项目的结构可以看出,项目代码使用的mvvm结构,而且它的viewmodel是通过方法操作的。
$ tns platform add ios/android $ tns run android/ios (真机启动) 或者 tns run android/ios --emulator(启动模拟器)
如果没问题的话就可以看到手机或模拟器上启动了应用程序
来自: http://docs.nativescript.org/hello-world/hello-world-ns-cli.html
分析一下页面主要的代码结构
var application = require("application"); application.mainModule = "main-page"; application.cssFile = "./app.css"; application.start();
var vmModule = require("./main-view-model"); function pageLoaded(args) { var page = args.object; page.bindingContext = vmModule.mainViewModel; } exports.pageLoaded = pageLoaded;
var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; var observable = require("data/observable"); var HelloWorldModel = (function (_super) { __extends(HelloWorldModel, _super); function HelloWorldModel() { _super.call(this); this.counter = 42; this.set("message", this.counter + " taps left"); } HelloWorldModel.prototype.tapAction = function () { this.counter--; if (this.counter <= 0) { this.set("message", "Hoorraaay! You unlocked the NativeScript clicker achievement!"); } else { this.set("message", this.counter + " taps left"); } }; return HelloWorldModel; })(observable.Observable); exports.HelloWorldModel = HelloWorldModel; exports.mainViewModel = new HelloWorldModel();
.title { font-size: 30; horizontal-align: center; margin:20; } button { font-size: 42; horizontal-align: center; } .message { font-size: 20; color: #284848; horizontal-align: center; }
main-page.xml android上布局的文件,类似vm模板,注意,是xml的,不是html
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded"> <StackLayout> <Label text="Tap the button" cssClass="title"/> <Button text="TAP" tap="{{ tapAction }}" /> <Label text="{{ message }}" cssClass="message" textWrap="true"/> </StackLayout> </Page>
当然这次只分析了个简单的例子,后面自己搞个复杂的例子来分享下,敬请期待(类似的还有samurai-native和react-native,坐等android支持)~