$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支持)~