ionic开发Android App学习笔记(一)

简介

ionic是一个强大的混合式/hybrid HTML5移动开发框架,特点是使用标准的HTML、CSS和JavaScript,开发跨平台的应用。

官网:http://ionicframework.com/ 打开稍慢,但是没有被墙。

ionic特点:漂亮的界面 追求性能  专注原生 免费开源

既然是开源的,就不得不提一下它的源代码地址:

ionic的github地址

已经有2万个star。

环境搭建

  1. 下载 Node.js

    上面的链接是Node的官网,当然也可以去中文网站下载,选择对应的平台和版本进行下载。

    ps:作者用的是mac电脑,也推荐用mac电脑进行以后的开发操作,各种命令用起来比较方便。

  2. 安装Node.js

    mac版本的Node.js下载下来的直接就是一个dmg的安装包,一直点下一步就能顺利安装成功。

    安装完成后,打开终端输入node -v ,出现版本号即为安装成功,如下图。

    查看node版本号
  3. 安装cordova和ionic

    node安装成功后,打开终端,执行 npm install -g cordova ionic 命令,如果出现无法写入的权限,则执行sudo npm install -g cordova ionic 输入mac登录密码以管理员身份进行下载安装。该下载过程可能比较缓慢,花费较长的时间。安装完成后,分别执行ionic -v 和cordova -v出现相应的版本号,即为安装成功。

  4. 安装Android SDK

    下载安装Android SDK这里不再多说

  5. 配置相关环境变量

    笔者开始是在.bash_profile文件中配置ANDROID_HOME ,但是在做相关操作的时候却好像没有按照这个配置的路径去找sdk,报找不到相应sdk的错误,所以参考了facebook上React Native的配置,又在.bashrc中进行了相同的配置。 如果找不到这2个文件,可以通过vi命令创建文件,然后将相应的配置写入保存,然后执行

    source .bash_profile和source .bashrc 即可。

创建ionic项目

相关的配置完成后,打开终端,在相应的目录下执行

ionic start myApp tabs

即可创建一个带tab页的项目,当然也可以创建其他风格的,如下

 ionic start myApp blank    创建一个空白的项目
ionic start myApp sidemenu  创建一个带侧滑栏的项目

如下图即为完整的项目目录:

目录结构

编译项目

进入项目目录,终端下执行

ionic platform add android

然后执行

ionic build android

即可进行编译,android采用的是gradle进行编译,第一次可能要去下载gradle,过程比较慢,花费较长时间。

等待,等待,出现 BUILD SUCCESSFUL 即为编译成功。

调试运行

还在当前项目目录下,执行如下命令

ionic emulate android

即可在模拟器上运行,如果没有模拟器可能会报错。

这里重点说明以下如何安装到真机上。

需要执行如下命令

ionic run --target=56112d22 android

说明:等号后面的是手机的标识码,可以通过adb devices获取到,当然前提是手机通过usb数据线连接到电脑上。

运行效果图如下:

运行效果图

默认的情况下,tab是在上面的,上图是笔者改过之后的效果,如何将tab栏从顶部移到底部呢?

参考链接:http://bbs.phonegap100.com/thread-1495-1-1.html

上面的链接中可能说的不是很清楚,笔者是进行如下操作的,找到

myApp/www/js/app.js 文件(ps:myApp是项目名称)

打开app.js,找到第24行,添加如下代码

.config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
    $ionicConfigProvider.platform.ios.tabs.style('standard');
    $ionicConfigProvider.platform.ios.tabs.position('bottom');
    $ionicConfigProvider.platform.android.tabs.style('standard');
    $ionicConfigProvider.platform.android.tabs.position('bottom');

    $ionicConfigProvider.platform.ios.navBar.alignTitle('center');
    $ionicConfigProvider.platform.android.navBar.alignTitle('left');

    $ionicConfigProvider.platform.ios.backButton.previousTitleText('').icon('ion-ios-arrow-thin-left');
    $ionicConfigProvider.platform.android.backButton.previousTitleText('').icon('ion-android-arrow-back');

    $ionicConfigProvider.platform.ios.views.transition('ios');
    $ionicConfigProvider.platform.android.views.transition('android');
})

贴上改完之后完整的app.js代码

// Ionic Starter App

// angular.module is a global place for creating, registering and retrieving Angular modules
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
// 'starter.services' is found in services.js
// 'starter.controllers' is found in controllers.js
angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])

    .run(function ($ionicPlatform) {
        $ionicPlatform.ready(function () {
            // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
            // for form inputs)
            if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
                cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
                cordova.plugins.Keyboard.disableScroll(true);

            }
            if (window.StatusBar) {
                // org.apache.cordova.statusbar required
                StatusBar.styleLightContent();
            }
        });
    })
    .config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
        $ionicConfigProvider.platform.ios.tabs.style('standard');
        $ionicConfigProvider.platform.ios.tabs.position('bottom');
        $ionicConfigProvider.platform.android.tabs.style('standard');
        $ionicConfigProvider.platform.android.tabs.position('bottom');

        $ionicConfigProvider.platform.ios.navBar.alignTitle('center');
        $ionicConfigProvider.platform.android.navBar.alignTitle('left');

        $ionicConfigProvider.platform.ios.backButton.previousTitleText('').icon('ion-ios-arrow-thin-left');
        $ionicConfigProvider.platform.android.backButton.previousTitleText('').icon('ion-android-arrow-back');

        $ionicConfigProvider.platform.ios.views.transition('ios');
        $ionicConfigProvider.platform.android.views.transition('android');
    })
    .config(function ($stateProvider, $urlRouterProvider) {

        // Ionic uses AngularUI Router which uses the concept of states
        // Learn more here: https://github.com/angular-ui/ui-router
        // Set up the various states which the app can be in.
        // Each state's controller can be found in controllers.js
        $stateProvider

            // setup an abstract state for the tabs directive
            .state('tab', {
                url: '/tab',
                abstract: true,
                templateUrl: 'templates/tabs.html'
            })

            // Each tab has its own nav history stack:

            .state('tab.dash', {
                url: '/dash',
                views: {
                    'tab-dash': {
                        templateUrl: 'templates/tab-dash.html',
                        controller: 'DashCtrl'
                    }
                }
            })

            .state('tab.chats', {
                url: '/chats',
                views: {
                    'tab-chats': {
                        templateUrl: 'templates/tab-chats.html',
                        controller: 'ChatsCtrl'
                    }
                }
            })
            .state('tab.chat-detail', {
                url: '/chats/:chatId',
                views: {
                    'tab-chats': {
                        templateUrl: 'templates/chat-detail.html',
                        controller: 'ChatDetailCtrl'
                    }
                }
            })

            .state('tab.account', {
                url: '/account',
                views: {
                    'tab-account': {
                        templateUrl: 'templates/tab-account.html',
                        controller: 'AccountCtrl'
                    }
                }
            });

        // if none of the above states are matched, use this as the fallback
        $urlRouterProvider.otherwise('/tab/dash');

    });

改完之后,再次运行,tab栏就移到了底部。

至此,整个ionic项目从创建到运行就都完成了。

WebStorm开发

用webstorm打开整个项目,目录结构如下:

WebStorm项目目录结构

添加运行的module,如下图配置,即可直接在webstorm中运行ionic项目,部署到真机上

module运行配置

就酱!!!

参考链接:

http://www.ionic.wang/

http://bbs.phonegap100.com/thread-1495-1-1.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容